1use core::fmt;
4
5#[derive(Debug, Clone, PartialEq, Eq)]
8pub enum EdgeError {
9 UnverifiedModel,
12 SignatureRejected,
14 InvalidPhase {
16 expected: &'static str,
17 found: &'static str,
18 },
19 MemoryBudgetExceeded { requested: u64, budget: u64 },
21 AirGapViolation,
23 Engine(&'static str),
25 CloudRequest(Box<str>),
28 Grammar(Box<str>),
30}
31
32impl fmt::Display for EdgeError {
33 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34 match self {
35 EdgeError::UnverifiedModel => {
36 write!(f, "model is not verified; refusing to load (ADR-006)")
37 }
38 EdgeError::SignatureRejected => write!(f, "model signature rejected (ADR-006)"),
39 EdgeError::InvalidPhase { expected, found } => {
40 write!(f, "invalid phase: expected {expected}, found {found}")
41 }
42 EdgeError::MemoryBudgetExceeded { requested, budget } => {
43 write!(
44 f,
45 "memory plan needs {requested} bytes > budget {budget} (ADR-003)"
46 )
47 }
48 EdgeError::AirGapViolation => {
49 write!(f, "network egress attempted while air-gapped (ADR-004)")
50 }
51 EdgeError::Engine(msg) => write!(f, "engine error: {msg}"),
52 EdgeError::CloudRequest(msg) => write!(f, "cloud request: {msg}"),
53 EdgeError::Grammar(msg) => write!(f, "grammar constraint: {msg}"),
54 }
55 }
56}
57
58impl std::error::Error for EdgeError {}
59
60pub type Result<T> = core::result::Result<T, EdgeError>;