Skip to main content

ldap_client_ber/
lib.rs

1// SPDX-License-Identifier: MIT OR Apache-2.0
2
3pub 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}