piam-types 0.0.0

Patsnap IAM types
Documentation
use uuid::Uuid;

use crate::type_alias::HttpRequest;

#[derive(Debug, Default, Eq, Hash, PartialEq)]
pub struct User {
    pub id: Uuid,
    pub name: String,
    // sample: AKPSTEAMXXX
    pub access_key: String,
    pub secret_key: String,
    pub kind: UserKind,
}

impl User {}

pub trait UserExt {
    fn user(&self) -> Option<User>;
}

impl UserExt for HttpRequest {
    fn user(&self) -> Option<User> {
        // TODO: find by access_key
        Some(User {
            // IO dependent
            id: Default::default(),
            // parse AK
            name: "".to_string(),
            // source
            access_key: "".to_string(),
            // IO dependent
            secret_key: "".to_string(),
            // parse AK
            kind: UserKind::Person,
        })
    }
}

#[derive(Debug, Default, Eq, Hash, PartialEq)]
pub enum UserKind {
    #[default]
    // SVCS
    Service,
    // PERS
    Person,
    // TEAM
    Team,
    // COMP
    Company,
    // CUST
    Customer,
}

#[derive(Debug, Default, Eq, Hash, PartialEq)]
pub struct Group {
    pub id: Uuid,
    pub name: String,
    pub users: Vec<User>,
}

#[derive(Debug, Default, Eq, Hash, PartialEq)]
pub struct Role {
    pub name: String,
}