miden-node-utils 0.16.0-rc.5

Miden node's shared utilities
Documentation
// Required by code generated by the upstream `#[instrument]` macro.
extern crate miden_node_tracing as tracing;

pub mod block_cache;
pub mod clap;
pub mod cors;
#[cfg(feature = "testing")]
pub mod fee;
pub mod formatting;
pub mod fs;
pub mod genesis;
pub mod grpc;
pub mod limiter;
pub mod lru_cache;
pub mod retry;
pub mod shutdown;
pub mod tasks;

/// Extends nested results types, allowing them to be flattened.
///
/// Adapted from: <https://stackoverflow.com/a/77543839>
pub trait FlattenResult<V, OuterError, InnerError>
where
    InnerError: Into<OuterError>,
{
    fn flatten_result(self) -> Result<V, OuterError>;
}

impl<V, OuterError, InnerError> FlattenResult<V, OuterError, InnerError>
    for Result<Result<V, InnerError>, OuterError>
where
    OuterError: From<InnerError>,
{
    fn flatten_result(self) -> Result<V, OuterError> {
        match self {
            Ok(Ok(value)) => Ok(value),
            Ok(Err(inner)) => Err(inner.into()),
            Err(outer) => Err(outer),
        }
    }
}