cesr/core/indexer/
error.rs1use super::code::IndexedSigCode;
2#[cfg(feature = "alloc")]
3#[allow(
4 unused_imports,
5 reason = "alloc prelude items; subset used per cfg/feature combination"
6)]
7use alloc::string::String;
8use thiserror::Error as ThisError;
9
10#[derive(Debug, ThisError, PartialEq, Eq)]
12pub enum IndexerParseError {
13 #[error("empty CESR stream")]
15 EmptyStream,
16
17 #[error("stream too short: need {need} chars, got {got}")]
19 StreamTooShort {
20 need: usize,
22 got: usize,
24 },
25
26 #[error("unknown indexed sig code: '{0}'")]
28 UnknownCode(String),
29
30 #[error("invalid base64 in indexed sig stream")]
32 InvalidBase64,
33
34 #[error("non-canonical encoding: leading zeros in indexed sig")]
36 NonCanonical,
37
38 #[error("ondex must be 0 for current-only code, got {0}")]
40 OndexNotZeroForCurrentOnly(u32),
41
42 #[error("indexer full size overflow")]
44 SizeOverflow,
45}
46
47#[derive(Debug, ThisError, PartialEq, Eq)]
49pub enum IndexerValidationError {
50 #[error("index {index} exceeds max {max} for code {code:?}")]
52 IndexTooLarge {
53 code: IndexedSigCode,
55 index: u32,
57 max: u32,
59 },
60
61 #[error("ondex {ondex} exceeds max {max} for code {code:?}")]
63 OndexTooLarge {
64 code: IndexedSigCode,
66 ondex: u32,
68 max: u32,
70 },
71
72 #[error("ondex not allowed for current-only code {0:?}")]
74 OndexOnCurrentOnly(IndexedSigCode),
75
76 #[error("ondex {ondex} must equal index {index} for code {code:?} (os=0)")]
79 OndexMustEqualIndex {
80 code: IndexedSigCode,
82 index: u32,
84 ondex: u32,
86 },
87
88 #[error("unexpected raw size for {code:?}: expected {expected}, got {got}")]
90 UnexpectedRawSize {
91 code: IndexedSigCode,
93 expected: usize,
95 got: usize,
97 },
98}
99
100impl From<super::code::CodeError> for IndexerParseError {
101 fn from(e: super::code::CodeError) -> Self {
102 match e {
103 super::code::CodeError::UnknownCode(s) => Self::UnknownCode(s),
104 }
105 }
106}
107
108impl From<crate::b64::error::Error> for IndexerParseError {
109 fn from(e: crate::b64::error::Error) -> Self {
110 match e {
111 crate::b64::error::Error::InvalidBase64Char(_)
112 | crate::b64::error::Error::InvalidBase64Value(_)
113 | crate::b64::error::Error::Misaligned { .. }
114 | crate::b64::error::Error::IntegerOverflow => Self::InvalidBase64,
115 crate::b64::error::Error::ShortBinaryStream => Self::StreamTooShort { need: 0, got: 0 },
116 }
117 }
118}