datasources 0.1.5

Async datasource interfaces, middleware, registry, and test doubles
Documentation
use std::fmt;

#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DatasourceError {
    ProviderNotInstalled(String),
    ProviderNotImplemented(String),
    Message(String),
}

impl DatasourceError {
    pub fn message(message: impl Into<String>) -> Self {
        Self::Message(message.into())
    }

    pub fn not_installed(provider: impl Into<String>) -> Self {
        Self::ProviderNotInstalled(provider.into())
    }

    pub fn not_implemented(provider: impl Into<String>) -> Self {
        Self::ProviderNotImplemented(provider.into())
    }
}

impl fmt::Display for DatasourceError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match self {
            Self::ProviderNotInstalled(provider) => {
                write!(f, "Provider \"{provider}\" is not installed")
            }
            Self::ProviderNotImplemented(provider) => {
                write!(f, "Provider \"{provider}\" is not implemented")
            }
            Self::Message(message) => write!(f, "{message}"),
        }
    }
}

impl std::error::Error for DatasourceError {}