aldrin_core/
serialize.rs

1use crate::tags::{PrimaryTag, Tag};
2use crate::Serializer;
3use thiserror::Error;
4
5pub trait Serialize<T: Tag>: Sized {
6    fn serialize(self, serializer: Serializer) -> Result<(), SerializeError>;
7
8    fn serializes_as_some(&self) -> bool {
9        true
10    }
11}
12
13pub trait SerializePrimary: PrimaryTag + Serialize<Self::Tag> {}
14
15impl<T: PrimaryTag + Serialize<T::Tag>> SerializePrimary for T {}
16
17#[derive(Error, Debug, Copy, Clone, PartialEq, Eq)]
18pub enum SerializeError {
19    #[error("unexpected value type")]
20    UnexpectedValue,
21
22    #[error("serialized value overflowed")]
23    Overflow,
24
25    #[error("more elements serialized than expected")]
26    TooManyElements,
27
28    #[error("fewer elements serialized than expected")]
29    TooFewElements,
30
31    #[error("too deeply nested")]
32    TooDeeplyNested,
33}