1use crate::ByteArray;
2use serde::Serializer;
3
4pub trait Serialize {
6 #[allow(missing_docs)]
7 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
8 where
9 S: Serializer;
10}
11
12impl<const N: usize> Serialize for [u8; N] {
13 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
14 where
15 S: Serializer,
16 {
17 serializer.serialize_bytes(self)
18 }
19}
20
21impl<const N: usize> Serialize for ByteArray<N> {
22 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
23 where
24 S: Serializer,
25 {
26 serializer.serialize_bytes(&**self)
27 }
28}
29
30impl<'a, T: Serialize> Serialize for &'a T {
31 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
32 where
33 S: Serializer,
34 {
35 (*self).serialize(serializer)
36 }
37}
38
39impl<T> Serialize for Option<T>
40where
41 T: Serialize,
42{
43 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
44 where
45 S: Serializer,
46 {
47 struct AsBytes<T>(T);
48
49 impl<T> serde::Serialize for AsBytes<T>
50 where
51 T: Serialize,
52 {
53 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
54 where
55 S: Serializer,
56 {
57 self.0.serialize(serializer)
58 }
59 }
60
61 match self {
62 Some(b) => serializer.serialize_some(&AsBytes(b)),
63 None => serializer.serialize_none(),
64 }
65 }
66}