hgame 0.26.4

CG production management structs, e.g. of assets, personnels, progress, etc.
Documentation
use anyhow::anyhow;
use hconf::config::ConfigError;
use mkutil::Report;

#[derive(Debug, failure::Fail, Clone)]
pub enum DatabaseError {
    /// Error with parsing config -- wrapper for `config::ConfigError`
    #[fail(display = "{}", _0)]
    ConfigError(String),

    #[cfg(feature = "mongo")]
    #[fail(display = "Failed to parse connection URI: {}", _0)]
    /// Failed to parse connection URI. `_0`: parse error.
    MongoInvalidClientOptions(String),

    #[cfg(feature = "mongo")]
    #[fail(display = "No handle to MongoDB client")]
    /// No handle to Mongo client.
    MongoClientNotFound,

    #[cfg(feature = "mongo")]
    #[fail(display = "{}", _0)]
    /// No active connection established -- wrapper for mongodb::error::Error
    MongoClientError(String),

    /// Given the filter.
    #[fail(display = "No Bson Document found given filter: {}", _0)]
    BsonNoResult(String),

    /// Given the key -- wrapper for bson::Document::ValueAccessError
    #[fail(display = "{}", _0)]
    BsonValueAccessError(String),

    #[fail(display = "No Bson Document found")]
    BsonDocumentNotFound,

    // Deser fails
    #[fail(display = "Deserialization failed: {}", _0)]
    /// `_0`: deser error
    BsonDeserializationError(String),

    #[cfg(feature = "kitsu")]
    #[fail(display = "No handle to Zou client")]
    /// No handle to Zou client
    ZouClientNotFound,

    #[cfg(any(feature = "shotgrid", feature = "shotgrid_async_test"))]
    #[fail(display = "Failed to create ShotGrid client: {}", _0)]
    /// Fail to create ShotGrid client
    ShotGridClientError(String),

    #[cfg(any(feature = "shotgrid", feature = "shotgrid_async_test"))]
    #[fail(display = "Failed to authenticate ShotGrid: {}", _0)]
    /// Fail to authenticate ShotGrid
    ShotGridAuthenticationError(String),

    #[fail(display = "HTTP/WS Request failed: {}", _0)]
    /// `_0`: Request error
    ReqwestError(String),

    /// Failed to get the tokio runtime handle.
    #[fail(display = "Failed to get the tokio runtime handle")]
    NoRuntimeHandle,

    #[fail(display = "Uninitialized data")]
    Uninitialized,

    #[fail(display = "Unimplemented function")]
    Unimplemented,

    #[fail(display = "{}", _0)]
    Anyhow(String),
}

impl From<&ConfigError> for DatabaseError {
    fn from(error: &ConfigError) -> Self {
        DatabaseError::ConfigError(format!("{}", error))
    }
}

#[cfg(feature = "mongo")]
impl From<mongodb::error::Error> for DatabaseError {
    fn from(error: mongodb::error::Error) -> Self {
        DatabaseError::MongoClientError(format!("{}", error))
    }
}

impl From<bson::document::ValueAccessError> for DatabaseError {
    fn from(error: bson::document::ValueAccessError) -> Self {
        DatabaseError::BsonValueAccessError(format!("{}", error))
    }
}

impl From<bson::de::Error> for DatabaseError {
    fn from(error: bson::de::Error) -> Self {
        DatabaseError::BsonDeserializationError(format!("{}", error))
    }
}

impl From<reqwest::Error> for DatabaseError {
    fn from(error: reqwest::Error) -> Self {
        DatabaseError::ReqwestError(format!("{}", error))
    }
}

impl From<anyhow::Error> for DatabaseError {
    fn from(error: anyhow::Error) -> Self {
        DatabaseError::Anyhow(format!("{}", error))
    }
}

impl Into<anyhow::Error> for DatabaseError {
    fn into(self) -> anyhow::Error {
        anyhow!("{}", self)
    }
}

// ----------------------------------------------------------------------------
#[derive(Debug, failure::Fail)]
pub enum ModificationError {
    #[fail(display = "No interaction CtxRef given")]
    NoInteractionContext,
    #[fail(display = "No active project")]
    NoActiveProject,
    #[fail(display = "No active asset")]
    NoActiveAsset,
    #[fail(display = "Given bson is not document")]
    BsonIsNotDocument,
    #[fail(display = "Received unexpected bson type")]
    UnexpectedBsonEnum,
    #[fail(display = "{}", _0)]
    DatabaseError(String),
    #[fail(display = "{}", _0)]
    SerializationError(String),
    #[fail(display = "{}", _0)]
    Anyhow(String),
}

impl From<DatabaseError> for ModificationError {
    fn from(error: DatabaseError) -> Self {
        ModificationError::DatabaseError(format!("{}", error))
    }
}

#[cfg(feature = "mongo")]
impl From<mongodb::error::Error> for ModificationError {
    fn from(error: mongodb::error::Error) -> Self {
        DatabaseError::MongoClientError(format!("{}", error)).into()
    }
}

impl From<bson::ser::Error> for ModificationError {
    fn from(error: bson::ser::Error) -> Self {
        ModificationError::SerializationError(format!("{}", error))
    }
}

impl From<anyhow::Error> for ModificationError {
    fn from(error: anyhow::Error) -> Self {
        ModificationError::Anyhow(format!("{}", error))
    }
}

impl From<bson::document::ValueAccessError> for ModificationError {
    fn from(error: bson::document::ValueAccessError) -> Self {
        DatabaseError::BsonValueAccessError(format!("{}", error)).into()
    }
}

impl Into<anyhow::Error> for ModificationError {
    fn into(self) -> anyhow::Error {
        anyhow!("{}", self)
    }
}

impl Into<Report> for ModificationError {
    fn into(self) -> Report {
        Report::into_new("Modification Error", self.to_string())
    }
}