#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum MissingCredentialPolicy {
#[default]
RejectMissing,
AcceptMissing,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub enum AuthOutcome<C> {
Authenticated(C),
Missing,
}
impl<C> AuthOutcome<C> {
#[must_use]
pub const fn claims(&self) -> Option<&C> {
match self {
Self::Authenticated(claims) => Some(claims),
Self::Missing => None,
}
}
#[must_use]
pub const fn is_missing(&self) -> bool {
matches!(self, Self::Missing)
}
}
#[cfg(test)]
mod tests {
use super::{AuthOutcome, MissingCredentialPolicy};
#[test]
fn missing_policy_rejects_missing_by_default() {
assert_eq!(
MissingCredentialPolicy::default(),
MissingCredentialPolicy::RejectMissing
);
}
#[test]
fn auth_outcome_exposes_claims_only_when_authenticated() {
let authenticated = AuthOutcome::Authenticated("claims");
assert_eq!(authenticated.claims(), Some(&"claims"));
assert!(!authenticated.is_missing());
let missing = AuthOutcome::<&str>::Missing;
assert_eq!(missing.claims(), None);
assert!(missing.is_missing());
}
}