use core::fmt;
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CfiError {
Empty,
InvalidLength {
found: usize,
},
InvalidCharacter {
character: char,
position: u8,
},
UnknownCategory {
code: char,
},
UnknownGroup {
category: char,
code: char,
},
InvalidAttribute {
category: char,
group: char,
index: u8,
code: char,
},
}
impl fmt::Display for CfiError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
CfiError::Empty => f.write_str("CFI input is empty"),
CfiError::InvalidLength { found } => {
write!(f, "CFI must contain exactly 6 characters, found {found}")
}
CfiError::InvalidCharacter {
character,
position,
} => write!(
f,
"invalid character '{character}' at position {position} of 6: expected an uppercase letter (A-Z)"
),
CfiError::UnknownCategory { code } => {
write!(f, "unknown CFI category '{code}' at position 1")
}
CfiError::UnknownGroup { category, code } => write!(
f,
"unknown CFI group '{code}' at position 2 for category '{category}'"
),
CfiError::InvalidAttribute {
category,
group,
index,
code,
} => write!(
f,
"invalid CFI attribute '{code}' at position {} (attribute {index}) for category '{category}' group '{group}'",
index + 2
),
}
}
}
impl core::error::Error for CfiError {}