tokidator 0.8.1

Token based authentication framework
Documentation
use std::collections::BTreeMap;

use once_cell::sync::Lazy;

use crate::rbac::traits::Role;

#[derive(
    Clone,
    Copy,
    Debug,
    Eq,
    Ord,
    PartialEq,
    PartialOrd,
    num_derive::FromPrimitive,
    num_derive::ToPrimitive,
    strum::Display,
    strum::EnumCount,
)]
#[repr(u16)]
pub enum TestPermission {
    Permission0,
    Permission1,
    Permission2,
    Permission3,
    Permission4,
    Permission5,
    Permission6,
    Permission7,
    Permission8,
    Permission9,
    Permission10,
    Permission11,
    Permission12,
    Permission13,
    Permission14,
    Permission15,
}

impl crate::rbac::Permission for TestPermission {}

#[derive(
    Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd, num_derive::FromPrimitive, strum::Display,
)]
pub enum TestRole {
    Role0,
    Role1,
    Role2,
}

impl Role for TestRole {
    type Permission = TestPermission;

    fn permissions(&self) -> &[Self::Permission] {
        PERMISSIONS.get(self).map(Vec::as_slice).unwrap_or_default()
    }
}

type RolePermissionsMap = BTreeMap<TestRole, Vec<TestPermission>>;

static PERMISSIONS: Lazy<RolePermissionsMap> = Lazy::new(create_role_permissions);

fn create_role_permissions() -> RolePermissionsMap {
    use TestPermission::*;
    use TestRole::*;
    let mut map = RolePermissionsMap::new();
    map.insert(Role0, vec![Permission0, Permission1]);
    map.insert(Role2, vec![Permission3, Permission4]);
    map
}