aldrin_core/
deserialize.rs1use 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}