35 lines
662 B
Rust
35 lines
662 B
Rust
use std::any::Any;
|
|
use std::result;
|
|
|
|
|
|
|
|
#[derive(Debug)]
|
|
pub enum ZoodexError {
|
|
CollectionFileReadError,
|
|
}
|
|
|
|
pub type Result<Success> = result::Result<Success, ZoodexError>;
|
|
|
|
impl From<Box<dyn Any + Send>> for ZoodexError {
|
|
fn from(error: Box<dyn Any + Send>) -> Self {
|
|
*error.downcast().unwrap()
|
|
}
|
|
}
|
|
|
|
macro_rules! async_result_context {(
|
|
$future: expr
|
|
$(, ok => $on_success: expr)?
|
|
$(, err => $on_failure: expr)?$(,)?
|
|
) => {
|
|
#[allow(unreachable_patterns)]
|
|
match $future.await {
|
|
$(Ok(value) => $on_success(value),)?
|
|
Ok(_) => {},
|
|
$(Err(error) => $on_failure(error),)?
|
|
Err(_) => {},
|
|
}
|
|
}}
|
|
|
|
|
|
|
|
pub(crate) use async_result_context;
|