dhttp-access 0.2.0

Identity-aware access control primitives for DHttp
Documentation
use sea_orm::DbErr;

use crate::error::location::{LocateLocationFailed, MatchLocationFailed};

use super::location_service::{RemoveRuleByIdFailed, RemoveRuleFailed, ReplaceRuleByIdFailed};

#[derive(Debug, snafu::Snafu)]
#[snafu(module, visibility(pub(crate)))]
pub enum EnsureStoreError {
    #[snafu(display("failed to query access store location rule sets"))]
    QueryStore { source: DbErr },
}

#[derive(Debug, snafu::Snafu)]
#[snafu(module, visibility(pub(crate)))]
pub enum ListRuleSetsError {
    #[snafu(display("failed to query location rule sets"))]
    QueryRuleSets { source: DbErr },
}

#[derive(Debug, snafu::Snafu)]
#[snafu(module, visibility(pub(crate)))]
pub enum MatchLocationError {
    #[snafu(display("failed to query exact location rule set"))]
    QueryExactLocation { source: DbErr },
    #[snafu(display("failed to query location rule sets for pattern matching"))]
    QueryLocations { source: DbErr },
}

#[derive(Debug, snafu::Snafu)]
#[snafu(module, visibility(pub(crate)))]
pub enum ListRulesError {
    #[snafu(display("failed to begin transaction for listing location rules"))]
    BeginTransaction { source: DbErr },
    #[snafu(display("failed to match location rule set while listing rules"))]
    MatchLocation { source: MatchLocationError },
    #[snafu(display("location rule set does not match request path"))]
    NoMatchedLocation { source: MatchLocationFailed },
    #[snafu(display("failed to load location rules"))]
    LoadRules { source: DbErr },
    #[snafu(display("failed to commit transaction after listing location rules"))]
    Commit { source: DbErr },
}

#[derive(Debug, snafu::Snafu)]
#[snafu(module, visibility(pub(crate)))]
pub enum ListRulesByPatternError {
    #[snafu(display("failed to begin transaction for listing location rules by pattern"))]
    BeginTransaction { source: DbErr },
    #[snafu(display("failed to locate location rule set while listing rules by pattern"))]
    MatchLocation { source: MatchLocationError },
    #[snafu(display("location rule set does not exist"))]
    LocationNotExist { source: LocateLocationFailed },
    #[snafu(display("failed to load location rules by pattern"))]
    LoadRules { source: DbErr },
    #[snafu(display("failed to commit transaction after listing location rules by pattern"))]
    Commit { source: DbErr },
}

#[derive(Debug, snafu::Snafu)]
#[snafu(module, visibility(pub(crate)))]
pub enum RemoveRuleSetError {
    #[snafu(display("failed to begin transaction for removing location rule set"))]
    BeginTransaction { source: DbErr },
    #[snafu(display("failed to locate location rule set before removal"))]
    MatchLocation { source: MatchLocationError },
    #[snafu(display("location rule set does not exist"))]
    LocationNotExist { source: LocateLocationFailed },
    #[snafu(display("failed to delete location rule set"))]
    DeleteRuleSet { source: DbErr },
    #[snafu(display("failed to commit transaction after removing location rule set"))]
    Commit { source: DbErr },
}

#[derive(Debug, snafu::Snafu)]
#[snafu(module, visibility(pub(crate)))]
pub enum ListAllRulesError {
    #[snafu(display("failed to begin transaction for listing all location rules"))]
    BeginTransaction { source: DbErr },
    #[snafu(display("failed to load all location rule sets"))]
    LoadLocations { source: DbErr },
    #[snafu(display("failed to load all location rules"))]
    LoadRules { source: DbErr },
    #[snafu(display("failed to commit transaction after listing all location rules"))]
    Commit { source: DbErr },
}

#[derive(Debug, snafu::Snafu)]
#[snafu(module, visibility(pub(crate)))]
pub enum RemoveRulesError {
    #[snafu(display("failed to begin transaction for removing location rules"))]
    BeginTransaction { source: DbErr },
    #[snafu(display("failed to locate location rule set before removing rules"))]
    MatchLocation { source: MatchLocationError },
    #[snafu(display("failed to select location rule ids for removal"))]
    LoadRuleIds { source: DbErr },
    #[snafu(display("location rule cannot be removed"))]
    Rule { source: RemoveRuleFailed },
    #[snafu(display("failed to delete location rules"))]
    DeleteRules { source: DbErr },
    #[snafu(display("failed to commit transaction after removing location rules"))]
    Commit { source: DbErr },
}

#[derive(Debug, snafu::Snafu)]
#[snafu(module, visibility(pub(crate)))]
pub enum RemoveRulesByIdsError {
    #[snafu(display("failed to begin transaction for removing location rules by ids"))]
    BeginTransaction { source: DbErr },
    #[snafu(display("failed to locate location rule set before removing rules by ids"))]
    MatchLocation { source: MatchLocationError },
    #[snafu(display("failed to load requested location rules by ids"))]
    LoadRules { source: DbErr },
    #[snafu(display("location rule cannot be removed by id"))]
    Rule { source: RemoveRuleByIdFailed },
    #[snafu(display("failed to delete location rules by ids"))]
    DeleteRules { source: DbErr },
    #[snafu(display("failed to commit transaction after removing location rules by ids"))]
    Commit { source: DbErr },
}

#[derive(Debug, snafu::Snafu)]
#[snafu(module, visibility(pub(crate)))]
pub enum MatchOrCreateLocationError {
    #[snafu(display("failed to locate location rule set before creating it"))]
    MatchLocation { source: MatchLocationError },
    #[snafu(display("failed to insert location rule set"))]
    InsertLocation { source: DbErr },
}

#[derive(Debug, snafu::Snafu)]
#[snafu(module, visibility(pub(crate)))]
pub enum AppendRuleError {
    #[snafu(display("failed to begin transaction for appending location rule"))]
    BeginTransaction { source: DbErr },
    #[snafu(display("failed to match or create location rule set before appending rule"))]
    MatchOrCreateLocation { source: MatchOrCreateLocationError },
    #[snafu(display("failed to insert location rule"))]
    InsertRule { source: DbErr },
    #[snafu(display("failed to load inserted location rule"))]
    LoadInsertedRule { source: DbErr },
    #[snafu(display("inserted location rule `{id}` could not be loaded"))]
    InsertedRuleMissing { id: i32 },
    #[snafu(display("failed to commit transaction after appending location rule"))]
    Commit { source: DbErr },
}

#[derive(Debug, snafu::Snafu)]
#[snafu(module, visibility(pub(crate)))]
pub enum ReplaceRuleByIdError {
    #[snafu(display("failed to begin transaction for replacing location rule by id"))]
    BeginTransaction { source: DbErr },
    #[snafu(display("failed to locate location rule set before replacing rule by id"))]
    MatchLocation { source: MatchLocationError },
    #[snafu(display("failed to load current location rule by id"))]
    LoadRule { source: DbErr },
    #[snafu(display("location rule cannot be replaced by id"))]
    Rule { source: ReplaceRuleByIdFailed },
    #[snafu(display("failed to update location rule by id"))]
    UpdateRule { source: DbErr },
    #[snafu(display("failed to commit transaction after replacing location rule by id"))]
    Commit { source: DbErr },
}