1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//! Error types for bitframe parsing operations.
//!
//! All errors are structured, deterministic, and machine-readable. `Display`
//! provides human-friendly context; fields are accessible for programmatic use.
//!
//! # Examples
//!
//! ```
//! use bitframe::Error;
//!
//! let err = Error::TooShort { needed_bytes: 6, have_bytes: 2 };
//! assert_eq!(format!("{err}"), "buffer too short: need 6 bytes, have 2");
//! ```
/// Errors returned by bitframe parsing operations.
///
/// Each variant carries enough context to produce a useful diagnostic message.
/// Field values are intentionally public for pattern matching.
///
/// # Examples
///
/// Matching on a short-buffer error:
///
/// ```
/// use bitframe::Error;
///
/// let err = Error::TooShort { needed_bytes: 6, have_bytes: 2 };
/// match err {
/// Error::TooShort { needed_bytes, have_bytes } => {
/// assert_eq!(needed_bytes, 6);
/// assert_eq!(have_bytes, 2);
/// }
/// Error::InvalidEnum { .. } => unreachable!(),
/// }
/// ```
///
/// Matching on an invalid enum discriminant:
///
/// ```
/// use bitframe::Error;
///
/// let err = Error::InvalidEnum { field: "priority", raw: 7 };
/// match err {
/// Error::InvalidEnum { field, raw } => {
/// assert_eq!(field, "priority");
/// assert_eq!(raw, 7);
/// }
/// Error::TooShort { .. } => unreachable!(),
/// }
/// ```