viva_genapi/
error.rs

1//! Error types for GenApi operations.
2
3use thiserror::Error;
4
5/// Error type produced by GenApi operations.
6#[derive(Debug, Error)]
7#[non_exhaustive]
8pub enum GenApiError {
9    /// The requested node does not exist in the nodemap.
10    #[error("node not found: {0}")]
11    NodeNotFound(String),
12    /// The node exists but has a different type.
13    #[error("type mismatch for node: {0}")]
14    Type(String),
15    /// The node access mode forbids the attempted operation.
16    #[error("access denied for node: {0}")]
17    Access(String),
18    /// The provided value violates the limits declared by the node.
19    #[error("range error for node: {0}")]
20    Range(String),
21    /// The node is currently hidden by selector state.
22    #[error("node unavailable: {0}")]
23    Unavailable(String),
24    /// Underlying register IO failed.
25    #[error("io error: {0}")]
26    Io(String),
27    /// Node metadata or conversion failed.
28    #[error("parse error: {0}")]
29    Parse(String),
30    /// Parsing a SwissKnife expression failed.
31    #[error("failed to parse expression for {name}: {msg}")]
32    ExprParse { name: String, msg: String },
33    /// Evaluating a SwissKnife expression failed at runtime.
34    #[error("failed to evaluate expression for {name}: {msg}")]
35    ExprEval { name: String, msg: String },
36    /// A SwissKnife expression referenced an unknown variable.
37    #[error("unknown variable '{var}' referenced by {name}")]
38    UnknownVariable { name: String, var: String },
39    /// Raw register value did not correspond to any enum entry.
40    #[error("enum {node} has no entry for raw value {value}")]
41    EnumValueUnknown { node: String, value: i64 },
42    /// Attempted to select an enum entry that does not exist.
43    #[error("enum {node} has no entry named {entry}")]
44    EnumNoSuchEntry { node: String, entry: String },
45    /// Indirect addressing resolved to an invalid register.
46    #[error("node {name} resolved invalid indirect address {addr:#X}")]
47    BadIndirectAddress { name: String, addr: i64 },
48    /// Bitfield metadata exceeded the backing register width.
49    #[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    /// Provided value does not fit into the declared bitfield.
59    #[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}