aldrin_core/
deserialize.rs

1use crate::tags::{PrimaryTag, Tag};
2use crate::Deserializer;
3use thiserror::Error;
4
5pub trait Deserialize<T: Tag>: Sized {
6    fn deserialize(deserializer: Deserializer) -> Result<Self, DeserializeError>;
7}
8
9pub trait DeserializePrimary: PrimaryTag + Deserialize<Self::Tag> {}
10
11impl<T: PrimaryTag + Deserialize<T::Tag>> DeserializePrimary for T {}
12
13#[derive(Error, Debug, Copy, Clone, PartialEq, Eq)]
14pub enum DeserializeError {
15    #[error("invalid serialization")]
16    InvalidSerialization,
17
18    #[error("unexpected end of input")]
19    UnexpectedEoi,
20
21    #[error("unexpected value type")]
22    UnexpectedValue,
23
24    #[error("too deeply nested")]
25    TooDeeplyNested,
26
27    #[error("no more elements")]
28    NoMoreElements,
29
30    #[error("more elements remain")]
31    MoreElementsRemain,
32
33    #[error("serialization contains trailing data")]
34    TrailingData,
35}