ephemeris_forge/access/
state.rs1use std::collections::{BTreeMap, BTreeSet};
2
3use super::{Caller, Grants, Observed, PermissionScope, TeamName, UserName};
4
5#[derive(Clone, Debug)]
10pub struct AccessState<P> {
11 pub teams: BTreeMap<TeamName, Observed<P>>,
13 pub inherited_teams: BTreeSet<TeamName>,
16 pub organization_teams: BTreeMap<TeamName, Observed<P>>,
18 pub collaborators: BTreeMap<UserName, Observed<P>>,
20 pub caller: Option<Caller>,
22}
23
24impl<P> AccessState<P> {
25 #[must_use]
27 pub const fn grants(&self, scope: PermissionScope) -> Grants<'_, P> {
28 Grants {
29 scope,
30 direct: &self.teams,
31 inherited: &self.inherited_teams,
32 organization: &self.organization_teams,
33 caller: self.caller.as_ref(),
34 }
35 }
36}
37
38impl<P> Default for AccessState<P> {
39 fn default() -> Self {
40 Self {
41 teams: BTreeMap::new(),
42 inherited_teams: BTreeSet::new(),
43 organization_teams: BTreeMap::new(),
44 collaborators: BTreeMap::new(),
45 caller: None,
46 }
47 }
48}