use core::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EdgeError {
UnverifiedModel,
SignatureRejected,
InvalidPhase {
expected: &'static str,
found: &'static str,
},
MemoryBudgetExceeded { requested: u64, budget: u64 },
AirGapViolation,
Engine(&'static str),
CloudRequest(Box<str>),
Grammar(Box<str>),
}
impl fmt::Display for EdgeError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
EdgeError::UnverifiedModel => {
write!(f, "model is not verified; refusing to load (ADR-006)")
}
EdgeError::SignatureRejected => write!(f, "model signature rejected (ADR-006)"),
EdgeError::InvalidPhase { expected, found } => {
write!(f, "invalid phase: expected {expected}, found {found}")
}
EdgeError::MemoryBudgetExceeded { requested, budget } => {
write!(
f,
"memory plan needs {requested} bytes > budget {budget} (ADR-003)"
)
}
EdgeError::AirGapViolation => {
write!(f, "network egress attempted while air-gapped (ADR-004)")
}
EdgeError::Engine(msg) => write!(f, "engine error: {msg}"),
EdgeError::CloudRequest(msg) => write!(f, "cloud request: {msg}"),
EdgeError::Grammar(msg) => write!(f, "grammar constraint: {msg}"),
}
}
}
impl std::error::Error for EdgeError {}
pub type Result<T> = core::result::Result<T, EdgeError>;