1pub mod codec;
4pub mod length;
5pub mod reader;
6pub mod tag;
7pub mod writer;
8
9pub use codec::LdapCodec;
10pub use reader::BerReader;
11pub use tag::{Class, Tag};
12pub use writer::BerWriter;
13
14#[derive(Debug, thiserror::Error)]
15pub enum BerError {
16 #[error("unexpected tag: expected {expected:?}, got {actual:?}")]
17 UnexpectedTag { expected: Tag, actual: Tag },
18
19 #[error("truncated input: need {need} bytes, have {have}")]
20 Truncated { need: usize, have: usize },
21
22 #[error("recursion depth exceeded (max {max})")]
23 RecursionLimit { max: u16 },
24
25 #[error("element size {size} exceeds maximum {max}")]
26 ElementTooLarge { size: u64, max: u32 },
27
28 #[error("invalid length encoding")]
29 InvalidLength,
30
31 #[error("invalid integer encoding")]
32 InvalidInteger,
33
34 #[error("invalid boolean encoding")]
35 InvalidBoolean,
36
37 #[error("indefinite length not supported")]
38 IndefiniteLength,
39
40 #[error("constructed OCTET STRING not supported")]
41 ConstructedPrimitive,
42
43 #[error("invalid tag byte: 0x{0:02x}")]
44 InvalidTag(u8),
45
46 #[error("tag number overflow")]
47 TagOverflow,
48
49 #[error("trailing data: {remaining} bytes unconsumed in constructed element")]
50 TrailingData { remaining: usize },
51
52 #[error("invalid UTF-8 in string field")]
53 InvalidUtf8,
54
55 #[error("I/O error: {0}")]
56 Io(#[from] std::io::Error),
57}