foundationdb/recipes/ranked_register/
errors.rsuse crate::tuple::PackError;
use crate::{FdbBindingError, FdbError, RetryableError};
use std::fmt;
#[derive(Debug)]
pub enum RankedRegisterError {
Fdb(FdbError),
Binding(FdbBindingError),
PackError(PackError),
InvalidState(String),
}
impl fmt::Display for RankedRegisterError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Fdb(e) => write!(f, "Database error: {e}"),
Self::Binding(e) => write!(f, "Retry loop error: {e}"),
Self::PackError(e) => write!(f, "Pack error: {e:?}"),
Self::InvalidState(msg) => write!(f, "Invalid state: {msg}"),
}
}
}
impl std::error::Error for RankedRegisterError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
Self::Fdb(e) => Some(e),
Self::Binding(e) => Some(e),
Self::PackError(e) => Some(e),
Self::InvalidState(_) => None,
}
}
}
impl From<FdbError> for RankedRegisterError {
fn from(error: FdbError) -> Self {
Self::Fdb(error)
}
}
impl From<FdbBindingError> for RankedRegisterError {
fn from(error: FdbBindingError) -> Self {
Self::Binding(error)
}
}
impl From<PackError> for RankedRegisterError {
fn from(error: PackError) -> Self {
Self::PackError(error)
}
}
impl RetryableError for RankedRegisterError {}
pub type Result<T> = std::result::Result<T, RankedRegisterError>;