1use thiserror::Error;
4
5#[derive(Debug, Error)]
7#[non_exhaustive]
8pub enum GenApiError {
9 #[error("node not found: {0}")]
11 NodeNotFound(String),
12 #[error("type mismatch for node: {0}")]
14 Type(String),
15 #[error("access denied for node: {0}")]
17 Access(String),
18 #[error("range error for node: {0}")]
20 Range(String),
21 #[error("node unavailable: {0}")]
23 Unavailable(String),
24 #[error("io error: {0}")]
26 Io(String),
27 #[error("parse error: {0}")]
29 Parse(String),
30 #[error("failed to parse expression for {name}: {msg}")]
32 ExprParse { name: String, msg: String },
33 #[error("failed to evaluate expression for {name}: {msg}")]
35 ExprEval { name: String, msg: String },
36 #[error("unknown variable '{var}' referenced by {name}")]
38 UnknownVariable { name: String, var: String },
39 #[error("enum {node} has no entry for raw value {value}")]
41 EnumValueUnknown { node: String, value: i64 },
42 #[error("enum {node} has no entry named {entry}")]
44 EnumNoSuchEntry { node: String, entry: String },
45 #[error("node {name} resolved invalid indirect address {addr:#X}")]
47 BadIndirectAddress { name: String, addr: i64 },
48 #[error(
50 "bitfield for node {name} exceeds register length {len} (offset {bit_offset}, length {bit_length})"
51 )]
52 BitfieldOutOfRange {
53 name: String,
54 bit_offset: u16,
55 bit_length: u16,
56 len: usize,
57 },
58 #[error("value {value} too wide for {bit_length}-bit field on node {name}")]
60 ValueTooWide {
61 name: String,
62 value: i64,
63 bit_length: u16,
64 },
65}