Added errors
This commit is contained in:
parent
5db6014654
commit
53682cf1b7
131
src/errors.rs
Normal file
131
src/errors.rs
Normal file
@ -0,0 +1,131 @@
|
||||
// localizer-rs errors
|
||||
// Version: 1.0.0
|
||||
|
||||
// Copyright (c) 2023-present ElBe Development.
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
// copy of this software and associated documentation files (the 'Software'),
|
||||
// to deal in the Software without restriction, including without limitation
|
||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
// and/or sell copies of the Software, and to permit persons to whom the
|
||||
// Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
////////////////////////////////
|
||||
// IMPORTS AND USE STATEMENTS //
|
||||
////////////////////////////////
|
||||
|
||||
use std::fmt;
|
||||
|
||||
|
||||
///////////
|
||||
// ERROR //
|
||||
///////////
|
||||
|
||||
/// Error object.
|
||||
///
|
||||
/// Use [`Error::new()`] to create error objects instead of using this struct.
|
||||
///
|
||||
/// # Parameters
|
||||
///
|
||||
/// - `name`: The errors name.
|
||||
/// - `description`: The error description.
|
||||
/// - `exit_code`: The errors exit code.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// A new `Error` object with the specified name and description.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```rust
|
||||
/// # use localizer_rs;
|
||||
/// localizer_rs::errors::Error {
|
||||
/// name: "name".to_owned(),
|
||||
/// description: "description".to_owned(),
|
||||
/// exit_code: 1
|
||||
/// };
|
||||
/// ```
|
||||
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
|
||||
pub struct Error {
|
||||
pub name: String,
|
||||
pub description: String,
|
||||
pub exit_code: i32,
|
||||
}
|
||||
|
||||
impl fmt::Display for Error {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, "\x1b[31;1m{}\x1b[0m: {}", self.name, self.description)
|
||||
}
|
||||
}
|
||||
|
||||
impl Error {
|
||||
/// Creates a new error object.
|
||||
///
|
||||
/// # Parameters
|
||||
///
|
||||
/// - `name`: The errors name.
|
||||
/// - `description`: The error description.
|
||||
/// - `exit_code`: The errors exit code.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// A new `Error` object with the specified name and description.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```rust
|
||||
/// # use localizer_rs;
|
||||
/// localizer_rs::errors::Error::new("name", "description", 1);
|
||||
/// ```
|
||||
///
|
||||
/// # See also
|
||||
///
|
||||
/// - [`Error`]
|
||||
pub fn new(name: &str, description: &str, exit_code: i32) -> Error {
|
||||
return Error {
|
||||
name: name.to_owned(),
|
||||
description: description.to_owned(),
|
||||
exit_code: exit_code
|
||||
};
|
||||
}
|
||||
|
||||
/// Raises the error and exits with the specified exit code.
|
||||
///
|
||||
/// # Parameters
|
||||
///
|
||||
/// - `self`: The error object.
|
||||
/// - `details`: The error details.
|
||||
///
|
||||
/// # Aborts
|
||||
///
|
||||
/// Exits with the specified exit code.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```should_panic
|
||||
/// # use localizer_rs;
|
||||
/// # let error: localizer_rs::errors::Error = localizer_rs::errors::Error::new("name", "description", 1);
|
||||
/// error.raise("Something went very wrong");
|
||||
/// ```
|
||||
///
|
||||
/// # See also
|
||||
///
|
||||
/// - [`Error`]
|
||||
pub fn raise(&self, details: &str) {
|
||||
eprintln!("{}", self);
|
||||
eprintln!("{}", details);
|
||||
|
||||
std::process::exit(self.exit_code);
|
||||
}
|
||||
}
|
||||
@ -22,6 +22,13 @@
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
/////////////
|
||||
// EXPORTS //
|
||||
/////////////
|
||||
|
||||
pub mod errors;
|
||||
|
||||
|
||||
////////////////////////////////
|
||||
// IMPORTS AND USE STATEMENTS //
|
||||
////////////////////////////////
|
||||
|
||||
62
tests/errors.rs
Normal file
62
tests/errors.rs
Normal file
@ -0,0 +1,62 @@
|
||||
// localizer-rs error tests
|
||||
// Version: 1.0.0
|
||||
|
||||
// Copyright (c) 2023-present ElBe Development.
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
// copy of this software and associated documentation files (the 'Software'),
|
||||
// to deal in the Software without restriction, including without limitation
|
||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
// and/or sell copies of the Software, and to permit persons to whom the
|
||||
// Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
////////////////////////////////
|
||||
// IMPORTS AND USE STATEMENTS //
|
||||
////////////////////////////////
|
||||
|
||||
#[allow(unused_imports)]
|
||||
use localizer_rs;
|
||||
|
||||
|
||||
///////////
|
||||
// TESTS //
|
||||
///////////
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
#[test]
|
||||
fn test_error() {
|
||||
let error: localizer_rs::errors::Error = localizer_rs::errors::Error::new("name", "description", 1);
|
||||
|
||||
assert_eq!(error, localizer_rs::errors::Error {
|
||||
name: "name".to_owned(),
|
||||
description: "description".to_owned(),
|
||||
exit_code: 1
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
fn raise_helper() {
|
||||
let error: localizer_rs::errors::Error = localizer_rs::errors::Error::new("name", "description", 1);
|
||||
error.raise("details");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_raise() {
|
||||
let status = std::process::Command::new("cargo").args(&["test", "--", "--ignored"]).stdout(std::process::Stdio::null()).stderr(std::process::Stdio::null()).status().expect("Unable to run program");
|
||||
|
||||
assert_eq!(Some(1), status.code())
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
// localizer-rs tests
|
||||
// Version: 1.0.0-alpha1
|
||||
// Version: 1.0.0
|
||||
|
||||
// Copyright (c) 2023-present ElBe Development.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user