Refactor, generate code with macro
This commit is contained in:
parent
deb1544bc5
commit
d050be4cbc
4 changed files with 57 additions and 56 deletions
|
@ -1,28 +1,8 @@
|
||||||
pub trait DebugResult<T, E> : Sized {
|
generate_result_logging_extension!(
|
||||||
|
DebugResult,
|
||||||
fn map_dbg<F: FnOnce(&T) -> String>(self, f: F) -> Self;
|
map_dbg,
|
||||||
|
map_dbg_str,
|
||||||
fn map_dbg_str(self, s: &str) -> Self {
|
map_dbg_err,
|
||||||
self.map_dbg(|_| format!("{}", s))
|
map_dbg_err_str,
|
||||||
}
|
|s| { debug!("{}", s); }
|
||||||
|
);
|
||||||
fn map_dbg_err<F: FnOnce(&E) -> String>(self, f: F) -> Self;
|
|
||||||
|
|
||||||
fn map_dbg_err_str(self, s: &str) -> Self {
|
|
||||||
self.map_dbg_err(|_| format!("{}", s))
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T, E> DebugResult<T, E> for Result<T, E> {
|
|
||||||
|
|
||||||
fn map_dbg<F: FnOnce(&T) -> String>(self, f: F) -> Self {
|
|
||||||
self.map(|t| { debug!("{}", f(&t)); t })
|
|
||||||
}
|
|
||||||
|
|
||||||
fn map_dbg_err<F: FnOnce(&E) -> String>(self, f: F) -> Self {
|
|
||||||
self.map_err(|e| { debug!("{}", f(&e)); e })
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -1,28 +1,8 @@
|
||||||
pub trait InfoResult<T, E> : Sized {
|
generate_result_logging_extension!(
|
||||||
|
InfoResult,
|
||||||
fn map_info<F: FnOnce(&T) -> String>(self, f: F) -> Self;
|
map_info,
|
||||||
|
map_info_str,
|
||||||
fn map_info_str(self, s: &str) -> Self {
|
map_info_err,
|
||||||
self.map_info(|_| format!("{}", s))
|
map_info_err_str,
|
||||||
}
|
|s| { info!("{}", s); }
|
||||||
|
);
|
||||||
fn map_info_err<F: FnOnce(&E) -> String>(self, f: F) -> Self;
|
|
||||||
|
|
||||||
fn map_info_err_str(self, s: &str) -> Self {
|
|
||||||
self.map_info_err(|_| format!("{}", s))
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T, E> InfoResult<T, E> for Result<T, E> {
|
|
||||||
|
|
||||||
fn map_info<F: FnOnce(&T) -> String>(self, f: F) -> Self {
|
|
||||||
self.map(|t| { info!("{}", f(&t)); t })
|
|
||||||
}
|
|
||||||
|
|
||||||
fn map_info_err<F: FnOnce(&E) -> String>(self, f: F) -> Self {
|
|
||||||
self.map_err(|e| { info!("{}", f(&e)); e })
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#[macro_use] extern crate log;
|
#[macro_use] extern crate log;
|
||||||
extern crate regex;
|
extern crate regex;
|
||||||
|
|
||||||
|
#[macro_use] mod log_result;
|
||||||
pub mod debug_result;
|
pub mod debug_result;
|
||||||
pub mod info_result;
|
pub mod info_result;
|
||||||
pub mod ismatch;
|
pub mod ismatch;
|
||||||
|
|
40
libimagutil/src/log_result.rs
Normal file
40
libimagutil/src/log_result.rs
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! generate_result_logging_extension {
|
||||||
|
{
|
||||||
|
$name: ident,
|
||||||
|
$map_name: ident,
|
||||||
|
$map_str_name: ident,
|
||||||
|
$map_err_name: ident,
|
||||||
|
$map_err_str_name: ident,
|
||||||
|
$closure: expr
|
||||||
|
} => {
|
||||||
|
pub trait InfoResult<T, E> : Sized {
|
||||||
|
|
||||||
|
fn $map_name<F: FnOnce(&T) -> String>(self, f: F) -> Self;
|
||||||
|
|
||||||
|
fn $map_str_name(self, s: &str) -> Self {
|
||||||
|
self.$map_name(|_| format!("{}", s))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn $map_err_name<F: FnOnce(&E) -> String>(self, f: F) -> Self;
|
||||||
|
|
||||||
|
fn $map_err_str_name(self, s: &str) -> Self {
|
||||||
|
self.$map_err_name(|_| format!("{}", s))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T, E> InfoResult<T, E> for Result<T, E> {
|
||||||
|
|
||||||
|
fn $map_name<F: FnOnce(&T) -> String>(self, f: F) -> Self {
|
||||||
|
self.map(|x| { $closure(f(&x)); x })
|
||||||
|
}
|
||||||
|
|
||||||
|
fn $map_err_name<F: FnOnce(&E) -> String>(self, f: F) -> Self {
|
||||||
|
self.map_err(|e| { $closure(f(&e)); e })
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue