You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.2 KiB
49 lines
1.2 KiB
5 years ago
|
use std::error::Error;
|
||
|
|
||
|
use log::error;
|
||
|
|
||
|
/// Wrapper for `Result<T, Box<dyn Error>>`.
|
||
|
///
|
||
|
/// # Example
|
||
|
/// ```
|
||
|
/// use rude::result::RudeResult;
|
||
|
///
|
||
|
/// fn example_result() -> RudeResult<()> {
|
||
|
/// Ok(())
|
||
|
/// }
|
||
|
/// ```
|
||
|
pub type RudeResult<T> = Result<T, Box<dyn Error>>;
|
||
|
|
||
|
/// Wrap `?` with an error message to stdout.
|
||
|
pub fn try_print<T, E: Into<Box<dyn Error>>, S: Into<String>>(
|
||
|
result: Result<T, E>,
|
||
|
message: S,
|
||
|
) -> RudeResult<T> {
|
||
|
try_error(result, message, false)
|
||
|
}
|
||
|
|
||
|
/// Wrap `?` with an error message to either stdout or the log.
|
||
|
///
|
||
|
/// * `result` - `Result` type to check for `Error`.
|
||
|
/// * `message` - Message to send to either log or stdout if `result` is `Error`.
|
||
|
/// * `log` - `true` to send `message` to log, otherwise send to stdout.
|
||
|
//pub fn try_error<T, S: Into<String>>(result: Result<T>, message: S, log: bool) -> Result<T> {
|
||
|
pub fn try_error<T, E: Into<Box<dyn Error>>, S: Into<String>>(
|
||
|
result: Result<T, E>,
|
||
|
message: S,
|
||
|
log: bool,
|
||
|
) -> RudeResult<T> {
|
||
|
match result {
|
||
|
Ok(r) => Ok(r),
|
||
|
Err(e) => {
|
||
|
let e = e.into();
|
||
|
if log {
|
||
|
error!("{} :: {}", message.into(), e);
|
||
|
} else {
|
||
|
println!("{} :: {}", message.into(), e);
|
||
|
}
|
||
|
Err(e.into())
|
||
|
}
|
||
|
}
|
||
|
}
|