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}