ft-sys 0.3.0

ft-sdk: SDK for building FifthTry Applications
Documentation
pub struct DbError {
    message: String,
    details: Option<String>,
    hint: Option<String>,
    table_name: Option<String>,
    column_name: Option<String>,
    constraint_name: Option<String>,
    statement_position: Option<i32>,
}

pub fn db_error_to_diesel_error(e: ft_sys_shared::DbError) -> diesel::result::Error {
    use diesel::result::DatabaseErrorKind::*;

    match e {
        ft_sys_shared::DbError::UnableToSendCommand(e) => diesel::result::Error::DatabaseError(
            diesel::result::DatabaseErrorKind::UnableToSendCommand,
            Box::new(e),
        ),
        ft_sys_shared::DbError::DatabaseError {
            kind,
            message,
            details,
            hint,
            table_name,
            column_name,
            constraint_name,
            statement_position,
            ..
        } => diesel::result::Error::DatabaseError(
            match kind {
                ft_sys_shared::DatabaseErrorKind::UniqueViolation => UniqueViolation,
                ft_sys_shared::DatabaseErrorKind::ForeignKeyViolation => ForeignKeyViolation,
                ft_sys_shared::DatabaseErrorKind::NotNullViolation => NotNullViolation,
                ft_sys_shared::DatabaseErrorKind::CheckViolation => CheckViolation,
                ft_sys_shared::DatabaseErrorKind::SerializationFailure => SerializationFailure,
                ft_sys_shared::DatabaseErrorKind::ReadOnlyTransaction => ReadOnlyTransaction,
                ft_sys_shared::DatabaseErrorKind::ClosedConnection => ClosedConnection,
                ft_sys_shared::DatabaseErrorKind::Unknown => Unknown,
            },
            Box::new(DbError {
                message,
                details,
                hint,
                table_name,
                column_name,
                constraint_name,
                statement_position,
            }),
        ),
    }
}

impl diesel::result::DatabaseErrorInformation for DbError {
    fn message(&self) -> &str {
        self.message.as_str()
    }

    fn details(&self) -> Option<&str> {
        self.details.as_deref()
    }

    fn hint(&self) -> Option<&str> {
        self.hint.as_deref()
    }

    fn table_name(&self) -> Option<&str> {
        self.table_name.as_deref()
    }

    fn column_name(&self) -> Option<&str> {
        self.column_name.as_deref()
    }

    fn constraint_name(&self) -> Option<&str> {
        self.constraint_name.as_deref()
    }

    fn statement_position(&self) -> Option<i32> {
        self.statement_position
    }
}