printerrors
This commit is contained in:
commit
8f437e0be9
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
/target
|
16
Cargo.lock
generated
Normal file
16
Cargo.lock
generated
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "alex-utils"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"log",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "log"
|
||||||
|
version = "0.4.20"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
|
11
Cargo.toml
Normal file
11
Cargo.toml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
[package]
|
||||||
|
name = "alex-utils"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = ["log"]
|
||||||
|
log = ["dep:log"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
log = { version = "0.4", optional = true }
|
3
src/lib.rs
Normal file
3
src/lib.rs
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
mod print_errors;
|
||||||
|
|
||||||
|
pub use print_errors::PrintErrors;
|
39
src/print_errors.rs
Normal file
39
src/print_errors.rs
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
pub trait PrintErrors {
|
||||||
|
type Inner;
|
||||||
|
|
||||||
|
fn some_or_print(self) -> Option<Self::Inner>;
|
||||||
|
fn some_or_print_with_context(self, context: &str) -> Option<Self::Inner>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T, E> PrintErrors for Result<T, E>
|
||||||
|
where
|
||||||
|
E: std::error::Error,
|
||||||
|
{
|
||||||
|
type Inner = T;
|
||||||
|
|
||||||
|
fn some_or_print(self) -> Option<Self::Inner> {
|
||||||
|
match self {
|
||||||
|
Ok(val) => Some(val),
|
||||||
|
Err(e) => {
|
||||||
|
#[cfg(feature = "log")]
|
||||||
|
log::error!("{e:?}");
|
||||||
|
#[cfg(not(feature = "log"))]
|
||||||
|
println!("{e:?}");
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn some_or_print_with_context(self, context: &str) -> Option<Self::Inner> {
|
||||||
|
match self {
|
||||||
|
Ok(val) => Some(val),
|
||||||
|
Err(e) => {
|
||||||
|
#[cfg(feature = "log")]
|
||||||
|
log::error!("{context}: {e:?}");
|
||||||
|
#[cfg(not(feature = "log"))]
|
||||||
|
println!("{context}: {e:?}");
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue