haematite 0.6.0

Content-addressed, branchable, actor-native storage engine
Documentation
use super::node::BrowserNodeError;
use super::{BrowserLocalError, BrowserSourceError};
use crate::branch::{BranchGetError, FenceOperationError};
use crate::tree::TreeOperationError;

pub(super) const fn node_failure(
    operation: &'static str,
    source: BrowserSourceError,
) -> BrowserLocalError {
    BrowserLocalError::NodeFailure { operation, source }
}

pub(super) const fn fence_failure(
    operation: &'static str,
    source: BrowserSourceError,
) -> BrowserLocalError {
    BrowserLocalError::FenceFailure { operation, source }
}

pub(super) fn node_backend_failure(
    operation: &'static str,
    error: BrowserNodeError,
) -> BrowserLocalError {
    node_failure(operation, error.0)
}

pub(super) fn tree_failure(
    operation: &'static str,
    error: TreeOperationError<BrowserNodeError>,
) -> BrowserLocalError {
    let source = match error {
        TreeOperationError::Tree(error) => BrowserSourceError::Tree { error },
        TreeOperationError::NodeGet { source, .. } | TreeOperationError::NodePut { source } => {
            source.0
        }
    };
    node_failure(operation, source)
}

pub(super) fn branch_get_failure(
    operation: &'static str,
    error: BranchGetError<BrowserNodeError>,
) -> BrowserLocalError {
    match error {
        BranchGetError::Branch(error) => {
            node_failure(operation, BrowserSourceError::Branch { error })
        }
        BranchGetError::Tree(error) => tree_failure(operation, error),
    }
}

pub(super) fn node_publication_failure(
    operation: &'static str,
    error: FenceOperationError<BrowserSourceError>,
) -> BrowserLocalError {
    match error {
        FenceOperationError::NodePublication(source) => node_failure(operation, source),
        FenceOperationError::RecordEntry(_) => {
            unreachable!("record fence passed to node publication mapper")
        }
    }
}

pub(super) fn record_entry_failure(
    operation: &'static str,
    error: FenceOperationError<BrowserSourceError>,
) -> BrowserLocalError {
    match error {
        FenceOperationError::RecordEntry(source) => fence_failure(operation, source),
        FenceOperationError::NodePublication(_) => {
            unreachable!("node fence passed to record entry mapper")
        }
    }
}