amethystate 0.9.3

Type-safe reactive persistence for Rust GUI apps
Documentation
use crate::store::StorageError;
use thiserror::Error;

#[derive(Error, Debug)]
pub enum FieldError {
    #[error(transparent)]
    StorageError(#[from] StorageError),

    #[error("Change intercepted")]
    Intercepted,

    #[error("Key not found in Field: {0}")]
    KeyNotFound(String),
}

pub type ReactiveFieldResult<T> = std::result::Result<T, FieldError>;

impl<E> From<amethystate_core::error::FieldError<E>> for FieldError
where
    StorageError: From<E>,
{
    fn from(value: amethystate_core::error::FieldError<E>) -> Self {
        match value {
            amethystate_core::error::FieldError::StorageError(e) => {
                FieldError::StorageError(StorageError::from(e))
            }
            amethystate_core::error::FieldError::Intercepted => FieldError::Intercepted,
            amethystate_core::error::FieldError::KeyNotFound(k) => FieldError::KeyNotFound(k),
        }
    }
}

#[derive(Error, Debug)]
pub enum ReactiveMapError {
    #[error(transparent)]
    StorageError(#[from] StorageError),

    #[error("Change intercepted")]
    Intercepted,

    #[error("Key not found in ReactiveMap: {0}")]
    KeyNotFound(String),
}

pub type ReactiveMapResult<T> = std::result::Result<T, ReactiveMapError>;

impl<E> From<amethystate_core::error::ReactiveMapError<E>> for ReactiveMapError
where
    StorageError: From<E>,
{
    fn from(value: amethystate_core::error::ReactiveMapError<E>) -> Self {
        match value {
            amethystate_core::error::ReactiveMapError::StorageError(e) => {
                ReactiveMapError::StorageError(StorageError::from(e))
            }
            amethystate_core::error::ReactiveMapError::Intercepted => ReactiveMapError::Intercepted,
            amethystate_core::error::ReactiveMapError::KeyNotFound(k) => {
                ReactiveMapError::KeyNotFound(k)
            }
        }
    }
}