Skip to main content

ephemeris_forge/
access.rs

1//! Team and collaborator access policy and the planning shared by every forge.
2
3mod caller;
4mod collaborator;
5mod decision;
6mod lockout;
7mod name;
8mod observed;
9mod operation;
10mod state;
11
12use std::collections::BTreeMap;
13
14use facet::Facet;
15
16pub use self::caller::Caller;
17pub use self::collaborator::CollaboratorDecision;
18pub use self::decision::{AccessDecision, Grants, PermissionScope};
19pub use self::lockout::Lockout;
20pub use self::name::{EmptyTeamName, EmptyUserName, TeamName, UserName};
21pub use self::observed::Observed;
22pub use self::operation::AccessOperation;
23pub use self::state::AccessState;
24use crate::Mode;
25
26/// Repository team and collaborator access policy.
27///
28/// `P` is the forge's permission type.
29#[derive(Clone, Debug, Eq, Facet, PartialEq)]
30#[facet(deny_unknown_fields)]
31pub struct Access<P: 'static> {
32    /// Whether undeclared direct grants are removed.
33    pub mode: Mode,
34    /// The desired permission of each declared team.
35    pub teams: BTreeMap<TeamName, P>,
36    /// The desired permission of each declared collaborator.
37    pub collaborators: BTreeMap<UserName, P>,
38}