use thiserror::Error;
#[derive(Debug, Error)]
#[non_exhaustive]
pub enum GenApiError {
#[error("node not found: {0}")]
NodeNotFound(String),
#[error("type mismatch for node: {0}")]
Type(String),
#[error("access denied for node: {0}")]
Access(String),
#[error("range error for node: {0}")]
Range(String),
#[error("node unavailable: {0}")]
Unavailable(String),
#[error("io error: {0}")]
Io(String),
#[error("parse error: {0}")]
Parse(String),
#[error("failed to parse expression for {name}: {msg}")]
ExprParse { name: String, msg: String },
#[error("failed to evaluate expression for {name}: {msg}")]
ExprEval { name: String, msg: String },
#[error("unknown variable '{var}' referenced by {name}")]
UnknownVariable { name: String, var: String },
#[error("enum {node} has no entry for raw value {value}")]
EnumValueUnknown { node: String, value: i64 },
#[error("enum {node} has no entry named {entry}")]
EnumNoSuchEntry { node: String, entry: String },
#[error("node {name} resolved invalid indirect address {addr:#X}")]
BadIndirectAddress { name: String, addr: i64 },
#[error(
"bitfield for node {name} exceeds register length {len} (offset {bit_offset}, length {bit_length})"
)]
BitfieldOutOfRange {
name: String,
bit_offset: u16,
bit_length: u16,
len: usize,
},
#[error("value {value} too wide for {bit_length}-bit field on node {name}")]
ValueTooWide {
name: String,
value: i64,
bit_length: u16,
},
}