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: Sized {
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 SerializeKeyImpl: Sealed {}
14
15pub trait SerializeKey {
16 type Impl<'a>: SerializeKeyImpl
17 where
18 Self: 'a;
19
20 fn as_impl(&self) -> Self::Impl<'_>;
21}
22
23impl Sealed for u8 {
24 fn serialize_key<B: BufMut>(self, buf: &mut B) -> Result<(), SerializeError> {
25 buf.put_u8(self);
26 Ok(())
27 }
28
29 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
30 buf.put_discriminant_u8(ValueKind::U8Map);
31 }
32
33 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
34 buf.put_discriminant_u8(ValueKind::U8Set);
35 }
36}
37
38impl SerializeKeyImpl for u8 {}
39
40impl SerializeKey for u8 {
41 type Impl<'a> = Self;
42
43 fn as_impl(&self) -> Self::Impl<'_> {
44 *self
45 }
46}
47
48impl Sealed for i8 {
49 fn serialize_key<B: BufMut>(self, buf: &mut B) -> Result<(), SerializeError> {
50 buf.put_i8(self);
51 Ok(())
52 }
53
54 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
55 buf.put_discriminant_u8(ValueKind::I8Map);
56 }
57
58 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
59 buf.put_discriminant_u8(ValueKind::I8Set);
60 }
61}
62
63impl SerializeKeyImpl for i8 {}
64
65impl SerializeKey for i8 {
66 type Impl<'a> = Self;
67
68 fn as_impl(&self) -> Self::Impl<'_> {
69 *self
70 }
71}
72
73impl Sealed for u16 {
74 fn serialize_key<B: BufMut>(self, buf: &mut B) -> Result<(), SerializeError> {
75 buf.put_varint_u16_le(self);
76 Ok(())
77 }
78
79 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
80 buf.put_discriminant_u8(ValueKind::U16Map);
81 }
82
83 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
84 buf.put_discriminant_u8(ValueKind::U16Set);
85 }
86}
87
88impl SerializeKeyImpl for u16 {}
89
90impl SerializeKey for u16 {
91 type Impl<'a> = Self;
92
93 fn as_impl(&self) -> Self::Impl<'_> {
94 *self
95 }
96}
97
98impl Sealed for i16 {
99 fn serialize_key<B: BufMut>(self, buf: &mut B) -> Result<(), SerializeError> {
100 buf.put_varint_i16_le(self);
101 Ok(())
102 }
103
104 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
105 buf.put_discriminant_u8(ValueKind::I16Map);
106 }
107
108 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
109 buf.put_discriminant_u8(ValueKind::I16Set);
110 }
111}
112
113impl SerializeKeyImpl for i16 {}
114
115impl SerializeKey for i16 {
116 type Impl<'a> = Self;
117
118 fn as_impl(&self) -> Self::Impl<'_> {
119 *self
120 }
121}
122
123impl Sealed for u32 {
124 fn serialize_key<B: BufMut>(self, buf: &mut B) -> Result<(), SerializeError> {
125 buf.put_varint_u32_le(self);
126 Ok(())
127 }
128
129 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
130 buf.put_discriminant_u8(ValueKind::U32Map);
131 }
132
133 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
134 buf.put_discriminant_u8(ValueKind::U32Set);
135 }
136}
137
138impl SerializeKeyImpl for u32 {}
139
140impl SerializeKey for u32 {
141 type Impl<'a> = Self;
142
143 fn as_impl(&self) -> Self::Impl<'_> {
144 *self
145 }
146}
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 SerializeKeyImpl for i32 {}
164
165impl SerializeKey for i32 {
166 type Impl<'a> = Self;
167
168 fn as_impl(&self) -> Self::Impl<'_> {
169 *self
170 }
171}
172
173impl Sealed for u64 {
174 fn serialize_key<B: BufMut>(self, buf: &mut B) -> Result<(), SerializeError> {
175 buf.put_varint_u64_le(self);
176 Ok(())
177 }
178
179 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
180 buf.put_discriminant_u8(ValueKind::U64Map);
181 }
182
183 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
184 buf.put_discriminant_u8(ValueKind::U64Set);
185 }
186}
187
188impl SerializeKeyImpl for u64 {}
189
190impl SerializeKey for u64 {
191 type Impl<'a> = Self;
192
193 fn as_impl(&self) -> Self::Impl<'_> {
194 *self
195 }
196}
197
198impl Sealed for i64 {
199 fn serialize_key<B: BufMut>(self, buf: &mut B) -> Result<(), SerializeError> {
200 buf.put_varint_i64_le(self);
201 Ok(())
202 }
203
204 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
205 buf.put_discriminant_u8(ValueKind::I64Map);
206 }
207
208 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
209 buf.put_discriminant_u8(ValueKind::I64Set);
210 }
211}
212
213impl SerializeKeyImpl for i64 {}
214
215impl SerializeKey for i64 {
216 type Impl<'a> = Self;
217
218 fn as_impl(&self) -> Self::Impl<'_> {
219 *self
220 }
221}
222
223impl Sealed for &str {
224 fn serialize_key<B: BufMut>(self, buf: &mut B) -> Result<(), SerializeError> {
225 if self.len() <= u32::MAX as usize {
226 buf.put_varint_u32_le(self.len() as u32);
227 buf.put_slice(self.as_bytes());
228 Ok(())
229 } else {
230 Err(SerializeError::Overflow)
231 }
232 }
233
234 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
235 buf.put_discriminant_u8(ValueKind::StringMap);
236 }
237
238 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
239 buf.put_discriminant_u8(ValueKind::StringSet);
240 }
241}
242
243impl SerializeKeyImpl for &str {}
244
245impl SerializeKey for &str {
246 type Impl<'a>
247 = Self
248 where
249 Self: 'a;
250
251 fn as_impl(&self) -> Self::Impl<'_> {
252 self
253 }
254}
255
256impl Sealed for Uuid {
257 fn serialize_key<B: BufMut>(self, buf: &mut B) -> Result<(), SerializeError> {
258 buf.put_slice(self.as_bytes());
259 Ok(())
260 }
261
262 fn serialize_map_value_kind<B: BufMut>(buf: &mut B) {
263 buf.put_discriminant_u8(ValueKind::UuidMap);
264 }
265
266 fn serialize_set_value_kind<B: BufMut>(buf: &mut B) {
267 buf.put_discriminant_u8(ValueKind::UuidSet);
268 }
269}
270
271impl SerializeKeyImpl for Uuid {}
272
273impl SerializeKey for Uuid {
274 type Impl<'a> = Self;
275
276 fn as_impl(&self) -> Self::Impl<'_> {
277 *self
278 }
279}
280
281impl<T: SerializeKey + ?Sized> SerializeKey for &T {
282 type Impl<'a>
283 = T::Impl<'a>
284 where
285 Self: 'a;
286
287 fn as_impl(&self) -> Self::Impl<'_> {
288 (**self).as_impl()
289 }
290}
291
292impl<T: SerializeKey + ?Sized> SerializeKey for &mut T {
293 type Impl<'a>
294 = T::Impl<'a>
295 where
296 Self: 'a;
297
298 fn as_impl(&self) -> Self::Impl<'_> {
299 (**self).as_impl()
300 }
301}
302
303impl<T: SerializeKey + ?Sized> SerializeKey for Box<T> {
304 type Impl<'a>
305 = T::Impl<'a>
306 where
307 Self: 'a;
308
309 fn as_impl(&self) -> Self::Impl<'_> {
310 (**self).as_impl()
311 }
312}
313
314impl SerializeKey for String {
315 type Impl<'a> = &'a str;
316
317 fn as_impl(&self) -> Self::Impl<'_> {
318 self
319 }
320}