use ahash::HashMap;
use lasso2::{Rodeo, Spur};
pub type ScopeId = Spur;
pub type ScopeInterner = Rodeo;
pub type PolicyId = Spur;
pub type PolicyInterner = Rodeo;
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct ScopeAndGroup(pub Vec<ScopeId>);
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct RequiredScopes(pub Vec<ScopeAndGroup>);
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct PolicyAndGroup(pub Vec<PolicyId>);
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct RequiredPolicies(pub Vec<PolicyAndGroup>);
#[derive(Debug, Clone, Default)]
pub struct AuthorizationRule {
pub authenticated: bool,
pub scopes: Option<RequiredScopes>,
pub policies: Option<RequiredPolicies>,
}
impl AuthorizationRule {
pub fn is_empty(&self) -> bool {
!self.authenticated && self.scopes.is_none() && self.policies.is_none()
}
}
pub type TypeRulesMap = HashMap<String, AuthorizationRule>;
pub type FieldRulesMap = HashMap<String, AuthorizationRule>;
pub type TypeFieldRulesMap = HashMap<String, FieldRulesMap>;
#[derive(Debug)]
pub struct AuthorizationMetadata {
pub type_rules: TypeRulesMap,
pub field_rules: TypeFieldRulesMap,
pub scopes: ScopeInterner,
pub policies: PolicyInterner,
pub type_has_any_auth: HashMap<String, bool>,
}