use std::{fmt, path::PathBuf};
use super::IdentityName;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AuthStatus {
CodexHomeMissing {
path: PathBuf,
},
None,
Native,
Managed {
identity: IdentityName,
},
BrokenManaged {
identity: IdentityName,
},
Unknown {
reason: UnknownAuthReason,
},
}
impl fmt::Display for AuthStatus {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::CodexHomeMissing { path } => write!(f, "Codex home missing: {}", path.display()),
Self::None => write!(f, "No auth file"),
Self::Native => write!(f, "Native auth file"),
Self::Managed { identity } => write!(f, "Active identity: {identity}"),
Self::BrokenManaged { identity } => {
write!(f, "Active identity is broken: {identity}")
}
Self::Unknown { reason } => write!(f, "Unknown auth state: {reason}"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum UnknownAuthReason {
AuthPathIsNotFileOrSymlink,
SymlinkTargetOutsideManagerDir,
SymlinkTargetHasInvalidIdentityName,
}
impl fmt::Display for UnknownAuthReason {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::AuthPathIsNotFileOrSymlink => write!(f, "auth.json is not a file or symlink"),
Self::SymlinkTargetOutsideManagerDir => {
write!(f, "symlink target is outside codex-auth-manager")
}
Self::SymlinkTargetHasInvalidIdentityName => {
write!(f, "symlink target has invalid identity name")
}
}
}
}