use super::principal_id::{PLATFORM_AUDIT_PRINCIPAL, PrincipalId};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Attribution {
pub sub_principal_id: PrincipalId,
pub act_principal_id: PrincipalId,
}
impl Attribution {
#[must_use]
pub const fn new(sub_principal_id: PrincipalId, act_principal_id: PrincipalId) -> Self {
Self {
sub_principal_id,
act_principal_id,
}
}
#[must_use]
pub const fn direct(principal: PrincipalId) -> Self {
Self::new(principal, principal)
}
#[must_use]
pub const fn unresolved() -> Self {
Self::direct(PLATFORM_AUDIT_PRINCIPAL)
}
#[must_use]
pub const fn executed_by(self, actor: PrincipalId) -> Self {
Self::new(self.sub_principal_id, actor)
}
}