1pub(crate) use self::macros::*;
2use crate::{formats::Strictness, prelude::*};
3#[cfg(feature = "hashbrown_0_14")]
4use hashbrown_0_14::{HashMap as HashbrownMap014, HashSet as HashbrownSet014};
5#[cfg(feature = "hashbrown_0_15")]
6use hashbrown_0_15::{HashMap as HashbrownMap015, HashSet as HashbrownSet015};
7#[cfg(feature = "hashbrown_0_16")]
8use hashbrown_0_16::{HashMap as HashbrownMap016, HashSet as HashbrownSet016};
9#[cfg(feature = "indexmap_1")]
10use indexmap_1::{IndexMap, IndexSet};
11#[cfg(feature = "indexmap_2")]
12use indexmap_2::{IndexMap as IndexMap2, IndexSet as IndexSet2};
13
14#[cfg(feature = "alloc")]
18type BoxedSlice<T> = Box<[T]>;
19type Slice<T> = [T];
20type Ref<'a, T> = &'a T;
21type RefMut<'a, T> = &'a mut T;
22
23pub(crate) mod macros {
24 #![allow(unused_imports)]
27
28 macro_rules! foreach_map {
29 ($m:ident) => {
30 #[cfg(feature = "alloc")]
31 $m!(BTreeMap<K, V>);
32 #[cfg(feature = "std")]
33 $m!(HashMap<K, V, H: Sized>);
34 #[cfg(feature = "hashbrown_0_14")]
35 $m!(HashbrownMap014<K, V, H: Sized>);
36 #[cfg(feature = "hashbrown_0_15")]
37 $m!(HashbrownMap015<K, V, H: Sized>);
38 #[cfg(feature = "hashbrown_0_16")]
39 $m!(HashbrownMap016<K, V, H: Sized>);
40 #[cfg(feature = "indexmap_1")]
41 $m!(IndexMap<K, V, H: Sized>);
42 #[cfg(feature = "indexmap_2")]
43 $m!(IndexMap2<K, V, H: Sized>);
44 };
45}
46
47 macro_rules! foreach_set {
48 ($m:ident, $T:tt) => {
49 #[cfg(feature = "alloc")]
50 $m!(BTreeSet<$T>);
51 #[cfg(feature = "std")]
52 $m!(HashSet<$T, H: Sized>);
53 #[cfg(feature = "hashbrown_0_14")]
54 $m!(HashbrownSet014<$T, H: Sized>);
55 #[cfg(feature = "hashbrown_0_15")]
56 $m!(HashbrownSet015<$T, H: Sized>);
57 #[cfg(feature = "hashbrown_0_16")]
58 $m!(HashbrownSet016<$T, H: Sized>);
59 #[cfg(feature = "indexmap_1")]
60 $m!(IndexSet<$T, H: Sized>);
61 #[cfg(feature = "indexmap_2")]
62 $m!(IndexSet2<$T, H: Sized>);
63 };
64 ($m:ident) => {
65 foreach_set!($m, T);
66 };
67}
68
69 macro_rules! foreach_seq {
70 ($m:ident, $T:tt) => {
71 foreach_set!($m, $T);
72
73 $m!(Slice<$T>);
74
75 #[cfg(feature = "alloc")]
76 $m!(BinaryHeap<$T>);
77 #[cfg(feature = "alloc")]
78 $m!(BoxedSlice<$T>);
79 #[cfg(feature = "alloc")]
80 $m!(LinkedList<$T>);
81 #[cfg(feature = "alloc")]
82 $m!(Vec<$T>);
83 #[cfg(feature = "alloc")]
84 $m!(VecDeque<$T>);
85 };
86 ($m:
87 ident) => {
88 foreach_seq!($m, T);
89 };
90 }
91
92 pub(crate) use foreach_map;
94 pub(crate) use foreach_seq;
95 pub(crate) use foreach_set;
96}
97
98#[allow(unused_macros)]
102macro_rules! pinned_wrapper {
103 ($wrapper:ident $($lifetime:lifetime)?) => {
104 impl<$($lifetime,)? T, U> SerializeAs<Pin<$wrapper<$($lifetime,)? T>>> for Pin<$wrapper<$($lifetime,)? U>>
105 where
106 U: SerializeAs<T>,
107 {
108 fn serialize_as<S>(source: &Pin<$wrapper<$($lifetime,)? T>>, serializer: S) -> Result<S::Ok, S::Error>
109 where
110 S: Serializer,
111 {
112 SerializeAsWrap::<T, U>::new(source).serialize(serializer)
113 }
114 }
115 };
116}
117
118impl<'a, T, U> SerializeAs<&'a T> for &'a U
119where
120 U: SerializeAs<T>,
121 T: ?Sized,
122 U: ?Sized,
123{
124 fn serialize_as<S>(source: &&'a T, serializer: S) -> Result<S::Ok, S::Error>
125 where
126 S: Serializer,
127 {
128 SerializeAsWrap::<T, U>::new(source).serialize(serializer)
129 }
130}
131
132impl<'a, T, U> SerializeAs<&'a mut T> for &'a mut U
133where
134 U: SerializeAs<T>,
135 T: ?Sized,
136 U: ?Sized,
137{
138 fn serialize_as<S>(source: &&'a mut T, serializer: S) -> Result<S::Ok, S::Error>
139 where
140 S: Serializer,
141 {
142 SerializeAsWrap::<T, U>::new(source).serialize(serializer)
143 }
144}
145
146impl<'a, T, U> SerializeAs<Pin<Ref<'a, T>>> for Pin<Ref<'a, U>> where
U: SerializeAs<T> {
fn serialize_as<S>(source: &Pin<Ref<'a, T>>, serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
SerializeAsWrap::<T, U>::new(source).serialize(serializer)
}
}pinned_wrapper!(Ref 'a);
147impl<'a, T, U> SerializeAs<Pin<RefMut<'a, T>>> for Pin<RefMut<'a, U>> where
U: SerializeAs<T> {
fn serialize_as<S>(source: &Pin<RefMut<'a, T>>, serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
SerializeAsWrap::<T, U>::new(source).serialize(serializer)
}
}pinned_wrapper!(RefMut 'a);
148
149#[cfg(feature = "alloc")]
150impl<T, U> SerializeAs<Box<T>> for Box<U>
151where
152 U: SerializeAs<T>,
153{
154 fn serialize_as<S>(source: &Box<T>, serializer: S) -> Result<S::Ok, S::Error>
155 where
156 S: Serializer,
157 {
158 SerializeAsWrap::<T, U>::new(source).serialize(serializer)
159 }
160}
161
162#[cfg(feature = "alloc")]
163impl<T, U> SerializeAs<Pin<Box<T>>> for Pin<Box<U>> where U: SerializeAs<T> {
fn serialize_as<S>(source: &Pin<Box<T>>, serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
SerializeAsWrap::<T, U>::new(source).serialize(serializer)
}
}pinned_wrapper!(Box);
164
165impl<T, U> SerializeAs<Option<T>> for Option<U>
166where
167 U: SerializeAs<T>,
168{
169 fn serialize_as<S>(source: &Option<T>, serializer: S) -> Result<S::Ok, S::Error>
170 where
171 S: Serializer,
172 {
173 match *source {
174 Some(ref value) => serializer.serialize_some(&SerializeAsWrap::<T, U>::new(value)),
175 None => serializer.serialize_none(),
176 }
177 }
178}
179
180impl<T, U> SerializeAs<Bound<T>> for Bound<U>
181where
182 U: SerializeAs<T>,
183 T: Sized,
184{
185 fn serialize_as<S>(source: &Bound<T>, serializer: S) -> Result<S::Ok, S::Error>
186 where
187 S: Serializer,
188 {
189 match source {
190 Bound::Unbounded => Bound::Unbounded,
191 Bound::Included(v) => Bound::Included(SerializeAsWrap::<T, U>::new(v)),
192 Bound::Excluded(v) => Bound::Excluded(SerializeAsWrap::<T, U>::new(v)),
193 }
194 .serialize(serializer)
195 }
196}
197
198#[cfg(feature = "alloc")]
199impl<T, U> SerializeAs<Rc<T>> for Rc<U>
200where
201 U: SerializeAs<T>,
202{
203 fn serialize_as<S>(source: &Rc<T>, serializer: S) -> Result<S::Ok, S::Error>
204 where
205 S: Serializer,
206 {
207 SerializeAsWrap::<T, U>::new(source).serialize(serializer)
208 }
209}
210
211#[cfg(feature = "alloc")]
212impl<T, U> SerializeAs<Pin<Rc<T>>> for Pin<Rc<U>> where U: SerializeAs<T> {
fn serialize_as<S>(source: &Pin<Rc<T>>, serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
SerializeAsWrap::<T, U>::new(source).serialize(serializer)
}
}pinned_wrapper!(Rc);
213
214#[cfg(feature = "alloc")]
215impl<T, U> SerializeAs<RcWeak<T>> for RcWeak<U>
216where
217 U: SerializeAs<T>,
218{
219 fn serialize_as<S>(source: &RcWeak<T>, serializer: S) -> Result<S::Ok, S::Error>
220 where
221 S: Serializer,
222 {
223 SerializeAsWrap::<Option<Rc<T>>, Option<Rc<U>>>::new(&source.upgrade())
224 .serialize(serializer)
225 }
226}
227
228#[cfg(all(feature = "alloc", target_has_atomic = "ptr"))]
229impl<T, U> SerializeAs<Arc<T>> for Arc<U>
230where
231 U: SerializeAs<T>,
232{
233 fn serialize_as<S>(source: &Arc<T>, serializer: S) -> Result<S::Ok, S::Error>
234 where
235 S: Serializer,
236 {
237 SerializeAsWrap::<T, U>::new(source).serialize(serializer)
238 }
239}
240
241#[cfg(all(feature = "alloc", target_has_atomic = "ptr"))]
242impl<T, U> SerializeAs<Pin<Arc<T>>> for Pin<Arc<U>> where U: SerializeAs<T> {
fn serialize_as<S>(source: &Pin<Arc<T>>, serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
SerializeAsWrap::<T, U>::new(source).serialize(serializer)
}
}pinned_wrapper!(Arc);
243
244#[cfg(all(feature = "alloc", target_has_atomic = "ptr"))]
245impl<T, U> SerializeAs<ArcWeak<T>> for ArcWeak<U>
246where
247 U: SerializeAs<T>,
248{
249 fn serialize_as<S>(source: &ArcWeak<T>, serializer: S) -> Result<S::Ok, S::Error>
250 where
251 S: Serializer,
252 {
253 SerializeAsWrap::<Option<Arc<T>>, Option<Arc<U>>>::new(&source.upgrade())
254 .serialize(serializer)
255 }
256}
257
258impl<T, U> SerializeAs<Cell<T>> for Cell<U>
259where
260 U: SerializeAs<T>,
261 T: Copy,
262{
263 fn serialize_as<S>(source: &Cell<T>, serializer: S) -> Result<S::Ok, S::Error>
264 where
265 S: Serializer,
266 {
267 SerializeAsWrap::<T, U>::new(&source.get()).serialize(serializer)
268 }
269}
270
271impl<T, U> SerializeAs<RefCell<T>> for RefCell<U>
272where
273 U: SerializeAs<T>,
274{
275 fn serialize_as<S>(source: &RefCell<T>, serializer: S) -> Result<S::Ok, S::Error>
276 where
277 S: Serializer,
278 {
279 match source.try_borrow() {
280 Ok(source) => SerializeAsWrap::<T, U>::new(&*source).serialize(serializer),
281 Err(_) => Err(S::Error::custom("already mutably borrowed")),
282 }
283 }
284}
285
286#[cfg(feature = "std")]
287impl<T, U> SerializeAs<Mutex<T>> for Mutex<U>
288where
289 U: SerializeAs<T>,
290{
291 fn serialize_as<S>(source: &Mutex<T>, serializer: S) -> Result<S::Ok, S::Error>
292 where
293 S: Serializer,
294 {
295 match source.lock() {
296 Ok(source) => SerializeAsWrap::<T, U>::new(&*source).serialize(serializer),
297 Err(_) => Err(S::Error::custom("lock poison error while serializing")),
298 }
299 }
300}
301
302#[cfg(feature = "std")]
303impl<T, U> SerializeAs<RwLock<T>> for RwLock<U>
304where
305 U: SerializeAs<T>,
306{
307 fn serialize_as<S>(source: &RwLock<T>, serializer: S) -> Result<S::Ok, S::Error>
308 where
309 S: Serializer,
310 {
311 match source.read() {
312 Ok(source) => SerializeAsWrap::<T, U>::new(&*source).serialize(serializer),
313 Err(_) => Err(S::Error::custom("lock poison error while serializing")),
314 }
315 }
316}
317
318impl<T, TAs, E, EAs> SerializeAs<Result<T, E>> for Result<TAs, EAs>
319where
320 TAs: SerializeAs<T>,
321 EAs: SerializeAs<E>,
322{
323 fn serialize_as<S>(source: &Result<T, E>, serializer: S) -> Result<S::Ok, S::Error>
324 where
325 S: Serializer,
326 {
327 source
328 .as_ref()
329 .map(SerializeAsWrap::<T, TAs>::new)
330 .map_err(SerializeAsWrap::<E, EAs>::new)
331 .serialize(serializer)
332 }
333}
334
335impl<T, As, const N: usize> SerializeAs<[T; N]> for [As; N]
336where
337 As: SerializeAs<T>,
338{
339 fn serialize_as<S>(array: &[T; N], serializer: S) -> Result<S::Ok, S::Error>
340 where
341 S: Serializer,
342 {
343 let mut arr = serializer.serialize_tuple(N)?;
344 for elem in array {
345 arr.serialize_element(&SerializeAsWrap::<T, As>::new(elem))?;
346 }
347 arr.end()
348 }
349}
350
351impl<Idx, IdxAs> SerializeAs<Range<Idx>> for Range<IdxAs>
356where
357 IdxAs: SerializeAs<Idx>,
358{
359 fn serialize_as<S>(value: &Range<Idx>, serializer: S) -> Result<S::Ok, S::Error>
360 where
361 S: Serializer,
362 {
363 Range {
364 start: SerializeAsWrap::<Idx, IdxAs>::new(&value.start),
365 end: SerializeAsWrap::<Idx, IdxAs>::new(&value.end),
366 }
367 .serialize(serializer)
368 }
369}
370
371impl<Idx, IdxAs> SerializeAs<RangeFrom<Idx>> for RangeFrom<IdxAs>
372where
373 IdxAs: SerializeAs<Idx>,
374{
375 fn serialize_as<S>(value: &RangeFrom<Idx>, serializer: S) -> Result<S::Ok, S::Error>
376 where
377 S: Serializer,
378 {
379 RangeFrom {
380 start: SerializeAsWrap::<Idx, IdxAs>::new(&value.start),
381 }
382 .serialize(serializer)
383 }
384}
385
386impl<Idx, IdxAs> SerializeAs<RangeInclusive<Idx>> for RangeInclusive<IdxAs>
387where
388 IdxAs: SerializeAs<Idx>,
389{
390 fn serialize_as<S>(value: &RangeInclusive<Idx>, serializer: S) -> Result<S::Ok, S::Error>
391 where
392 S: Serializer,
393 {
394 RangeInclusive::new(
395 SerializeAsWrap::<Idx, IdxAs>::new(value.start()),
396 SerializeAsWrap::<Idx, IdxAs>::new(value.end()),
397 )
398 .serialize(serializer)
399 }
400}
401
402impl<Idx, IdxAs> SerializeAs<RangeTo<Idx>> for RangeTo<IdxAs>
403where
404 IdxAs: SerializeAs<Idx>,
405{
406 fn serialize_as<S>(value: &RangeTo<Idx>, serializer: S) -> Result<S::Ok, S::Error>
407 where
408 S: Serializer,
409 {
410 RangeTo {
411 end: SerializeAsWrap::<Idx, IdxAs>::new(&value.end),
412 }
413 .serialize(serializer)
414 }
415}
416
417macro_rules! seq_impl {
422 ($ty:ident < T $(: $tbound1:ident $(+ $tbound2:ident)*)* $(, $typaram:ident : $bound:ident )* >) => {
423 impl<T, U $(, $typaram)*> SerializeAs<$ty<T $(, $typaram)*>> for $ty<U $(, $typaram)*>
424 where
425 U: SerializeAs<T>,
426 $(T: ?Sized + $tbound1 $(+ $tbound2)*,)*
427 $($typaram: ?Sized + $bound,)*
428 {
429 fn serialize_as<S>(source: &$ty<T $(, $typaram)*>, serializer: S) -> Result<S::Ok, S::Error>
430 where
431 S: Serializer,
432 {
433 serializer.collect_seq(source.iter().map(|item| SerializeAsWrap::<T, U>::new(item)))
434 }
435 }
436 }
437}
438impl<T, U> SerializeAs<VecDeque<T>> for VecDeque<U> where U: SerializeAs<T> {
fn serialize_as<S>(source: &VecDeque<T>, serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
serializer.collect_seq(source.iter().map(|item|
SerializeAsWrap::<T, U>::new(item)))
}
}foreach_seq!(seq_impl);
439
440#[cfg(feature = "alloc")]
441macro_rules! map_impl {
442 ($ty:ident < K, V $(, $typaram:ident : $bound:ident)* >) => {
443 impl<K, KU, V, VU $(, $typaram)*> SerializeAs<$ty<K, V $(, $typaram)*>> for $ty<KU, VU $(, $typaram)*>
444 where
445 KU: SerializeAs<K>,
446 VU: SerializeAs<V>,
447 $($typaram: ?Sized + $bound,)*
448 {
449 fn serialize_as<S>(source: &$ty<K, V $(, $typaram)*>, serializer: S) -> Result<S::Ok, S::Error>
450 where
451 S: Serializer,
452 {
453 serializer.collect_map(source.iter().map(|(k, v)| (SerializeAsWrap::<K, KU>::new(k), SerializeAsWrap::<V, VU>::new(v))))
454 }
455 }
456 }
457}
458impl<K, KU, V, VU, H> SerializeAs<IndexMap2<K, V, H>> for IndexMap2<KU, VU, H>
where KU: SerializeAs<K>, VU: SerializeAs<V>, H: ?Sized + Sized {
fn serialize_as<S>(source: &IndexMap2<K, V, H>, serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
serializer.collect_map(source.iter().map(|(k, v)|
(SerializeAsWrap::<K, KU>::new(k),
SerializeAsWrap::<V, VU>::new(v))))
}
}foreach_map!(map_impl);
459
460macro_rules! tuple_impl {
461 ($len:literal $($n:tt $t:ident $tas:ident)+) => {
462 impl<$($t, $tas,)+> SerializeAs<($($t,)+)> for ($($tas,)+)
463 where
464 $($tas: SerializeAs<$t>,)+
465 {
466 fn serialize_as<S>(tuple: &($($t,)+), serializer: S) -> Result<S::Ok, S::Error>
467 where
468 S: Serializer,
469 {
470 let mut tup = serializer.serialize_tuple($len)?;
471 $(
472 tup.serialize_element(&SerializeAsWrap::<$t, $tas>::new(&tuple.$n))?;
473 )+
474 tup.end()
475 }
476 }
477 };
478}
479
480impl<T0, As0> SerializeAs<(T0,)> for (As0,) where As0: SerializeAs<T0> {
fn serialize_as<S>(tuple: &(T0,), serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
let mut tup = serializer.serialize_tuple(1)?;
tup.serialize_element(&SerializeAsWrap::<T0, As0>::new(&tuple.0))?;
tup.end()
}
}tuple_impl!(1 0 T0 As0);
481impl<T0, As0, T1, As1> SerializeAs<(T0, T1)> for (As0, As1) where
As0: SerializeAs<T0>, As1: SerializeAs<T1> {
fn serialize_as<S>(tuple: &(T0, T1), serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
let mut tup = serializer.serialize_tuple(2)?;
tup.serialize_element(&SerializeAsWrap::<T0, As0>::new(&tuple.0))?;
tup.serialize_element(&SerializeAsWrap::<T1, As1>::new(&tuple.1))?;
tup.end()
}
}tuple_impl!(2 0 T0 As0 1 T1 As1);
482impl<T0, As0, T1, As1, T2, As2> SerializeAs<(T0, T1, T2)> for (As0, As1, As2)
where As0: SerializeAs<T0>, As1: SerializeAs<T1>, As2: SerializeAs<T2> {
fn serialize_as<S>(tuple: &(T0, T1, T2), serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
let mut tup = serializer.serialize_tuple(3)?;
tup.serialize_element(&SerializeAsWrap::<T0, As0>::new(&tuple.0))?;
tup.serialize_element(&SerializeAsWrap::<T1, As1>::new(&tuple.1))?;
tup.serialize_element(&SerializeAsWrap::<T2, As2>::new(&tuple.2))?;
tup.end()
}
}tuple_impl!(3 0 T0 As0 1 T1 As1 2 T2 As2);
483impl<T0, As0, T1, As1, T2, As2, T3, As3> SerializeAs<(T0, T1, T2, T3)> for
(As0, As1, As2, As3) where As0: SerializeAs<T0>, As1: SerializeAs<T1>,
As2: SerializeAs<T2>, As3: SerializeAs<T3> {
fn serialize_as<S>(tuple: &(T0, T1, T2, T3), serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
let mut tup = serializer.serialize_tuple(4)?;
tup.serialize_element(&SerializeAsWrap::<T0, As0>::new(&tuple.0))?;
tup.serialize_element(&SerializeAsWrap::<T1, As1>::new(&tuple.1))?;
tup.serialize_element(&SerializeAsWrap::<T2, As2>::new(&tuple.2))?;
tup.serialize_element(&SerializeAsWrap::<T3, As3>::new(&tuple.3))?;
tup.end()
}
}tuple_impl!(4 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3);
484impl<T0, As0, T1, As1, T2, As2, T3, As3, T4, As4>
SerializeAs<(T0, T1, T2, T3, T4)> for (As0, As1, As2, As3, As4) where
As0: SerializeAs<T0>, As1: SerializeAs<T1>, As2: SerializeAs<T2>,
As3: SerializeAs<T3>, As4: SerializeAs<T4> {
fn serialize_as<S>(tuple: &(T0, T1, T2, T3, T4), serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
let mut tup = serializer.serialize_tuple(5)?;
tup.serialize_element(&SerializeAsWrap::<T0, As0>::new(&tuple.0))?;
tup.serialize_element(&SerializeAsWrap::<T1, As1>::new(&tuple.1))?;
tup.serialize_element(&SerializeAsWrap::<T2, As2>::new(&tuple.2))?;
tup.serialize_element(&SerializeAsWrap::<T3, As3>::new(&tuple.3))?;
tup.serialize_element(&SerializeAsWrap::<T4, As4>::new(&tuple.4))?;
tup.end()
}
}tuple_impl!(5 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3 4 T4 As4);
485impl<T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5>
SerializeAs<(T0, T1, T2, T3, T4, T5)> for (As0, As1, As2, As3, As4, As5)
where As0: SerializeAs<T0>, As1: SerializeAs<T1>, As2: SerializeAs<T2>,
As3: SerializeAs<T3>, As4: SerializeAs<T4>, As5: SerializeAs<T5> {
fn serialize_as<S>(tuple: &(T0, T1, T2, T3, T4, T5), serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
let mut tup = serializer.serialize_tuple(6)?;
tup.serialize_element(&SerializeAsWrap::<T0, As0>::new(&tuple.0))?;
tup.serialize_element(&SerializeAsWrap::<T1, As1>::new(&tuple.1))?;
tup.serialize_element(&SerializeAsWrap::<T2, As2>::new(&tuple.2))?;
tup.serialize_element(&SerializeAsWrap::<T3, As3>::new(&tuple.3))?;
tup.serialize_element(&SerializeAsWrap::<T4, As4>::new(&tuple.4))?;
tup.serialize_element(&SerializeAsWrap::<T5, As5>::new(&tuple.5))?;
tup.end()
}
}tuple_impl!(6 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3 4 T4 As4 5 T5 As5);
486impl<T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6, As6>
SerializeAs<(T0, T1, T2, T3, T4, T5, T6)> for
(As0, As1, As2, As3, As4, As5, As6) where As0: SerializeAs<T0>,
As1: SerializeAs<T1>, As2: SerializeAs<T2>, As3: SerializeAs<T3>,
As4: SerializeAs<T4>, As5: SerializeAs<T5>, As6: SerializeAs<T6> {
fn serialize_as<S>(tuple: &(T0, T1, T2, T3, T4, T5, T6), serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
let mut tup = serializer.serialize_tuple(7)?;
tup.serialize_element(&SerializeAsWrap::<T0, As0>::new(&tuple.0))?;
tup.serialize_element(&SerializeAsWrap::<T1, As1>::new(&tuple.1))?;
tup.serialize_element(&SerializeAsWrap::<T2, As2>::new(&tuple.2))?;
tup.serialize_element(&SerializeAsWrap::<T3, As3>::new(&tuple.3))?;
tup.serialize_element(&SerializeAsWrap::<T4, As4>::new(&tuple.4))?;
tup.serialize_element(&SerializeAsWrap::<T5, As5>::new(&tuple.5))?;
tup.serialize_element(&SerializeAsWrap::<T6, As6>::new(&tuple.6))?;
tup.end()
}
}tuple_impl!(7 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3 4 T4 As4 5 T5 As5 6 T6 As6);
487impl<T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6, As6, T7, As7>
SerializeAs<(T0, T1, T2, T3, T4, T5, T6, T7)> for
(As0, As1, As2, As3, As4, As5, As6, As7) where As0: SerializeAs<T0>,
As1: SerializeAs<T1>, As2: SerializeAs<T2>, As3: SerializeAs<T3>,
As4: SerializeAs<T4>, As5: SerializeAs<T5>, As6: SerializeAs<T6>,
As7: SerializeAs<T7> {
fn serialize_as<S>(tuple: &(T0, T1, T2, T3, T4, T5, T6, T7),
serializer: S) -> Result<S::Ok, S::Error> where S: Serializer {
let mut tup = serializer.serialize_tuple(8)?;
tup.serialize_element(&SerializeAsWrap::<T0, As0>::new(&tuple.0))?;
tup.serialize_element(&SerializeAsWrap::<T1, As1>::new(&tuple.1))?;
tup.serialize_element(&SerializeAsWrap::<T2, As2>::new(&tuple.2))?;
tup.serialize_element(&SerializeAsWrap::<T3, As3>::new(&tuple.3))?;
tup.serialize_element(&SerializeAsWrap::<T4, As4>::new(&tuple.4))?;
tup.serialize_element(&SerializeAsWrap::<T5, As5>::new(&tuple.5))?;
tup.serialize_element(&SerializeAsWrap::<T6, As6>::new(&tuple.6))?;
tup.serialize_element(&SerializeAsWrap::<T7, As7>::new(&tuple.7))?;
tup.end()
}
}tuple_impl!(8 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3 4 T4 As4 5 T5 As5 6 T6 As6 7 T7 As7);
488impl<T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6, As6, T7, As7,
T8, As8> SerializeAs<(T0, T1, T2, T3, T4, T5, T6, T7, T8)> for
(As0, As1, As2, As3, As4, As5, As6, As7, As8) where As0: SerializeAs<T0>,
As1: SerializeAs<T1>, As2: SerializeAs<T2>, As3: SerializeAs<T3>,
As4: SerializeAs<T4>, As5: SerializeAs<T5>, As6: SerializeAs<T6>,
As7: SerializeAs<T7>, As8: SerializeAs<T8> {
fn serialize_as<S>(tuple: &(T0, T1, T2, T3, T4, T5, T6, T7, T8),
serializer: S) -> Result<S::Ok, S::Error> where S: Serializer {
let mut tup = serializer.serialize_tuple(9)?;
tup.serialize_element(&SerializeAsWrap::<T0, As0>::new(&tuple.0))?;
tup.serialize_element(&SerializeAsWrap::<T1, As1>::new(&tuple.1))?;
tup.serialize_element(&SerializeAsWrap::<T2, As2>::new(&tuple.2))?;
tup.serialize_element(&SerializeAsWrap::<T3, As3>::new(&tuple.3))?;
tup.serialize_element(&SerializeAsWrap::<T4, As4>::new(&tuple.4))?;
tup.serialize_element(&SerializeAsWrap::<T5, As5>::new(&tuple.5))?;
tup.serialize_element(&SerializeAsWrap::<T6, As6>::new(&tuple.6))?;
tup.serialize_element(&SerializeAsWrap::<T7, As7>::new(&tuple.7))?;
tup.serialize_element(&SerializeAsWrap::<T8, As8>::new(&tuple.8))?;
tup.end()
}
}tuple_impl!(9 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3 4 T4 As4 5 T5 As5 6 T6 As6 7 T7 As7 8 T8 As8);
489impl<T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6, As6, T7, As7,
T8, As8, T9, As9> SerializeAs<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)>
for (As0, As1, As2, As3, As4, As5, As6, As7, As8, As9) where
As0: SerializeAs<T0>, As1: SerializeAs<T1>, As2: SerializeAs<T2>,
As3: SerializeAs<T3>, As4: SerializeAs<T4>, As5: SerializeAs<T5>,
As6: SerializeAs<T6>, As7: SerializeAs<T7>, As8: SerializeAs<T8>,
As9: SerializeAs<T9> {
fn serialize_as<S>(tuple: &(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9),
serializer: S) -> Result<S::Ok, S::Error> where S: Serializer {
let mut tup = serializer.serialize_tuple(10)?;
tup.serialize_element(&SerializeAsWrap::<T0, As0>::new(&tuple.0))?;
tup.serialize_element(&SerializeAsWrap::<T1, As1>::new(&tuple.1))?;
tup.serialize_element(&SerializeAsWrap::<T2, As2>::new(&tuple.2))?;
tup.serialize_element(&SerializeAsWrap::<T3, As3>::new(&tuple.3))?;
tup.serialize_element(&SerializeAsWrap::<T4, As4>::new(&tuple.4))?;
tup.serialize_element(&SerializeAsWrap::<T5, As5>::new(&tuple.5))?;
tup.serialize_element(&SerializeAsWrap::<T6, As6>::new(&tuple.6))?;
tup.serialize_element(&SerializeAsWrap::<T7, As7>::new(&tuple.7))?;
tup.serialize_element(&SerializeAsWrap::<T8, As8>::new(&tuple.8))?;
tup.serialize_element(&SerializeAsWrap::<T9, As9>::new(&tuple.9))?;
tup.end()
}
}tuple_impl!(10 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3 4 T4 As4 5 T5 As5 6 T6 As6 7 T7 As7 8 T8 As8 9 T9 As9);
490impl<T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6, As6, T7, As7,
T8, As8, T9, As9, T10, As10>
SerializeAs<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)> for
(As0, As1, As2, As3, As4, As5, As6, As7, As8, As9, As10) where
As0: SerializeAs<T0>, As1: SerializeAs<T1>, As2: SerializeAs<T2>,
As3: SerializeAs<T3>, As4: SerializeAs<T4>, As5: SerializeAs<T5>,
As6: SerializeAs<T6>, As7: SerializeAs<T7>, As8: SerializeAs<T8>,
As9: SerializeAs<T9>, As10: SerializeAs<T10> {
fn serialize_as<S>(tuple: &(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10),
serializer: S) -> Result<S::Ok, S::Error> where S: Serializer {
let mut tup = serializer.serialize_tuple(11)?;
tup.serialize_element(&SerializeAsWrap::<T0, As0>::new(&tuple.0))?;
tup.serialize_element(&SerializeAsWrap::<T1, As1>::new(&tuple.1))?;
tup.serialize_element(&SerializeAsWrap::<T2, As2>::new(&tuple.2))?;
tup.serialize_element(&SerializeAsWrap::<T3, As3>::new(&tuple.3))?;
tup.serialize_element(&SerializeAsWrap::<T4, As4>::new(&tuple.4))?;
tup.serialize_element(&SerializeAsWrap::<T5, As5>::new(&tuple.5))?;
tup.serialize_element(&SerializeAsWrap::<T6, As6>::new(&tuple.6))?;
tup.serialize_element(&SerializeAsWrap::<T7, As7>::new(&tuple.7))?;
tup.serialize_element(&SerializeAsWrap::<T8, As8>::new(&tuple.8))?;
tup.serialize_element(&SerializeAsWrap::<T9, As9>::new(&tuple.9))?;
tup.serialize_element(&SerializeAsWrap::<T10, As10>::new(&tuple.10))?;
tup.end()
}
}tuple_impl!(11 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3 4 T4 As4 5 T5 As5 6 T6 As6 7 T7 As7 8 T8 As8 9 T9 As9 10 T10 As10);
491impl<T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6, As6, T7, As7,
T8, As8, T9, As9, T10, As10, T11, As11>
SerializeAs<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)> for
(As0, As1, As2, As3, As4, As5, As6, As7, As8, As9, As10, As11) where
As0: SerializeAs<T0>, As1: SerializeAs<T1>, As2: SerializeAs<T2>,
As3: SerializeAs<T3>, As4: SerializeAs<T4>, As5: SerializeAs<T5>,
As6: SerializeAs<T6>, As7: SerializeAs<T7>, As8: SerializeAs<T8>,
As9: SerializeAs<T9>, As10: SerializeAs<T10>, As11: SerializeAs<T11> {
fn serialize_as<S>(tuple:
&(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11),
serializer: S) -> Result<S::Ok, S::Error> where S: Serializer {
let mut tup = serializer.serialize_tuple(12)?;
tup.serialize_element(&SerializeAsWrap::<T0, As0>::new(&tuple.0))?;
tup.serialize_element(&SerializeAsWrap::<T1, As1>::new(&tuple.1))?;
tup.serialize_element(&SerializeAsWrap::<T2, As2>::new(&tuple.2))?;
tup.serialize_element(&SerializeAsWrap::<T3, As3>::new(&tuple.3))?;
tup.serialize_element(&SerializeAsWrap::<T4, As4>::new(&tuple.4))?;
tup.serialize_element(&SerializeAsWrap::<T5, As5>::new(&tuple.5))?;
tup.serialize_element(&SerializeAsWrap::<T6, As6>::new(&tuple.6))?;
tup.serialize_element(&SerializeAsWrap::<T7, As7>::new(&tuple.7))?;
tup.serialize_element(&SerializeAsWrap::<T8, As8>::new(&tuple.8))?;
tup.serialize_element(&SerializeAsWrap::<T9, As9>::new(&tuple.9))?;
tup.serialize_element(&SerializeAsWrap::<T10, As10>::new(&tuple.10))?;
tup.serialize_element(&SerializeAsWrap::<T11, As11>::new(&tuple.11))?;
tup.end()
}
}tuple_impl!(12 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3 4 T4 As4 5 T5 As5 6 T6 As6 7 T7 As7 8 T8 As8 9 T9 As9 10 T10 As10 11 T11 As11);
492impl<T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6, As6, T7, As7,
T8, As8, T9, As9, T10, As10, T11, As11, T12, As12>
SerializeAs<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)> for
(As0, As1, As2, As3, As4, As5, As6, As7, As8, As9, As10, As11, As12) where
As0: SerializeAs<T0>, As1: SerializeAs<T1>, As2: SerializeAs<T2>,
As3: SerializeAs<T3>, As4: SerializeAs<T4>, As5: SerializeAs<T5>,
As6: SerializeAs<T6>, As7: SerializeAs<T7>, As8: SerializeAs<T8>,
As9: SerializeAs<T9>, As10: SerializeAs<T10>, As11: SerializeAs<T11>,
As12: SerializeAs<T12> {
fn serialize_as<S>(tuple:
&(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12),
serializer: S) -> Result<S::Ok, S::Error> where S: Serializer {
let mut tup = serializer.serialize_tuple(13)?;
tup.serialize_element(&SerializeAsWrap::<T0, As0>::new(&tuple.0))?;
tup.serialize_element(&SerializeAsWrap::<T1, As1>::new(&tuple.1))?;
tup.serialize_element(&SerializeAsWrap::<T2, As2>::new(&tuple.2))?;
tup.serialize_element(&SerializeAsWrap::<T3, As3>::new(&tuple.3))?;
tup.serialize_element(&SerializeAsWrap::<T4, As4>::new(&tuple.4))?;
tup.serialize_element(&SerializeAsWrap::<T5, As5>::new(&tuple.5))?;
tup.serialize_element(&SerializeAsWrap::<T6, As6>::new(&tuple.6))?;
tup.serialize_element(&SerializeAsWrap::<T7, As7>::new(&tuple.7))?;
tup.serialize_element(&SerializeAsWrap::<T8, As8>::new(&tuple.8))?;
tup.serialize_element(&SerializeAsWrap::<T9, As9>::new(&tuple.9))?;
tup.serialize_element(&SerializeAsWrap::<T10, As10>::new(&tuple.10))?;
tup.serialize_element(&SerializeAsWrap::<T11, As11>::new(&tuple.11))?;
tup.serialize_element(&SerializeAsWrap::<T12, As12>::new(&tuple.12))?;
tup.end()
}
}tuple_impl!(13 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3 4 T4 As4 5 T5 As5 6 T6 As6 7 T7 As7 8 T8 As8 9 T9 As9 10 T10 As10 11 T11 As11 12 T12 As12);
493impl<T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6, As6, T7, As7,
T8, As8, T9, As9, T10, As10, T11, As11, T12, As12, T13, As13>
SerializeAs<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13)>
for
(As0, As1, As2, As3, As4, As5, As6, As7, As8, As9, As10, As11, As12, As13)
where As0: SerializeAs<T0>, As1: SerializeAs<T1>, As2: SerializeAs<T2>,
As3: SerializeAs<T3>, As4: SerializeAs<T4>, As5: SerializeAs<T5>,
As6: SerializeAs<T6>, As7: SerializeAs<T7>, As8: SerializeAs<T8>,
As9: SerializeAs<T9>, As10: SerializeAs<T10>, As11: SerializeAs<T11>,
As12: SerializeAs<T12>, As13: SerializeAs<T13> {
fn serialize_as<S>(tuple:
&(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13),
serializer: S) -> Result<S::Ok, S::Error> where S: Serializer {
let mut tup = serializer.serialize_tuple(14)?;
tup.serialize_element(&SerializeAsWrap::<T0, As0>::new(&tuple.0))?;
tup.serialize_element(&SerializeAsWrap::<T1, As1>::new(&tuple.1))?;
tup.serialize_element(&SerializeAsWrap::<T2, As2>::new(&tuple.2))?;
tup.serialize_element(&SerializeAsWrap::<T3, As3>::new(&tuple.3))?;
tup.serialize_element(&SerializeAsWrap::<T4, As4>::new(&tuple.4))?;
tup.serialize_element(&SerializeAsWrap::<T5, As5>::new(&tuple.5))?;
tup.serialize_element(&SerializeAsWrap::<T6, As6>::new(&tuple.6))?;
tup.serialize_element(&SerializeAsWrap::<T7, As7>::new(&tuple.7))?;
tup.serialize_element(&SerializeAsWrap::<T8, As8>::new(&tuple.8))?;
tup.serialize_element(&SerializeAsWrap::<T9, As9>::new(&tuple.9))?;
tup.serialize_element(&SerializeAsWrap::<T10, As10>::new(&tuple.10))?;
tup.serialize_element(&SerializeAsWrap::<T11, As11>::new(&tuple.11))?;
tup.serialize_element(&SerializeAsWrap::<T12, As12>::new(&tuple.12))?;
tup.serialize_element(&SerializeAsWrap::<T13, As13>::new(&tuple.13))?;
tup.end()
}
}tuple_impl!(14 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3 4 T4 As4 5 T5 As5 6 T6 As6 7 T7 As7 8 T8 As8 9 T9 As9 10 T10 As10 11 T11 As11 12 T12 As12 13 T13 As13);
494impl<T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6, As6, T7, As7,
T8, As8, T9, As9, T10, As10, T11, As11, T12, As12, T13, As13, T14, As14>
SerializeAs<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
T14)> for
(As0, As1, As2, As3, As4, As5, As6, As7, As8, As9, As10, As11, As12, As13,
As14) where As0: SerializeAs<T0>, As1: SerializeAs<T1>,
As2: SerializeAs<T2>, As3: SerializeAs<T3>, As4: SerializeAs<T4>,
As5: SerializeAs<T5>, As6: SerializeAs<T6>, As7: SerializeAs<T7>,
As8: SerializeAs<T8>, As9: SerializeAs<T9>, As10: SerializeAs<T10>,
As11: SerializeAs<T11>, As12: SerializeAs<T12>, As13: SerializeAs<T13>,
As14: SerializeAs<T14> {
fn serialize_as<S>(tuple:
&(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
T14), serializer: S) -> Result<S::Ok, S::Error> where
S: Serializer {
let mut tup = serializer.serialize_tuple(15)?;
tup.serialize_element(&SerializeAsWrap::<T0, As0>::new(&tuple.0))?;
tup.serialize_element(&SerializeAsWrap::<T1, As1>::new(&tuple.1))?;
tup.serialize_element(&SerializeAsWrap::<T2, As2>::new(&tuple.2))?;
tup.serialize_element(&SerializeAsWrap::<T3, As3>::new(&tuple.3))?;
tup.serialize_element(&SerializeAsWrap::<T4, As4>::new(&tuple.4))?;
tup.serialize_element(&SerializeAsWrap::<T5, As5>::new(&tuple.5))?;
tup.serialize_element(&SerializeAsWrap::<T6, As6>::new(&tuple.6))?;
tup.serialize_element(&SerializeAsWrap::<T7, As7>::new(&tuple.7))?;
tup.serialize_element(&SerializeAsWrap::<T8, As8>::new(&tuple.8))?;
tup.serialize_element(&SerializeAsWrap::<T9, As9>::new(&tuple.9))?;
tup.serialize_element(&SerializeAsWrap::<T10, As10>::new(&tuple.10))?;
tup.serialize_element(&SerializeAsWrap::<T11, As11>::new(&tuple.11))?;
tup.serialize_element(&SerializeAsWrap::<T12, As12>::new(&tuple.12))?;
tup.serialize_element(&SerializeAsWrap::<T13, As13>::new(&tuple.13))?;
tup.serialize_element(&SerializeAsWrap::<T14, As14>::new(&tuple.14))?;
tup.end()
}
}tuple_impl!(15 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3 4 T4 As4 5 T5 As5 6 T6 As6 7 T7 As7 8 T8 As8 9 T9 As9 10 T10 As10 11 T11 As11 12 T12 As12 13 T13 As13 14 T14 As14);
495impl<T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6, As6, T7, As7,
T8, As8, T9, As9, T10, As10, T11, As11, T12, As12, T13, As13, T14, As14,
T15, As15>
SerializeAs<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
T14, T15)> for
(As0, As1, As2, As3, As4, As5, As6, As7, As8, As9, As10, As11, As12, As13,
As14, As15) where As0: SerializeAs<T0>, As1: SerializeAs<T1>,
As2: SerializeAs<T2>, As3: SerializeAs<T3>, As4: SerializeAs<T4>,
As5: SerializeAs<T5>, As6: SerializeAs<T6>, As7: SerializeAs<T7>,
As8: SerializeAs<T8>, As9: SerializeAs<T9>, As10: SerializeAs<T10>,
As11: SerializeAs<T11>, As12: SerializeAs<T12>, As13: SerializeAs<T13>,
As14: SerializeAs<T14>, As15: SerializeAs<T15> {
fn serialize_as<S>(tuple:
&(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
T15), serializer: S) -> Result<S::Ok, S::Error> where
S: Serializer {
let mut tup = serializer.serialize_tuple(16)?;
tup.serialize_element(&SerializeAsWrap::<T0, As0>::new(&tuple.0))?;
tup.serialize_element(&SerializeAsWrap::<T1, As1>::new(&tuple.1))?;
tup.serialize_element(&SerializeAsWrap::<T2, As2>::new(&tuple.2))?;
tup.serialize_element(&SerializeAsWrap::<T3, As3>::new(&tuple.3))?;
tup.serialize_element(&SerializeAsWrap::<T4, As4>::new(&tuple.4))?;
tup.serialize_element(&SerializeAsWrap::<T5, As5>::new(&tuple.5))?;
tup.serialize_element(&SerializeAsWrap::<T6, As6>::new(&tuple.6))?;
tup.serialize_element(&SerializeAsWrap::<T7, As7>::new(&tuple.7))?;
tup.serialize_element(&SerializeAsWrap::<T8, As8>::new(&tuple.8))?;
tup.serialize_element(&SerializeAsWrap::<T9, As9>::new(&tuple.9))?;
tup.serialize_element(&SerializeAsWrap::<T10, As10>::new(&tuple.10))?;
tup.serialize_element(&SerializeAsWrap::<T11, As11>::new(&tuple.11))?;
tup.serialize_element(&SerializeAsWrap::<T12, As12>::new(&tuple.12))?;
tup.serialize_element(&SerializeAsWrap::<T13, As13>::new(&tuple.13))?;
tup.serialize_element(&SerializeAsWrap::<T14, As14>::new(&tuple.14))?;
tup.serialize_element(&SerializeAsWrap::<T15, As15>::new(&tuple.15))?;
tup.end()
}
}tuple_impl!(16 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3 4 T4 As4 5 T5 As5 6 T6 As6 7 T7 As7 8 T8 As8 9 T9 As9 10 T10 As10 11 T11 As11 12 T12 As12 13 T13 As13 14 T14 As14 15 T15 As15);
496
497#[cfg(feature = "alloc")]
498macro_rules! map_as_tuple_seq_intern {
499 ($tyorig:ident < K, V $(, $typaram:ident : $bound:ident)* >, $ty:ident <(K, V)>) => {
500 impl<K, KAs, V, VAs $(, $typaram)*> SerializeAs<$tyorig<K, V $(, $typaram)*>> for $ty<(KAs, VAs)>
501 where
502 KAs: SerializeAs<K>,
503 VAs: SerializeAs<V>,
504 $($typaram: ?Sized + $bound,)*
505 {
506 fn serialize_as<S>(source: &$tyorig<K, V $(, $typaram)*>, serializer: S) -> Result<S::Ok, S::Error>
507 where
508 S: Serializer,
509 {
510 serializer.collect_seq(source.iter().map(|(k, v)| {
511 (
512 SerializeAsWrap::<K, KAs>::new(k),
513 SerializeAsWrap::<V, VAs>::new(v),
514 )
515 }))
516 }
517 }
518 };
519}
520#[cfg(feature = "alloc")]
521macro_rules! map_as_tuple_seq {
522 ($tyorig:ident < K, V $(, $typaram:ident : $bound:ident)* >) => {
523 map_as_tuple_seq_intern!($tyorig<K, V $(, $typaram: $bound)* >, Seq<(K, V)>);
524 #[cfg(feature = "alloc")]
525 map_as_tuple_seq_intern!($tyorig<K, V $(, $typaram: $bound)* >, Vec<(K, V)>);
526 }
527}
528impl<K, KAs, V, VAs, H> SerializeAs<IndexMap2<K, V, H>> for Vec<(KAs, VAs)>
where KAs: SerializeAs<K>, VAs: SerializeAs<V>, H: ?Sized + Sized {
fn serialize_as<S>(source: &IndexMap2<K, V, H>, serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
serializer.collect_seq(source.iter().map(|(k, v)|
{
(SerializeAsWrap::<K, KAs>::new(k),
SerializeAsWrap::<V, VAs>::new(v))
}))
}
}foreach_map!(map_as_tuple_seq);
529
530macro_rules! tuple_seq_as_map_impl_intern {
531 ($tyorig:ident < (K, V) $(, $typaram:ident : $bound:ident)* >, $ty:ident <K, V>) => {
532 #[allow(clippy::implicit_hasher)]
533 impl<K, KAs, V, VAs $(, $typaram)*> SerializeAs<$tyorig<(K, V) $(, $typaram)*>> for $ty<KAs, VAs>
534 where
535 KAs: SerializeAs<K>,
536 VAs: SerializeAs<V>,
537 $($typaram: ?Sized + $bound,)*
538 {
539 fn serialize_as<S>(source: &$tyorig<(K, V) $(, $typaram)*>, serializer: S) -> Result<S::Ok, S::Error>
540 where
541 S: Serializer,
542 {
543 serializer.collect_map(source.iter().map(|(k, v)| {
544 (
545 SerializeAsWrap::<K, KAs>::new(k),
546 SerializeAsWrap::<V, VAs>::new(v),
547 )
548 }))
549 }
550 }
551 };
552}
553macro_rules! tuple_seq_as_map_impl {
554 ($tyorig:ident < (K, V) $(, $typaram:ident : $bound:ident)* >) => {
555 tuple_seq_as_map_impl_intern!($tyorig<(K, V) $(, $typaram: $bound)* >, Map<K, V>);
556 #[cfg(feature = "alloc")]
557 tuple_seq_as_map_impl_intern!($tyorig<(K, V) $(, $typaram: $bound)* >, BTreeMap<K, V>);
558 #[cfg(feature = "std")]
559 tuple_seq_as_map_impl_intern!($tyorig<(K, V) $(, $typaram: $bound)* >, HashMap<K, V>);
560 }
561}
562#[allow(clippy :: implicit_hasher)]
impl<K, KAs, V, VAs> SerializeAs<VecDeque<(K, V)>> for HashMap<KAs, VAs> where
KAs: SerializeAs<K>, VAs: SerializeAs<V> {
fn serialize_as<S>(source: &VecDeque<(K, V)>, serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
serializer.collect_map(source.iter().map(|(k, v)|
{
(SerializeAsWrap::<K, KAs>::new(k),
SerializeAsWrap::<V, VAs>::new(v))
}))
}
}foreach_seq!(tuple_seq_as_map_impl, (K, V));
563#[allow(clippy :: implicit_hasher)]
impl<K, KAs, V, VAs> SerializeAs<Option<(K, V)>> for HashMap<KAs, VAs> where
KAs: SerializeAs<K>, VAs: SerializeAs<V> {
fn serialize_as<S>(source: &Option<(K, V)>, serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
serializer.collect_map(source.iter().map(|(k, v)|
{
(SerializeAsWrap::<K, KAs>::new(k),
SerializeAsWrap::<V, VAs>::new(v))
}))
}
}tuple_seq_as_map_impl!(Option<(K, V)>);
564
565macro_rules! tuple_seq_as_map_arr {
566 ($tyorig:ty, $ty:ident <K, V>) => {
567 #[allow(clippy::implicit_hasher)]
568 impl<K, KAs, V, VAs, const N: usize> SerializeAs<$tyorig> for $ty<KAs, VAs>
569 where
570 KAs: SerializeAs<K>,
571 VAs: SerializeAs<V>,
572 {
573 fn serialize_as<S>(source: &$tyorig, serializer: S) -> Result<S::Ok, S::Error>
574 where
575 S: Serializer,
576 {
577 serializer.collect_map(source.iter().map(|(k, v)| {
578 (
579 SerializeAsWrap::<K, KAs>::new(k),
580 SerializeAsWrap::<V, VAs>::new(v),
581 )
582 }))
583 }
584 }
585 };
586}
587#[allow(clippy :: implicit_hasher)]
impl<K, KAs, V, VAs, const N : usize> SerializeAs<[(K, V); N]> for
Map<KAs, VAs> where KAs: SerializeAs<K>, VAs: SerializeAs<V> {
fn serialize_as<S>(source: &[(K, V); N], serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
serializer.collect_map(source.iter().map(|(k, v)|
{
(SerializeAsWrap::<K, KAs>::new(k),
SerializeAsWrap::<V, VAs>::new(v))
}))
}
}tuple_seq_as_map_arr!([(K, V); N], Map<K, V>);
588#[cfg(feature = "alloc")]
589#[allow(clippy :: implicit_hasher)]
impl<K, KAs, V, VAs, const N : usize> SerializeAs<[(K, V); N]> for
BTreeMap<KAs, VAs> where KAs: SerializeAs<K>, VAs: SerializeAs<V> {
fn serialize_as<S>(source: &[(K, V); N], serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
serializer.collect_map(source.iter().map(|(k, v)|
{
(SerializeAsWrap::<K, KAs>::new(k),
SerializeAsWrap::<V, VAs>::new(v))
}))
}
}tuple_seq_as_map_arr!([(K, V); N], BTreeMap<K, V>);
590#[cfg(feature = "std")]
591#[allow(clippy :: implicit_hasher)]
impl<K, KAs, V, VAs, const N : usize> SerializeAs<[(K, V); N]> for
HashMap<KAs, VAs> where KAs: SerializeAs<K>, VAs: SerializeAs<V> {
fn serialize_as<S>(source: &[(K, V); N], serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
serializer.collect_map(source.iter().map(|(k, v)|
{
(SerializeAsWrap::<K, KAs>::new(k),
SerializeAsWrap::<V, VAs>::new(v))
}))
}
}tuple_seq_as_map_arr!([(K, V); N], HashMap<K, V>);
592
593impl<T> SerializeAs<T> for Same
598where
599 T: Serialize + ?Sized,
600{
601 fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>
602 where
603 S: Serializer,
604 {
605 source.serialize(serializer)
606 }
607}
608
609impl<T> SerializeAs<T> for DisplayFromStr
610where
611 T: Display,
612{
613 fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>
614 where
615 S: Serializer,
616 {
617 serializer.collect_str(source)
618 }
619}
620
621impl<T, H, F> SerializeAs<T> for IfIsHumanReadable<H, F>
622where
623 T: ?Sized,
624 H: SerializeAs<T>,
625 F: SerializeAs<T>,
626{
627 fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>
628 where
629 S: Serializer,
630 {
631 if serializer.is_human_readable() {
632 H::serialize_as(source, serializer)
633 } else {
634 F::serialize_as(source, serializer)
635 }
636 }
637}
638
639impl<T> SerializeAs<Option<T>> for NoneAsEmptyString
640where
641 T: Display,
642{
643 fn serialize_as<S>(source: &Option<T>, serializer: S) -> Result<S::Ok, S::Error>
644 where
645 S: Serializer,
646 {
647 if let Some(value) = source {
648 serializer.collect_str(value)
649 } else {
650 serializer.serialize_str("")
651 }
652 }
653}
654
655#[cfg(feature = "alloc")]
656impl<T, TAs> SerializeAs<T> for DefaultOnError<TAs>
657where
658 TAs: SerializeAs<T>,
659{
660 fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>
661 where
662 S: Serializer,
663 {
664 TAs::serialize_as(source, serializer)
665 }
666}
667
668#[cfg(feature = "alloc")]
669impl SerializeAs<Vec<u8>> for BytesOrString {
670 fn serialize_as<S>(source: &Vec<u8>, serializer: S) -> Result<S::Ok, S::Error>
671 where
672 S: Serializer,
673 {
674 source.serialize(serializer)
675 }
676}
677
678impl<SEPARATOR, I, T> SerializeAs<I> for StringWithSeparator<SEPARATOR, T>
679where
680 SEPARATOR: formats::Separator,
681 for<'x> &'x I: IntoIterator<Item = &'x T>,
682 T: Display,
683 {
689 fn serialize_as<S>(source: &I, serializer: S) -> Result<S::Ok, S::Error>
690 where
691 S: Serializer,
692 {
693 pub(crate) struct DisplayWithSeparator<'a, I, SEPARATOR>(&'a I, PhantomData<SEPARATOR>);
694
695 impl<'a, I, SEPARATOR> DisplayWithSeparator<'a, I, SEPARATOR> {
696 pub(crate) fn new(iter: &'a I) -> Self {
697 Self(iter, PhantomData)
698 }
699 }
700
701 impl<'a, I, SEPARATOR> Display for DisplayWithSeparator<'a, I, SEPARATOR>
702 where
703 SEPARATOR: formats::Separator,
704 &'a I: IntoIterator,
705 <&'a I as IntoIterator>::Item: Display,
706 {
707 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
708 let mut iter = self.0.into_iter();
709
710 if let Some(first) = iter.next() {
711 first.fmt(f)?;
712 }
713 for elem in iter {
714 f.write_str(SEPARATOR::separator())?;
715 elem.fmt(f)?;
716 }
717
718 Ok(())
719 }
720 }
721
722 serializer.collect_str(&DisplayWithSeparator::<I, SEPARATOR>::new(source))
723 }
724}
725
726macro_rules! use_signed_duration {
727 (
728 $main_trait:ident $internal_trait:ident =>
729 {
730 $ty:ty =>
731 $({
732 $format:ty, $strictness:ty =>
733 $($tbound:ident: $bound:ident $(,)?)*
734 })*
735 }
736 ) => {
737 $(
738 impl<$($tbound,)*> SerializeAs<$ty> for $main_trait<$format, $strictness>
739 where
740 $($tbound: $bound,)*
741 {
742 fn serialize_as<S>(source: &$ty, serializer: S) -> Result<S::Ok, S::Error>
743 where
744 S: Serializer,
745 {
746 $internal_trait::<$format, $strictness>::serialize_as(
747 &DurationSigned::from(source),
748 serializer,
749 )
750 }
751 }
752 )*
753 };
754 (
755 $( $main_trait:ident $internal_trait:ident, )+ => $rest:tt
756 ) => {
757 $( use_signed_duration!($main_trait $internal_trait => $rest); )+
758 };
759}
760
761impl<STRICTNESS> SerializeAs<Duration> for
DurationNanoSeconds<f64, STRICTNESS> where STRICTNESS: Strictness {
fn serialize_as<S>(source: &Duration, serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
DurationNanoSeconds::<f64,
STRICTNESS>::serialize_as(&DurationSigned::from(source),
serializer)
}
}use_signed_duration!(
762 DurationSeconds DurationSeconds,
763 DurationMilliSeconds DurationMilliSeconds,
764 DurationMicroSeconds DurationMicroSeconds,
765 DurationNanoSeconds DurationNanoSeconds,
766 => {
767 Duration =>
768 {u64, STRICTNESS => STRICTNESS: Strictness}
769 {f64, STRICTNESS => STRICTNESS: Strictness}
770 }
771);
772#[cfg(feature = "alloc")]
773impl<STRICTNESS> SerializeAs<Duration> for
DurationNanoSeconds<String, STRICTNESS> where STRICTNESS: Strictness {
fn serialize_as<S>(source: &Duration, serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
DurationNanoSeconds::<String,
STRICTNESS>::serialize_as(&DurationSigned::from(source),
serializer)
}
}use_signed_duration!(
774 DurationSeconds DurationSeconds,
775 DurationMilliSeconds DurationMilliSeconds,
776 DurationMicroSeconds DurationMicroSeconds,
777 DurationNanoSeconds DurationNanoSeconds,
778 => {
779 Duration =>
780 {String, STRICTNESS => STRICTNESS: Strictness}
781 }
782);
783impl<STRICTNESS> SerializeAs<Duration> for
DurationNanoSecondsWithFrac<f64, STRICTNESS> where STRICTNESS: Strictness
{
fn serialize_as<S>(source: &Duration, serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
DurationNanoSecondsWithFrac::<f64,
STRICTNESS>::serialize_as(&DurationSigned::from(source),
serializer)
}
}use_signed_duration!(
784 DurationSecondsWithFrac DurationSecondsWithFrac,
785 DurationMilliSecondsWithFrac DurationMilliSecondsWithFrac,
786 DurationMicroSecondsWithFrac DurationMicroSecondsWithFrac,
787 DurationNanoSecondsWithFrac DurationNanoSecondsWithFrac,
788 => {
789 Duration =>
790 {f64, STRICTNESS => STRICTNESS: Strictness}
791 }
792);
793#[cfg(feature = "alloc")]
794impl<STRICTNESS> SerializeAs<Duration> for
DurationNanoSecondsWithFrac<String, STRICTNESS> where
STRICTNESS: Strictness {
fn serialize_as<S>(source: &Duration, serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
DurationNanoSecondsWithFrac::<String,
STRICTNESS>::serialize_as(&DurationSigned::from(source),
serializer)
}
}use_signed_duration!(
795 DurationSecondsWithFrac DurationSecondsWithFrac,
796 DurationMilliSecondsWithFrac DurationMilliSecondsWithFrac,
797 DurationMicroSecondsWithFrac DurationMicroSecondsWithFrac,
798 DurationNanoSecondsWithFrac DurationNanoSecondsWithFrac,
799 => {
800 Duration =>
801 {String, STRICTNESS => STRICTNESS: Strictness}
802 }
803);
804
805#[cfg(feature = "std")]
806impl<STRICTNESS> SerializeAs<SystemTime> for
TimestampNanoSeconds<String, STRICTNESS> where STRICTNESS: Strictness {
fn serialize_as<S>(source: &SystemTime, serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
DurationNanoSeconds::<String,
STRICTNESS>::serialize_as(&DurationSigned::from(source),
serializer)
}
}use_signed_duration!(
807 TimestampSeconds DurationSeconds,
808 TimestampMilliSeconds DurationMilliSeconds,
809 TimestampMicroSeconds DurationMicroSeconds,
810 TimestampNanoSeconds DurationNanoSeconds,
811 => {
812 SystemTime =>
813 {i64, STRICTNESS => STRICTNESS: Strictness}
814 {f64, STRICTNESS => STRICTNESS: Strictness}
815 {String, STRICTNESS => STRICTNESS: Strictness}
816 }
817);
818#[cfg(feature = "std")]
819impl<STRICTNESS> SerializeAs<SystemTime> for
TimestampNanoSecondsWithFrac<String, STRICTNESS> where
STRICTNESS: Strictness {
fn serialize_as<S>(source: &SystemTime, serializer: S)
-> Result<S::Ok, S::Error> where S: Serializer {
DurationNanoSecondsWithFrac::<String,
STRICTNESS>::serialize_as(&DurationSigned::from(source),
serializer)
}
}use_signed_duration!(
820 TimestampSecondsWithFrac DurationSecondsWithFrac,
821 TimestampMilliSecondsWithFrac DurationMilliSecondsWithFrac,
822 TimestampMicroSecondsWithFrac DurationMicroSecondsWithFrac,
823 TimestampNanoSecondsWithFrac DurationNanoSecondsWithFrac,
824 => {
825 SystemTime =>
826 {f64, STRICTNESS => STRICTNESS: Strictness}
827 {String, STRICTNESS => STRICTNESS: Strictness}
828 }
829);
830
831impl<T, U> SerializeAs<T> for DefaultOnNull<U>
832where
833 U: SerializeAs<T>,
834{
835 fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>
836 where
837 S: Serializer,
838 {
839 serializer.serialize_some(&SerializeAsWrap::<T, U>::new(source))
840 }
841}
842
843impl SerializeAs<&[u8]> for Bytes {
844 fn serialize_as<S>(bytes: &&[u8], serializer: S) -> Result<S::Ok, S::Error>
845 where
846 S: Serializer,
847 {
848 serializer.serialize_bytes(bytes)
849 }
850}
851
852#[cfg(feature = "alloc")]
853impl SerializeAs<Vec<u8>> for Bytes {
854 fn serialize_as<S>(bytes: &Vec<u8>, serializer: S) -> Result<S::Ok, S::Error>
855 where
856 S: Serializer,
857 {
858 serializer.serialize_bytes(bytes)
859 }
860}
861
862#[cfg(feature = "alloc")]
863impl SerializeAs<Box<[u8]>> for Bytes {
864 fn serialize_as<S>(bytes: &Box<[u8]>, serializer: S) -> Result<S::Ok, S::Error>
865 where
866 S: Serializer,
867 {
868 serializer.serialize_bytes(bytes)
869 }
870}
871
872#[cfg(feature = "alloc")]
873impl<'a> SerializeAs<Cow<'a, [u8]>> for Bytes {
874 fn serialize_as<S>(bytes: &Cow<'a, [u8]>, serializer: S) -> Result<S::Ok, S::Error>
875 where
876 S: Serializer,
877 {
878 serializer.serialize_bytes(bytes)
879 }
880}
881
882impl<const N: usize> SerializeAs<[u8; N]> for Bytes {
883 fn serialize_as<S>(bytes: &[u8; N], serializer: S) -> Result<S::Ok, S::Error>
884 where
885 S: Serializer,
886 {
887 serializer.serialize_bytes(bytes)
888 }
889}
890
891impl<const N: usize> SerializeAs<&[u8; N]> for Bytes {
892 fn serialize_as<S>(bytes: &&[u8; N], serializer: S) -> Result<S::Ok, S::Error>
893 where
894 S: Serializer,
895 {
896 serializer.serialize_bytes(*bytes)
897 }
898}
899
900#[cfg(feature = "alloc")]
901impl<const N: usize> SerializeAs<Box<[u8; N]>> for Bytes {
902 fn serialize_as<S>(bytes: &Box<[u8; N]>, serializer: S) -> Result<S::Ok, S::Error>
903 where
904 S: Serializer,
905 {
906 serializer.serialize_bytes(&**bytes)
907 }
908}
909
910#[cfg(feature = "alloc")]
911impl<'a, const N: usize> SerializeAs<Cow<'a, [u8; N]>> for Bytes {
912 fn serialize_as<S>(bytes: &Cow<'a, [u8; N]>, serializer: S) -> Result<S::Ok, S::Error>
913 where
914 S: Serializer,
915 {
916 serializer.serialize_bytes(bytes.as_ref())
917 }
918}
919
920#[cfg(feature = "alloc")]
921impl<T, U> SerializeAs<Vec<T>> for OneOrMany<U, formats::PreferOne>
922where
923 U: SerializeAs<T>,
924{
925 fn serialize_as<S>(source: &Vec<T>, serializer: S) -> Result<S::Ok, S::Error>
926 where
927 S: Serializer,
928 {
929 match source.len() {
930 1 => SerializeAsWrap::<T, U>::new(source.iter().next().expect("Cannot be empty"))
931 .serialize(serializer),
932 _ => SerializeAsWrap::<Vec<T>, Vec<U>>::new(source).serialize(serializer),
933 }
934 }
935}
936
937#[cfg(feature = "alloc")]
938impl<T, U> SerializeAs<Vec<T>> for OneOrMany<U, formats::PreferMany>
939where
940 U: SerializeAs<T>,
941{
942 fn serialize_as<S>(source: &Vec<T>, serializer: S) -> Result<S::Ok, S::Error>
943 where
944 S: Serializer,
945 {
946 SerializeAsWrap::<Vec<T>, Vec<U>>::new(source).serialize(serializer)
947 }
948}
949
950#[cfg(feature = "alloc")]
951impl<T, TAs1> SerializeAs<T> for PickFirst<(TAs1,)>
952where
953 TAs1: SerializeAs<T>,
954{
955 fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>
956 where
957 S: Serializer,
958 {
959 SerializeAsWrap::<T, TAs1>::new(source).serialize(serializer)
960 }
961}
962
963#[cfg(feature = "alloc")]
964impl<T, TAs1, TAs2> SerializeAs<T> for PickFirst<(TAs1, TAs2)>
965where
966 TAs1: SerializeAs<T>,
967{
968 fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>
969 where
970 S: Serializer,
971 {
972 SerializeAsWrap::<T, TAs1>::new(source).serialize(serializer)
973 }
974}
975
976#[cfg(feature = "alloc")]
977impl<T, TAs1, TAs2, TAs3> SerializeAs<T> for PickFirst<(TAs1, TAs2, TAs3)>
978where
979 TAs1: SerializeAs<T>,
980{
981 fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>
982 where
983 S: Serializer,
984 {
985 SerializeAsWrap::<T, TAs1>::new(source).serialize(serializer)
986 }
987}
988
989#[cfg(feature = "alloc")]
990impl<T, TAs1, TAs2, TAs3, TAs4> SerializeAs<T> for PickFirst<(TAs1, TAs2, TAs3, TAs4)>
991where
992 TAs1: SerializeAs<T>,
993{
994 fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>
995 where
996 S: Serializer,
997 {
998 SerializeAsWrap::<T, TAs1>::new(source).serialize(serializer)
999 }
1000}
1001
1002impl<T, U> SerializeAs<T> for FromInto<U>
1003where
1004 T: Into<U> + Clone,
1005 U: Serialize,
1006{
1007 fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>
1008 where
1009 S: Serializer,
1010 {
1011 source.clone().into().serialize(serializer)
1012 }
1013}
1014
1015impl<T, U> SerializeAs<T> for TryFromInto<U>
1016where
1017 T: TryInto<U> + Clone,
1018 <T as TryInto<U>>::Error: Display,
1019 U: Serialize,
1020{
1021 fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>
1022 where
1023 S: Serializer,
1024 {
1025 source
1026 .clone()
1027 .try_into()
1028 .map_err(S::Error::custom)?
1029 .serialize(serializer)
1030 }
1031}
1032
1033impl<T, U> SerializeAs<T> for FromIntoRef<U>
1034where
1035 for<'a> &'a T: Into<U>,
1036 U: Serialize,
1037{
1038 fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>
1039 where
1040 S: Serializer,
1041 {
1042 source.into().serialize(serializer)
1043 }
1044}
1045
1046impl<T, U> SerializeAs<T> for TryFromIntoRef<U>
1047where
1048 for<'a> &'a T: TryInto<U>,
1049 for<'a> <&'a T as TryInto<U>>::Error: Display,
1050 U: Serialize,
1051{
1052 fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>
1053 where
1054 S: Serializer,
1055 {
1056 source
1057 .try_into()
1058 .map_err(S::Error::custom)?
1059 .serialize(serializer)
1060 }
1061}
1062
1063#[cfg(feature = "alloc")]
1064impl<'a> SerializeAs<Cow<'a, str>> for BorrowCow {
1065 fn serialize_as<S>(source: &Cow<'a, str>, serializer: S) -> Result<S::Ok, S::Error>
1066 where
1067 S: Serializer,
1068 {
1069 serializer.serialize_str(source)
1070 }
1071}
1072
1073#[cfg(feature = "alloc")]
1074impl<'a> SerializeAs<Cow<'a, [u8]>> for BorrowCow {
1075 fn serialize_as<S>(value: &Cow<'a, [u8]>, serializer: S) -> Result<S::Ok, S::Error>
1076 where
1077 S: Serializer,
1078 {
1079 serializer.collect_seq(value.iter())
1080 }
1081}
1082
1083#[cfg(feature = "alloc")]
1084impl<'a, const N: usize> SerializeAs<Cow<'a, [u8; N]>> for BorrowCow {
1085 fn serialize_as<S>(value: &Cow<'a, [u8; N]>, serializer: S) -> Result<S::Ok, S::Error>
1086 where
1087 S: Serializer,
1088 {
1089 serializer.collect_seq(value.iter())
1090 }
1091}
1092
1093impl<STRICTNESS: Strictness> SerializeAs<bool> for BoolFromInt<STRICTNESS> {
1094 fn serialize_as<S>(source: &bool, serializer: S) -> Result<S::Ok, S::Error>
1095 where
1096 S: Serializer,
1097 {
1098 serializer.serialize_u8(u8::from(*source))
1099 }
1100}
1101
1102