coil-auth 0.1.1

Authorisation models and auth package support for the Coil framework.
Documentation
use super::*;

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Relation {
    Tenant,
    Site,
    Brand,
    Storefront,
    Event,
    Slot,
    Folder,
    Library,
    Member,
    Owner,
    Admin,
    Editor,
    Viewer,
    Support,
    Merchandiser,
    View,
    Edit,
    Publish,
    Manage,
    FeaturedEdit,
    Checkout,
    Refund,
    Read,
    ReadPublic,
    Replace,
    Delete,
    Unpublish,
    ManageStorage,
    Book,
    CheckIn,
}

impl Relation {
    pub const fn as_str(self) -> &'static str {
        match self {
            Self::Tenant => "tenant",
            Self::Site => "site",
            Self::Brand => "brand",
            Self::Storefront => "storefront",
            Self::Event => "event",
            Self::Slot => "slot",
            Self::Folder => "folder",
            Self::Library => "library",
            Self::Member => "member",
            Self::Owner => "owner",
            Self::Admin => "admin",
            Self::Editor => "editor",
            Self::Viewer => "viewer",
            Self::Support => "support",
            Self::Merchandiser => "merchandiser",
            Self::View => "view",
            Self::Edit => "edit",
            Self::Publish => "publish",
            Self::Manage => "manage",
            Self::FeaturedEdit => "featured_edit",
            Self::Checkout => "checkout",
            Self::Refund => "refund",
            Self::Read => "read",
            Self::ReadPublic => "read_public",
            Self::Replace => "replace",
            Self::Delete => "delete",
            Self::Unpublish => "unpublish",
            Self::ManageStorage => "manage_storage",
            Self::Book => "book",
            Self::CheckIn => "check_in",
        }
    }

    pub fn from_str(value: &str) -> Option<Self> {
        match value {
            "tenant" => Some(Self::Tenant),
            "site" => Some(Self::Site),
            "brand" => Some(Self::Brand),
            "storefront" => Some(Self::Storefront),
            "event" => Some(Self::Event),
            "slot" => Some(Self::Slot),
            "folder" => Some(Self::Folder),
            "library" => Some(Self::Library),
            "member" => Some(Self::Member),
            "owner" => Some(Self::Owner),
            "admin" => Some(Self::Admin),
            "editor" => Some(Self::Editor),
            "viewer" => Some(Self::Viewer),
            "support" => Some(Self::Support),
            "merchandiser" => Some(Self::Merchandiser),
            "view" => Some(Self::View),
            "edit" => Some(Self::Edit),
            "publish" => Some(Self::Publish),
            "manage" => Some(Self::Manage),
            "featured_edit" => Some(Self::FeaturedEdit),
            "checkout" => Some(Self::Checkout),
            "refund" => Some(Self::Refund),
            "read" => Some(Self::Read),
            "read_public" => Some(Self::ReadPublic),
            "replace" => Some(Self::Replace),
            "delete" => Some(Self::Delete),
            "unpublish" => Some(Self::Unpublish),
            "manage_storage" => Some(Self::ManageStorage),
            "book" => Some(Self::Book),
            "check_in" => Some(Self::CheckIn),
            _ => None,
        }
    }
}

impl fmt::Display for Relation {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.write_str(self.as_str())
    }
}