aldrin_core/
serialize_key.rs1use crate::buf_ext::BufMutExt;
2use crate::error::SerializeError;
3use crate::value::ValueKind;
4use bytes::BufMut;
5use uuid::Uuid;
6
7pub trait Sealed {
8 fn serialize_key<B: BufMut>(&self, buf: &mut B) -> Result<(), SerializeError>;
9 fn serialize_map_value_kind<B: BufMut>(buf: &mut B);
10 fn serialize_set_value_kind<B: BufMut>(buf: &mut B);
11}
12
13pub trait SerializeKey: Sealed {}
14
15impl<T: Sealed + ?Sized> Sealed for &T {
16 fn serialize_key<B: BufMut>(&self, buf: &mut B) -> Result<(), SerializeError> {
17 (**self).serialize_key(buf)
18 }
19
20 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
21 T::serialize_map_value_kind(buf)
22 }
23
24 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
25 T::serialize_set_value_kind(buf)
26 }
27}
28
29impl<T: SerializeKey + ?Sized> SerializeKey for &T {}
30
31impl<T: Sealed + ?Sized> Sealed for &mut T {
32 fn serialize_key<B: BufMut>(&self, buf: &mut B) -> Result<(), SerializeError> {
33 (**self).serialize_key(buf)
34 }
35
36 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
37 T::serialize_map_value_kind(buf)
38 }
39
40 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
41 T::serialize_set_value_kind(buf)
42 }
43}
44
45impl<T: SerializeKey + ?Sized> SerializeKey for &mut T {}
46
47impl<T: Sealed + ?Sized> Sealed for Box<T> {
48 fn serialize_key<B: BufMut>(&self, buf: &mut B) -> Result<(), SerializeError> {
49 (**self).serialize_key(buf)
50 }
51
52 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
53 T::serialize_map_value_kind(buf)
54 }
55
56 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
57 T::serialize_set_value_kind(buf)
58 }
59}
60
61impl<T: SerializeKey + ?Sized> SerializeKey for Box<T> {}
62
63impl Sealed for u8 {
64 fn serialize_key<B: BufMut>(&self, buf: &mut B) -> Result<(), SerializeError> {
65 buf.put_u8(*self);
66 Ok(())
67 }
68
69 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
70 buf.put_discriminant_u8(ValueKind::U8Map);
71 }
72
73 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
74 buf.put_discriminant_u8(ValueKind::U8Set);
75 }
76}
77
78impl SerializeKey for u8 {}
79
80impl Sealed for i8 {
81 fn serialize_key<B: BufMut>(&self, buf: &mut B) -> Result<(), SerializeError> {
82 buf.put_i8(*self);
83 Ok(())
84 }
85
86 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
87 buf.put_discriminant_u8(ValueKind::I8Map);
88 }
89
90 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
91 buf.put_discriminant_u8(ValueKind::I8Set);
92 }
93}
94
95impl SerializeKey for i8 {}
96
97impl Sealed for u16 {
98 fn serialize_key<B: BufMut>(&self, buf: &mut B) -> Result<(), SerializeError> {
99 buf.put_varint_u16_le(*self);
100 Ok(())
101 }
102
103 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
104 buf.put_discriminant_u8(ValueKind::U16Map);
105 }
106
107 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
108 buf.put_discriminant_u8(ValueKind::U16Set);
109 }
110}
111
112impl SerializeKey for u16 {}
113
114impl Sealed for i16 {
115 fn serialize_key<B: BufMut>(&self, buf: &mut B) -> Result<(), SerializeError> {
116 buf.put_varint_i16_le(*self);
117 Ok(())
118 }
119
120 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
121 buf.put_discriminant_u8(ValueKind::I16Map);
122 }
123
124 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
125 buf.put_discriminant_u8(ValueKind::I16Set);
126 }
127}
128
129impl SerializeKey for i16 {}
130
131impl Sealed for u32 {
132 fn serialize_key<B: BufMut>(&self, buf: &mut B) -> Result<(), SerializeError> {
133 buf.put_varint_u32_le(*self);
134 Ok(())
135 }
136
137 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
138 buf.put_discriminant_u8(ValueKind::U32Map);
139 }
140
141 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
142 buf.put_discriminant_u8(ValueKind::U32Set);
143 }
144}
145
146impl SerializeKey for u32 {}
147
148impl Sealed for i32 {
149 fn serialize_key<B: BufMut>(&self, buf: &mut B) -> Result<(), SerializeError> {
150 buf.put_varint_i32_le(*self);
151 Ok(())
152 }
153
154 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
155 buf.put_discriminant_u8(ValueKind::I32Map);
156 }
157
158 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
159 buf.put_discriminant_u8(ValueKind::I32Set);
160 }
161}
162
163impl SerializeKey for i32 {}
164
165impl Sealed for u64 {
166 fn serialize_key<B: BufMut>(&self, buf: &mut B) -> Result<(), SerializeError> {
167 buf.put_varint_u64_le(*self);
168 Ok(())
169 }
170
171 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
172 buf.put_discriminant_u8(ValueKind::U64Map);
173 }
174
175 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
176 buf.put_discriminant_u8(ValueKind::U64Set);
177 }
178}
179
180impl SerializeKey for u64 {}
181
182impl Sealed for i64 {
183 fn serialize_key<B: BufMut>(&self, buf: &mut B) -> Result<(), SerializeError> {
184 buf.put_varint_i64_le(*self);
185 Ok(())
186 }
187
188 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
189 buf.put_discriminant_u8(ValueKind::I64Map);
190 }
191
192 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
193 buf.put_discriminant_u8(ValueKind::I64Set);
194 }
195}
196
197impl SerializeKey for i64 {}
198
199impl Sealed for str {
200 fn serialize_key<B: BufMut>(&self, buf: &mut B) -> Result<(), SerializeError> {
201 if self.len() <= u32::MAX as usize {
202 buf.put_varint_u32_le(self.len() as u32);
203 buf.put_slice(self.as_bytes());
204 Ok(())
205 } else {
206 Err(SerializeError::Overflow)
207 }
208 }
209
210 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
211 buf.put_discriminant_u8(ValueKind::StringMap);
212 }
213
214 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
215 buf.put_discriminant_u8(ValueKind::StringSet);
216 }
217}
218
219impl SerializeKey for str {}
220
221impl Sealed for String {
222 fn serialize_key<B: BufMut>(&self, buf: &mut B) -> Result<(), SerializeError> {
223 self.as_str().serialize_key(buf)
224 }
225
226 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
227 str::serialize_map_value_kind(buf);
228 }
229
230 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
231 str::serialize_set_value_kind(buf);
232 }
233}
234
235impl SerializeKey for String {}
236
237impl Sealed for Uuid {
238 fn serialize_key<B: BufMut>(&self, buf: &mut B) -> Result<(), SerializeError> {
239 buf.put_slice(self.as_bytes());
240 Ok(())
241 }
242
243 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
244 buf.put_discriminant_u8(ValueKind::UuidMap);
245 }
246
247 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
248 buf.put_discriminant_u8(ValueKind::UuidSet);
249 }
250}
251
252impl SerializeKey for Uuid {}