1pub(crate) use self::macros::*;
2use crate::{formats::*, 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#[cfg(feature = "smallvec_1")]
14use smallvec_1::SmallVec;
15
16#[cfg(feature = "alloc")]
20type BoxedSlice<T> = Box<[T]>;
21
22pub(crate) mod macros {
23 #![allow(unused_imports)]
26
27 macro_rules! foreach_map {
28 ($m:ident) => {
29 #[cfg(feature = "alloc")]
30 $m!(BTreeMap<K: Ord, V>, (|_size| BTreeMap::new()));
31 #[cfg(feature = "std")]
32 $m!(
33 HashMap<K: Eq + Hash, V, S: BuildHasher + Default>,
34 (|size| HashMap::with_capacity_and_hasher(size, Default::default()))
35 );
36 #[cfg(feature = "hashbrown_0_14")]
37 $m!(
38 HashbrownMap014<K: Eq + Hash, V, S: BuildHasher + Default>,
39 (|size| HashbrownMap014::with_capacity_and_hasher(size, Default::default()))
40 );
41 #[cfg(feature = "hashbrown_0_15")]
42 $m!(
43 HashbrownMap015<K: Eq + Hash, V, S: BuildHasher + Default>,
44 (|size| HashbrownMap015::with_capacity_and_hasher(size, Default::default()))
45 );
46 #[cfg(feature = "hashbrown_0_16")]
47 $m!(
48 HashbrownMap016<K: Eq + Hash, V, S: BuildHasher + Default>,
49 (|size| HashbrownMap016::with_capacity_and_hasher(size, Default::default()))
50 );
51 #[cfg(feature = "indexmap_1")]
52 $m!(
53 IndexMap<K: Eq + Hash, V, S: BuildHasher + Default>,
54 (|size| IndexMap::with_capacity_and_hasher(size, Default::default()))
55 );
56 #[cfg(feature = "indexmap_2")]
57 $m!(
58 IndexMap2<K: Eq + Hash, V, S: BuildHasher + Default>,
59 (|size| IndexMap2::with_capacity_and_hasher(size, Default::default()))
60 );
61 };
62 }
63
64 macro_rules! foreach_set {
65 ($m:ident) => {
66 #[cfg(feature = "alloc")]
67 $m!(BTreeSet<T: Ord>, (|_| BTreeSet::new()), insert);
68 #[cfg(feature = "std")]
69 $m!(
70 HashSet<T: Eq + Hash, S: BuildHasher + Default>,
71 (|size| HashSet::with_capacity_and_hasher(size, S::default())),
72 insert
73 );
74 #[cfg(feature = "hashbrown_0_14")]
75 $m!(
76 HashbrownSet014<T: Eq + Hash, S: BuildHasher + Default>,
77 (|size| HashbrownSet014::with_capacity_and_hasher(size, S::default())),
78 insert
79 );
80 #[cfg(feature = "hashbrown_0_15")]
81 $m!(
82 HashbrownSet015<T: Eq + Hash, S: BuildHasher + Default>,
83 (|size| HashbrownSet015::with_capacity_and_hasher(size, S::default())),
84 insert
85 );
86 #[cfg(feature = "hashbrown_0_16")]
87 $m!(
88 HashbrownSet016<T: Eq + Hash, S: BuildHasher + Default>,
89 (|size| HashbrownSet016::with_capacity_and_hasher(size, S::default())),
90 insert
91 );
92 #[cfg(feature = "indexmap_1")]
93 $m!(
94 IndexSet<T: Eq + Hash, S: BuildHasher + Default>,
95 (|size| IndexSet::with_capacity_and_hasher(size, S::default())),
96 insert
97 );
98 #[cfg(feature = "indexmap_2")]
99 $m!(
100 IndexSet2<T: Eq + Hash, S: BuildHasher + Default>,
101 (|size| IndexSet2::with_capacity_and_hasher(size, S::default())),
102 insert
103 );
104 };
105 }
106
107 macro_rules! foreach_seq {
108 ($m:ident) => {
109 foreach_set!($m);
110
111 #[cfg(feature = "alloc")]
112 $m!(
113 BinaryHeap<T: Ord>,
114 (|size| BinaryHeap::with_capacity(size)),
115 push
116 );
117 #[cfg(feature = "alloc")]
118 $m!(BoxedSlice<T>, (|size| Vec::with_capacity(size)), push);
119 #[cfg(feature = "alloc")]
120 $m!(LinkedList<T>, (|_| LinkedList::new()), push_back);
121 #[cfg(feature = "alloc")]
122 $m!(Vec<T>, (|size| Vec::with_capacity(size)), push);
123 #[cfg(feature = "alloc")]
124 $m!(
125 VecDeque<T>,
126 (|size| VecDeque::with_capacity(size)),
127 push_back
128 );
129 };
130 }
131
132 pub(crate) use foreach_map;
134 pub(crate) use foreach_seq;
135 pub(crate) use foreach_set;
136}
137
138#[allow(unused_macros)]
142macro_rules! pinned_wrapper {
143 ($wrapper:ident) => {
144 impl<'de, T, U> DeserializeAs<'de, Pin<$wrapper<T>>> for Pin<$wrapper<U>>
145 where
146 U: DeserializeAs<'de, T>,
147 {
148 fn deserialize_as<D>(deserializer: D) -> Result<Pin<$wrapper<T>>, D::Error>
149 where
150 D: Deserializer<'de>,
151 {
152 Ok($wrapper::pin(
153 DeserializeAsWrap::<T, U>::deserialize(deserializer)?.into_inner(),
154 ))
155 }
156 }
157 };
158}
159
160#[cfg(feature = "alloc")]
161impl<'de, T, U> DeserializeAs<'de, Box<T>> for Box<U>
162where
163 U: DeserializeAs<'de, T>,
164{
165 fn deserialize_as<D>(deserializer: D) -> Result<Box<T>, D::Error>
166 where
167 D: Deserializer<'de>,
168 {
169 Ok(Box::new(
170 DeserializeAsWrap::<T, U>::deserialize(deserializer)?.into_inner(),
171 ))
172 }
173}
174
175#[cfg(feature = "alloc")]
176impl<'de, T, U> DeserializeAs<'de, Pin<Box<T>>> for Pin<Box<U>> where
U: DeserializeAs<'de, T> {
fn deserialize_as<D>(deserializer: D) -> Result<Pin<Box<T>>, D::Error>
where D: Deserializer<'de> {
Ok(Box::pin(DeserializeAsWrap::<T,
U>::deserialize(deserializer)?.into_inner()))
}
}pinned_wrapper!(Box);
177
178impl<'de, T, U> DeserializeAs<'de, Option<T>> for Option<U>
179where
180 U: DeserializeAs<'de, T>,
181{
182 fn deserialize_as<D>(deserializer: D) -> Result<Option<T>, D::Error>
183 where
184 D: Deserializer<'de>,
185 {
186 struct OptionVisitor<T, U>(PhantomData<(T, U)>);
187
188 impl<'de, T, U> Visitor<'de> for OptionVisitor<T, U>
189 where
190 U: DeserializeAs<'de, T>,
191 {
192 type Value = Option<T>;
193
194 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
195 formatter.write_str("option")
196 }
197
198 #[inline]
199 fn visit_unit<E>(self) -> Result<Self::Value, E>
200 where
201 E: DeError,
202 {
203 Ok(None)
204 }
205
206 #[inline]
207 fn visit_none<E>(self) -> Result<Self::Value, E>
208 where
209 E: DeError,
210 {
211 Ok(None)
212 }
213
214 #[inline]
215 fn visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
216 where
217 D: Deserializer<'de>,
218 {
219 U::deserialize_as(deserializer).map(Some)
220 }
221 }
222
223 deserializer.deserialize_option(OptionVisitor::<T, U>(PhantomData))
224 }
225}
226
227impl<'de, T, U> DeserializeAs<'de, Bound<T>> for Bound<U>
228where
229 U: DeserializeAs<'de, T>,
230{
231 fn deserialize_as<D>(deserializer: D) -> Result<Bound<T>, D::Error>
232 where
233 D: Deserializer<'de>,
234 {
235 Ok(
236 match Bound::<DeserializeAsWrap<T, U>>::deserialize(deserializer)? {
237 Bound::Unbounded => Bound::Unbounded,
238 Bound::Included(v) => Bound::Included(v.into_inner()),
239 Bound::Excluded(v) => Bound::Excluded(v.into_inner()),
240 },
241 )
242 }
243}
244
245#[cfg(feature = "alloc")]
246impl<'de, T, U> DeserializeAs<'de, Rc<T>> for Rc<U>
247where
248 U: DeserializeAs<'de, T>,
249{
250 fn deserialize_as<D>(deserializer: D) -> Result<Rc<T>, D::Error>
251 where
252 D: Deserializer<'de>,
253 {
254 Ok(Rc::new(
255 DeserializeAsWrap::<T, U>::deserialize(deserializer)?.into_inner(),
256 ))
257 }
258}
259
260#[cfg(feature = "alloc")]
261impl<'de, T, U> DeserializeAs<'de, Pin<Rc<T>>> for Pin<Rc<U>> where
U: DeserializeAs<'de, T> {
fn deserialize_as<D>(deserializer: D) -> Result<Pin<Rc<T>>, D::Error>
where D: Deserializer<'de> {
Ok(Rc::pin(DeserializeAsWrap::<T,
U>::deserialize(deserializer)?.into_inner()))
}
}pinned_wrapper!(Rc);
262
263#[cfg(feature = "alloc")]
264impl<'de, T, U> DeserializeAs<'de, RcWeak<T>> for RcWeak<U>
265where
266 U: DeserializeAs<'de, T>,
267{
268 fn deserialize_as<D>(deserializer: D) -> Result<RcWeak<T>, D::Error>
269 where
270 D: Deserializer<'de>,
271 {
272 DeserializeAsWrap::<Option<Rc<T>>, Option<Rc<U>>>::deserialize(deserializer)?;
273 Ok(RcWeak::new())
274 }
275}
276
277#[cfg(all(feature = "alloc", target_has_atomic = "ptr"))]
278impl<'de, T, U> DeserializeAs<'de, Arc<T>> for Arc<U>
279where
280 U: DeserializeAs<'de, T>,
281{
282 fn deserialize_as<D>(deserializer: D) -> Result<Arc<T>, D::Error>
283 where
284 D: Deserializer<'de>,
285 {
286 Ok(Arc::new(
287 DeserializeAsWrap::<T, U>::deserialize(deserializer)?.into_inner(),
288 ))
289 }
290}
291
292#[cfg(all(feature = "alloc", target_has_atomic = "ptr"))]
293impl<'de, T, U> DeserializeAs<'de, Pin<Arc<T>>> for Pin<Arc<U>> where
U: DeserializeAs<'de, T> {
fn deserialize_as<D>(deserializer: D) -> Result<Pin<Arc<T>>, D::Error>
where D: Deserializer<'de> {
Ok(Arc::pin(DeserializeAsWrap::<T,
U>::deserialize(deserializer)?.into_inner()))
}
}pinned_wrapper!(Arc);
294
295#[cfg(all(feature = "alloc", target_has_atomic = "ptr"))]
296impl<'de, T, U> DeserializeAs<'de, ArcWeak<T>> for ArcWeak<U>
297where
298 U: DeserializeAs<'de, T>,
299{
300 fn deserialize_as<D>(deserializer: D) -> Result<ArcWeak<T>, D::Error>
301 where
302 D: Deserializer<'de>,
303 {
304 DeserializeAsWrap::<Option<Arc<T>>, Option<Arc<U>>>::deserialize(deserializer)?;
305 Ok(ArcWeak::new())
306 }
307}
308
309impl<'de, T, U> DeserializeAs<'de, Cell<T>> for Cell<U>
310where
311 U: DeserializeAs<'de, T>,
312{
313 fn deserialize_as<D>(deserializer: D) -> Result<Cell<T>, D::Error>
314 where
315 D: Deserializer<'de>,
316 {
317 Ok(Cell::new(
318 DeserializeAsWrap::<T, U>::deserialize(deserializer)?.into_inner(),
319 ))
320 }
321}
322
323impl<'de, T, U> DeserializeAs<'de, RefCell<T>> for RefCell<U>
324where
325 U: DeserializeAs<'de, T>,
326{
327 fn deserialize_as<D>(deserializer: D) -> Result<RefCell<T>, D::Error>
328 where
329 D: Deserializer<'de>,
330 {
331 Ok(RefCell::new(
332 DeserializeAsWrap::<T, U>::deserialize(deserializer)?.into_inner(),
333 ))
334 }
335}
336
337#[cfg(feature = "std")]
338impl<'de, T, U> DeserializeAs<'de, Mutex<T>> for Mutex<U>
339where
340 U: DeserializeAs<'de, T>,
341{
342 fn deserialize_as<D>(deserializer: D) -> Result<Mutex<T>, D::Error>
343 where
344 D: Deserializer<'de>,
345 {
346 Ok(Mutex::new(
347 DeserializeAsWrap::<T, U>::deserialize(deserializer)?.into_inner(),
348 ))
349 }
350}
351
352#[cfg(feature = "std")]
353impl<'de, T, U> DeserializeAs<'de, RwLock<T>> for RwLock<U>
354where
355 U: DeserializeAs<'de, T>,
356{
357 fn deserialize_as<D>(deserializer: D) -> Result<RwLock<T>, D::Error>
358 where
359 D: Deserializer<'de>,
360 {
361 Ok(RwLock::new(
362 DeserializeAsWrap::<T, U>::deserialize(deserializer)?.into_inner(),
363 ))
364 }
365}
366
367impl<'de, T, TAs, E, EAs> DeserializeAs<'de, Result<T, E>> for Result<TAs, EAs>
368where
369 TAs: DeserializeAs<'de, T>,
370 EAs: DeserializeAs<'de, E>,
371{
372 fn deserialize_as<D>(deserializer: D) -> Result<Result<T, E>, D::Error>
373 where
374 D: Deserializer<'de>,
375 {
376 Ok(
377 match Result::<DeserializeAsWrap<T, TAs>, DeserializeAsWrap<E, EAs>>::deserialize(
378 deserializer,
379 )? {
380 Ok(value) => Ok(value.into_inner()),
381 Err(err) => Err(err.into_inner()),
382 },
383 )
384 }
385}
386
387impl<'de, T, As, const N: usize> DeserializeAs<'de, [T; N]> for [As; N]
388where
389 As: DeserializeAs<'de, T>,
390{
391 fn deserialize_as<D>(deserializer: D) -> Result<[T; N], D::Error>
392 where
393 D: Deserializer<'de>,
394 {
395 struct ArrayVisitor<T, const M: usize>(PhantomData<T>);
396
397 impl<'de, T, As, const M: usize> Visitor<'de> for ArrayVisitor<DeserializeAsWrap<T, As>, M>
398 where
399 As: DeserializeAs<'de, T>,
400 {
401 type Value = [T; M];
402
403 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
404 formatter.write_fmt(format_args!("an array of size {0}", M)format_args!("an array of size {M}"))
405 }
406
407 fn visit_seq<A>(self, seq: A) -> Result<Self::Value, A::Error>
408 where
409 A: SeqAccess<'de>,
410 {
411 utils::array_from_iterator(
412 utils::SeqIter::new(seq).map(
413 |res: Result<DeserializeAsWrap<T, As>, A::Error>| {
414 res.map(DeserializeAsWrap::into_inner)
415 },
416 ),
417 &self,
418 )
419 }
420 }
421
422 deserializer.deserialize_tuple(N, ArrayVisitor::<DeserializeAsWrap<T, As>, N>(PhantomData))
423 }
424}
425
426impl<'de, Idx, IdxAs> DeserializeAs<'de, Range<Idx>> for Range<IdxAs>
431where
432 IdxAs: DeserializeAs<'de, Idx>,
433{
434 fn deserialize_as<D>(deserializer: D) -> Result<Range<Idx>, D::Error>
435 where
436 D: Deserializer<'de>,
437 {
438 let Range::<DeserializeAsWrap<Idx, IdxAs>> { start, end } =
439 Deserialize::deserialize(deserializer)?;
440
441 Ok(Range {
442 start: start.into_inner(),
443 end: end.into_inner(),
444 })
445 }
446}
447
448impl<'de, Idx, IdxAs> DeserializeAs<'de, RangeFrom<Idx>> for RangeFrom<IdxAs>
449where
450 IdxAs: DeserializeAs<'de, Idx>,
451{
452 fn deserialize_as<D>(deserializer: D) -> Result<RangeFrom<Idx>, D::Error>
453 where
454 D: Deserializer<'de>,
455 {
456 let RangeFrom::<DeserializeAsWrap<Idx, IdxAs>> { start } =
457 Deserialize::deserialize(deserializer)?;
458
459 Ok(RangeFrom {
460 start: start.into_inner(),
461 })
462 }
463}
464
465impl<'de, Idx, IdxAs> DeserializeAs<'de, RangeInclusive<Idx>> for RangeInclusive<IdxAs>
466where
467 IdxAs: DeserializeAs<'de, Idx>,
468{
469 fn deserialize_as<D>(deserializer: D) -> Result<RangeInclusive<Idx>, D::Error>
470 where
471 D: Deserializer<'de>,
472 {
473 let (start, end) =
474 RangeInclusive::<DeserializeAsWrap<Idx, IdxAs>>::deserialize(deserializer)?
475 .into_inner();
476
477 Ok(RangeInclusive::new(start.into_inner(), end.into_inner()))
478 }
479}
480
481impl<'de, Idx, IdxAs> DeserializeAs<'de, RangeTo<Idx>> for RangeTo<IdxAs>
482where
483 IdxAs: DeserializeAs<'de, Idx>,
484{
485 fn deserialize_as<D>(deserializer: D) -> Result<RangeTo<Idx>, D::Error>
486 where
487 D: Deserializer<'de>,
488 {
489 let RangeTo::<DeserializeAsWrap<Idx, IdxAs>> { end } =
490 Deserialize::deserialize(deserializer)?;
491
492 Ok(RangeTo {
493 end: end.into_inner(),
494 })
495 }
496}
497
498#[cfg(feature = "alloc")]
503macro_rules! seq_impl {
504 (
505 $ty:ident < T $(: $tbound1:ident $(+ $tbound2:ident)*)? $(, $typaram:ident : $bound1:ident $(+ $bound2:ident)* )* >,
506 $with_capacity:expr,
507 $append:ident
508 ) => {
509 impl<'de, T, U $(, $typaram)*> DeserializeAs<'de, $ty<T $(, $typaram)*>> for $ty<U $(, $typaram)*>
510 where
511 U: DeserializeAs<'de, T>,
512 $(T: $tbound1 $(+ $tbound2)*,)?
513 $($typaram: $bound1 $(+ $bound2)*),*
514 {
515 fn deserialize_as<D>(deserializer: D) -> Result<$ty<T $(, $typaram)*>, D::Error>
516 where
517 D: Deserializer<'de>,
518 {
519 struct SeqVisitor<T, U $(, $typaram)*> {
520 marker: PhantomData<(T, U $(, $typaram)*)>,
521 }
522
523 impl<'de, T, U $(, $typaram)*> Visitor<'de> for SeqVisitor<T, U $(, $typaram)*>
524 where
525 U: DeserializeAs<'de, T>,
526 $(T: $tbound1 $(+ $tbound2)*,)?
527 $($typaram: $bound1 $(+ $bound2)*),*
528 {
529 type Value = $ty<T $(, $typaram)*>;
530
531 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
532 formatter.write_str("a sequence")
533 }
534
535 fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
536 where
537 A: SeqAccess<'de>,
538 {
539 #[allow(clippy::redundant_closure_call)]
540 let mut values = ($with_capacity)(utils::size_hint_cautious::<T>(seq.size_hint()));
541
542 while let Some(value) = seq
543 .next_element()?
544 .map(|v: DeserializeAsWrap<T, U>| v.into_inner())
545 {
546 values.$append(value);
547 }
548
549 Ok(values.into())
550 }
551 }
552
553 let visitor = SeqVisitor::<T, U $(, $typaram)*> {
554 marker: PhantomData,
555 };
556 deserializer.deserialize_seq(visitor)
557 }
558 }
559 };
560}
561impl<'de, T, U> DeserializeAs<'de, VecDeque<T>> for VecDeque<U> where
U: DeserializeAs<'de, T> {
fn deserialize_as<D>(deserializer: D) -> Result<VecDeque<T>, D::Error>
where D: Deserializer<'de> {
struct SeqVisitor<T, U> {
marker: PhantomData<(T, U)>,
}
impl<'de, T, U> Visitor<'de> for SeqVisitor<T, U> where
U: DeserializeAs<'de, T> {
type Value = VecDeque<T>;
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a sequence")
}
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
#[allow(clippy :: redundant_closure_call)]
let mut values =
((|size|
VecDeque::with_capacity(size)))(utils::size_hint_cautious::<T>(seq.size_hint()));
while let Some(value) =
seq.next_element()?.map(|v: DeserializeAsWrap<T, U>|
v.into_inner()) {
values.push_back(value);
}
Ok(values.into())
}
}
let visitor = SeqVisitor::<T, U> { marker: PhantomData };
deserializer.deserialize_seq(visitor)
}
}foreach_seq!(seq_impl);
562
563#[cfg(feature = "smallvec_1")]
565impl<'de, A, B> DeserializeAs<'de, SmallVec<A>> for SmallVec<B>
566where
567 A: smallvec_1::Array,
568 B: smallvec_1::Array,
569 B::Item: DeserializeAs<'de, A::Item>,
570{
571 fn deserialize_as<D>(deserializer: D) -> Result<SmallVec<A>, D::Error>
572 where
573 D: Deserializer<'de>,
574 {
575 struct SmallVecVisitor<A, B> {
576 marker: PhantomData<(A, B)>,
577 }
578
579 impl<'de, A, B> Visitor<'de> for SmallVecVisitor<A, B>
580 where
581 A: smallvec_1::Array,
582 B: smallvec_1::Array,
583 B::Item: DeserializeAs<'de, A::Item>,
584 {
585 type Value = SmallVec<A>;
586
587 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
588 formatter.write_str("a sequence")
589 }
590
591 fn visit_seq<S>(self, mut seq: S) -> Result<Self::Value, S::Error>
592 where
593 S: SeqAccess<'de>,
594 {
595 let mut values = SmallVec::new();
596
597 while let Some(value) = seq
598 .next_element()?
599 .map(|v: DeserializeAsWrap<A::Item, B::Item>| v.into_inner())
600 {
601 values.push(value);
602 }
603
604 Ok(values)
605 }
606 }
607
608 let visitor = SmallVecVisitor::<A, B> {
609 marker: PhantomData,
610 };
611 deserializer.deserialize_seq(visitor)
612 }
613}
614
615#[cfg(feature = "alloc")]
616macro_rules! map_impl {
617 (
618 $ty:ident < K $(: $kbound1:ident $(+ $kbound2:ident)*)*, V $(, $typaram:ident : $bound1:ident $(+ $bound2:ident)*)* >,
619 $with_capacity:expr
620 ) => {
621 impl<'de, K, V, KU, VU $(, $typaram)*> DeserializeAs<'de, $ty<K, V $(, $typaram)*>> for $ty<KU, VU $(, $typaram)*>
622 where
623 KU: DeserializeAs<'de, K>,
624 VU: DeserializeAs<'de, V>,
625 $(K: $kbound1 $(+ $kbound2)*,)*
626 $($typaram: $bound1 $(+ $bound2)*),*
627 {
628 fn deserialize_as<D>(deserializer: D) -> Result<$ty<K, V $(, $typaram)*>, D::Error>
629 where
630 D: Deserializer<'de>,
631 {
632 struct MapVisitor<K, V, KU, VU $(, $typaram)*>(PhantomData<(K, V, KU, VU $(, $typaram)*)>);
633
634 impl<'de, K, V, KU, VU $(, $typaram)*> Visitor<'de> for MapVisitor<K, V, KU, VU $(, $typaram)*>
635 where
636 KU: DeserializeAs<'de, K>,
637 VU: DeserializeAs<'de, V>,
638 $(K: $kbound1 $(+ $kbound2)*,)*
639 $($typaram: $bound1 $(+ $bound2)*),*
640 {
641 type Value = $ty<K, V $(, $typaram)*>;
642
643 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
644 formatter.write_str("a map")
645 }
646
647 #[inline]
648 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error>
649 where
650 A: MapAccess<'de>,
651 {
652 #[allow(clippy::redundant_closure_call)]
653 let mut values = ($with_capacity)(utils::size_hint_cautious::<(K, V)>(map.size_hint()));
654
655 while let Some((key, value)) = (map.next_entry())?.map(|(k, v): (DeserializeAsWrap::<K, KU>, DeserializeAsWrap::<V, VU>)| (k.into_inner(), v.into_inner())) {
656 values.insert(key, value);
657 }
658
659 Ok(values)
660 }
661 }
662
663 let visitor = MapVisitor::<K, V, KU, VU $(, $typaram)*> (PhantomData);
664 deserializer.deserialize_map(visitor)
665 }
666 }
667 }
668}
669impl<'de, K, V, KU, VU, S> DeserializeAs<'de, IndexMap2<K, V, S>> for
IndexMap2<KU, VU, S> where KU: DeserializeAs<'de, K>,
VU: DeserializeAs<'de, V>, K: Eq + Hash, S: BuildHasher + Default {
fn deserialize_as<D>(deserializer: D)
-> Result<IndexMap2<K, V, S>, D::Error> where D: Deserializer<'de> {
struct MapVisitor<K, V, KU, VU, S>(PhantomData<(K, V, KU, VU, S)>);
impl<'de, K, V, KU, VU, S> Visitor<'de> for
MapVisitor<K, V, KU, VU, S> where KU: DeserializeAs<'de, K>,
VU: DeserializeAs<'de, V>, K: Eq + Hash, S: BuildHasher + Default
{
type Value = IndexMap2<K, V, S>;
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a map")
}
#[inline]
fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error>
where A: MapAccess<'de> {
#[allow(clippy :: redundant_closure_call)]
let mut values =
((|size|
IndexMap2::with_capacity_and_hasher(size,
Default::default())))(utils::size_hint_cautious::<(K,
V)>(map.size_hint()));
while let Some((key, value)) =
(map.next_entry())?.map(|(k, v):
(DeserializeAsWrap<K, KU>, DeserializeAsWrap<V, VU>)|
(k.into_inner(), v.into_inner())) {
values.insert(key, value);
}
Ok(values)
}
}
let visitor = MapVisitor::<K, V, KU, VU, S>(PhantomData);
deserializer.deserialize_map(visitor)
}
}foreach_map!(map_impl);
670
671macro_rules! tuple_impl {
672 ($len:literal $($n:tt $t:ident $tas:ident)+) => {
673 impl<'de, $($t, $tas,)+> DeserializeAs<'de, ($($t,)+)> for ($($tas,)+)
674 where
675 $($tas: DeserializeAs<'de, $t>,)+
676 {
677 fn deserialize_as<D>(deserializer: D) -> Result<($($t,)+), D::Error>
678 where
679 D: Deserializer<'de>,
680 {
681 struct TupleVisitor<$($t,)+>(PhantomData<($($t,)+)>);
682
683 impl<'de, $($t, $tas,)+> Visitor<'de>
684 for TupleVisitor<$(DeserializeAsWrap<$t, $tas>,)+>
685 where
686 $($tas: DeserializeAs<'de, $t>,)+
687 {
688 type Value = ($($t,)+);
689
690 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
691 formatter.write_str(concat!("a tuple of size ", $len))
692 }
693
694 #[allow(non_snake_case)]
695 fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
696 where
697 A: SeqAccess<'de>,
698 {
699 $(
700 let $t: DeserializeAsWrap<$t, $tas> = match seq.next_element()? {
701 Some(value) => value,
702 None => return Err(DeError::invalid_length($n, &self)),
703 };
704 )+
705
706 Ok(($($t.into_inner(),)+))
707 }
708 }
709
710 deserializer.deserialize_tuple(
711 $len,
712 TupleVisitor::<$(DeserializeAsWrap<$t, $tas>,)+>(PhantomData),
713 )
714 }
715 }
716 };
717}
718
719impl<'de, T0, As0> DeserializeAs<'de, (T0,)> for (As0,) where
As0: DeserializeAs<'de, T0> {
fn deserialize_as<D>(deserializer: D) -> Result<(T0,), D::Error> where
D: Deserializer<'de> {
struct TupleVisitor<T0>(PhantomData<(T0,)>);
impl<'de, T0, As0> Visitor<'de> for
TupleVisitor<DeserializeAsWrap<T0, As0>> where
As0: DeserializeAs<'de, T0> {
type Value = (T0,);
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a tuple of size 1")
}
#[allow(non_snake_case)]
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let T0: DeserializeAsWrap<T0, As0> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(0, &self)),
};
Ok((T0.into_inner(),))
}
}
deserializer.deserialize_tuple(1,
TupleVisitor::<DeserializeAsWrap<T0, As0>>(PhantomData))
}
}tuple_impl!(1 0 T0 As0);
720impl<'de, T0, As0, T1, As1> DeserializeAs<'de, (T0, T1)> for (As0, As1) where
As0: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1> {
fn deserialize_as<D>(deserializer: D) -> Result<(T0, T1), D::Error> where
D: Deserializer<'de> {
struct TupleVisitor<T0, T1>(PhantomData<(T0, T1)>);
impl<'de, T0, As0, T1, As1> Visitor<'de> for
TupleVisitor<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>> where As0: DeserializeAs<'de, T0>,
As1: DeserializeAs<'de, T1> {
type Value = (T0, T1);
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a tuple of size 2")
}
#[allow(non_snake_case)]
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let T0: DeserializeAsWrap<T0, As0> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(0, &self)),
};
let T1: DeserializeAsWrap<T1, As1> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(1, &self)),
};
Ok((T0.into_inner(), T1.into_inner()))
}
}
deserializer.deserialize_tuple(2,
TupleVisitor::<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>>(PhantomData))
}
}tuple_impl!(2 0 T0 As0 1 T1 As1);
721impl<'de, T0, As0, T1, As1, T2, As2> DeserializeAs<'de, (T0, T1, T2)> for
(As0, As1, As2) where As0: DeserializeAs<'de, T0>,
As1: DeserializeAs<'de, T1>, As2: DeserializeAs<'de, T2> {
fn deserialize_as<D>(deserializer: D) -> Result<(T0, T1, T2), D::Error>
where D: Deserializer<'de> {
struct TupleVisitor<T0, T1, T2>(PhantomData<(T0, T1, T2)>);
impl<'de, T0, As0, T1, As1, T2, As2> Visitor<'de> for
TupleVisitor<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>> where
As0: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2> {
type Value = (T0, T1, T2);
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a tuple of size 3")
}
#[allow(non_snake_case)]
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let T0: DeserializeAsWrap<T0, As0> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(0, &self)),
};
let T1: DeserializeAsWrap<T1, As1> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(1, &self)),
};
let T2: DeserializeAsWrap<T2, As2> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(2, &self)),
};
Ok((T0.into_inner(), T1.into_inner(), T2.into_inner()))
}
}
deserializer.deserialize_tuple(3,
TupleVisitor::<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>,
DeserializeAsWrap<T2, As2>>(PhantomData))
}
}tuple_impl!(3 0 T0 As0 1 T1 As1 2 T2 As2);
722impl<'de, T0, As0, T1, As1, T2, As2, T3, As3>
DeserializeAs<'de, (T0, T1, T2, T3)> for (As0, As1, As2, As3) where
As0: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2>, As3: DeserializeAs<'de, T3> {
fn deserialize_as<D>(deserializer: D)
-> Result<(T0, T1, T2, T3), D::Error> where D: Deserializer<'de> {
struct TupleVisitor<T0, T1, T2, T3>(PhantomData<(T0, T1, T2, T3)>);
impl<'de, T0, As0, T1, As1, T2, As2, T3, As3> Visitor<'de> for
TupleVisitor<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>> where As0: DeserializeAs<'de, T0>,
As1: DeserializeAs<'de, T1>, As2: DeserializeAs<'de, T2>,
As3: DeserializeAs<'de, T3> {
type Value = (T0, T1, T2, T3);
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a tuple of size 4")
}
#[allow(non_snake_case)]
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let T0: DeserializeAsWrap<T0, As0> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(0, &self)),
};
let T1: DeserializeAsWrap<T1, As1> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(1, &self)),
};
let T2: DeserializeAsWrap<T2, As2> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(2, &self)),
};
let T3: DeserializeAsWrap<T3, As3> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(3, &self)),
};
Ok((T0.into_inner(), T1.into_inner(), T2.into_inner(),
T3.into_inner()))
}
}
deserializer.deserialize_tuple(4,
TupleVisitor::<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>>(PhantomData))
}
}tuple_impl!(4 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3);
723impl<'de, T0, As0, T1, As1, T2, As2, T3, As3, T4, As4>
DeserializeAs<'de, (T0, T1, T2, T3, T4)> for (As0, As1, As2, As3, As4)
where As0: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2>, As3: DeserializeAs<'de, T3>,
As4: DeserializeAs<'de, T4> {
fn deserialize_as<D>(deserializer: D)
-> Result<(T0, T1, T2, T3, T4), D::Error> where D: Deserializer<'de> {
struct TupleVisitor<T0, T1, T2, T3,
T4>(PhantomData<(T0, T1, T2, T3, T4)>);
impl<'de, T0, As0, T1, As1, T2, As2, T3, As3, T4, As4> Visitor<'de>
for
TupleVisitor<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>> where
As0: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2>, As3: DeserializeAs<'de, T3>,
As4: DeserializeAs<'de, T4> {
type Value = (T0, T1, T2, T3, T4);
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a tuple of size 5")
}
#[allow(non_snake_case)]
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let T0: DeserializeAsWrap<T0, As0> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(0, &self)),
};
let T1: DeserializeAsWrap<T1, As1> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(1, &self)),
};
let T2: DeserializeAsWrap<T2, As2> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(2, &self)),
};
let T3: DeserializeAsWrap<T3, As3> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(3, &self)),
};
let T4: DeserializeAsWrap<T4, As4> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(4, &self)),
};
Ok((T0.into_inner(), T1.into_inner(), T2.into_inner(),
T3.into_inner(), T4.into_inner()))
}
}
deserializer.deserialize_tuple(5,
TupleVisitor::<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>,
DeserializeAsWrap<T4, As4>>(PhantomData))
}
}tuple_impl!(5 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3 4 T4 As4);
724impl<'de, T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5>
DeserializeAs<'de, (T0, T1, T2, T3, T4, T5)> for
(As0, As1, As2, As3, As4, As5) where As0: DeserializeAs<'de, T0>,
As1: DeserializeAs<'de, T1>, As2: DeserializeAs<'de, T2>,
As3: DeserializeAs<'de, T3>, As4: DeserializeAs<'de, T4>,
As5: DeserializeAs<'de, T5> {
fn deserialize_as<D>(deserializer: D)
-> Result<(T0, T1, T2, T3, T4, T5), D::Error> where
D: Deserializer<'de> {
struct TupleVisitor<T0, T1, T2, T3, T4,
T5>(PhantomData<(T0, T1, T2, T3, T4, T5)>);
impl<'de, T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5>
Visitor<'de> for
TupleVisitor<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>> where As0: DeserializeAs<'de, T0>,
As1: DeserializeAs<'de, T1>, As2: DeserializeAs<'de, T2>,
As3: DeserializeAs<'de, T3>, As4: DeserializeAs<'de, T4>,
As5: DeserializeAs<'de, T5> {
type Value = (T0, T1, T2, T3, T4, T5);
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a tuple of size 6")
}
#[allow(non_snake_case)]
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let T0: DeserializeAsWrap<T0, As0> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(0, &self)),
};
let T1: DeserializeAsWrap<T1, As1> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(1, &self)),
};
let T2: DeserializeAsWrap<T2, As2> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(2, &self)),
};
let T3: DeserializeAsWrap<T3, As3> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(3, &self)),
};
let T4: DeserializeAsWrap<T4, As4> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(4, &self)),
};
let T5: DeserializeAsWrap<T5, As5> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(5, &self)),
};
Ok((T0.into_inner(), T1.into_inner(), T2.into_inner(),
T3.into_inner(), T4.into_inner(), T5.into_inner()))
}
}
deserializer.deserialize_tuple(6,
TupleVisitor::<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>>(PhantomData))
}
}tuple_impl!(6 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3 4 T4 As4 5 T5 As5);
725impl<'de, T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6, As6>
DeserializeAs<'de, (T0, T1, T2, T3, T4, T5, T6)> for
(As0, As1, As2, As3, As4, As5, As6) where As0: DeserializeAs<'de, T0>,
As1: DeserializeAs<'de, T1>, As2: DeserializeAs<'de, T2>,
As3: DeserializeAs<'de, T3>, As4: DeserializeAs<'de, T4>,
As5: DeserializeAs<'de, T5>, As6: DeserializeAs<'de, T6> {
fn deserialize_as<D>(deserializer: D)
-> Result<(T0, T1, T2, T3, T4, T5, T6), D::Error> where
D: Deserializer<'de> {
struct TupleVisitor<T0, T1, T2, T3, T4, T5,
T6>(PhantomData<(T0, T1, T2, T3, T4, T5, T6)>);
impl<'de, T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6,
As6> Visitor<'de> for
TupleVisitor<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>> where
As0: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2>, As3: DeserializeAs<'de, T3>,
As4: DeserializeAs<'de, T4>, As5: DeserializeAs<'de, T5>,
As6: DeserializeAs<'de, T6> {
type Value = (T0, T1, T2, T3, T4, T5, T6);
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a tuple of size 7")
}
#[allow(non_snake_case)]
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let T0: DeserializeAsWrap<T0, As0> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(0, &self)),
};
let T1: DeserializeAsWrap<T1, As1> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(1, &self)),
};
let T2: DeserializeAsWrap<T2, As2> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(2, &self)),
};
let T3: DeserializeAsWrap<T3, As3> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(3, &self)),
};
let T4: DeserializeAsWrap<T4, As4> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(4, &self)),
};
let T5: DeserializeAsWrap<T5, As5> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(5, &self)),
};
let T6: DeserializeAsWrap<T6, As6> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(6, &self)),
};
Ok((T0.into_inner(), T1.into_inner(), T2.into_inner(),
T3.into_inner(), T4.into_inner(), T5.into_inner(),
T6.into_inner()))
}
}
deserializer.deserialize_tuple(7,
TupleVisitor::<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>,
DeserializeAsWrap<T6, As6>>(PhantomData))
}
}tuple_impl!(7 0 T0 As0 1 T1 As1 2 T2 As2 3 T3 As3 4 T4 As4 5 T5 As5 6 T6 As6);
726impl<'de, T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6, As6, T7,
As7> DeserializeAs<'de, (T0, T1, T2, T3, T4, T5, T6, T7)> for
(As0, As1, As2, As3, As4, As5, As6, As7) where
As0: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2>, As3: DeserializeAs<'de, T3>,
As4: DeserializeAs<'de, T4>, As5: DeserializeAs<'de, T5>,
As6: DeserializeAs<'de, T6>, As7: DeserializeAs<'de, T7> {
fn deserialize_as<D>(deserializer: D)
-> Result<(T0, T1, T2, T3, T4, T5, T6, T7), D::Error> where
D: Deserializer<'de> {
struct TupleVisitor<T0, T1, T2, T3, T4, T5, T6,
T7>(PhantomData<(T0, T1, T2, T3, T4, T5, T6, T7)>);
impl<'de, T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6,
As6, T7, As7> Visitor<'de> for
TupleVisitor<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>> where As0: DeserializeAs<'de, T0>,
As1: DeserializeAs<'de, T1>, As2: DeserializeAs<'de, T2>,
As3: DeserializeAs<'de, T3>, As4: DeserializeAs<'de, T4>,
As5: DeserializeAs<'de, T5>, As6: DeserializeAs<'de, T6>,
As7: DeserializeAs<'de, T7> {
type Value = (T0, T1, T2, T3, T4, T5, T6, T7);
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a tuple of size 8")
}
#[allow(non_snake_case)]
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let T0: DeserializeAsWrap<T0, As0> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(0, &self)),
};
let T1: DeserializeAsWrap<T1, As1> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(1, &self)),
};
let T2: DeserializeAsWrap<T2, As2> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(2, &self)),
};
let T3: DeserializeAsWrap<T3, As3> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(3, &self)),
};
let T4: DeserializeAsWrap<T4, As4> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(4, &self)),
};
let T5: DeserializeAsWrap<T5, As5> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(5, &self)),
};
let T6: DeserializeAsWrap<T6, As6> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(6, &self)),
};
let T7: DeserializeAsWrap<T7, As7> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(7, &self)),
};
Ok((T0.into_inner(), T1.into_inner(), T2.into_inner(),
T3.into_inner(), T4.into_inner(), T5.into_inner(),
T6.into_inner(), T7.into_inner()))
}
}
deserializer.deserialize_tuple(8,
TupleVisitor::<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>>(PhantomData))
}
}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);
727impl<'de, T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6, As6, T7,
As7, T8, As8> DeserializeAs<'de, (T0, T1, T2, T3, T4, T5, T6, T7, T8)> for
(As0, As1, As2, As3, As4, As5, As6, As7, As8) where
As0: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2>, As3: DeserializeAs<'de, T3>,
As4: DeserializeAs<'de, T4>, As5: DeserializeAs<'de, T5>,
As6: DeserializeAs<'de, T6>, As7: DeserializeAs<'de, T7>,
As8: DeserializeAs<'de, T8> {
fn deserialize_as<D>(deserializer: D)
-> Result<(T0, T1, T2, T3, T4, T5, T6, T7, T8), D::Error> where
D: Deserializer<'de> {
struct TupleVisitor<T0, T1, T2, T3, T4, T5, T6, T7,
T8>(PhantomData<(T0, T1, T2, T3, T4, T5, T6, T7, T8)>);
impl<'de, T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6,
As6, T7, As7, T8, As8> Visitor<'de> for
TupleVisitor<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>, DeserializeAsWrap<T8, As8>> where
As0: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2>, As3: DeserializeAs<'de, T3>,
As4: DeserializeAs<'de, T4>, As5: DeserializeAs<'de, T5>,
As6: DeserializeAs<'de, T6>, As7: DeserializeAs<'de, T7>,
As8: DeserializeAs<'de, T8> {
type Value = (T0, T1, T2, T3, T4, T5, T6, T7, T8);
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a tuple of size 9")
}
#[allow(non_snake_case)]
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let T0: DeserializeAsWrap<T0, As0> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(0, &self)),
};
let T1: DeserializeAsWrap<T1, As1> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(1, &self)),
};
let T2: DeserializeAsWrap<T2, As2> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(2, &self)),
};
let T3: DeserializeAsWrap<T3, As3> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(3, &self)),
};
let T4: DeserializeAsWrap<T4, As4> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(4, &self)),
};
let T5: DeserializeAsWrap<T5, As5> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(5, &self)),
};
let T6: DeserializeAsWrap<T6, As6> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(6, &self)),
};
let T7: DeserializeAsWrap<T7, As7> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(7, &self)),
};
let T8: DeserializeAsWrap<T8, As8> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(8, &self)),
};
Ok((T0.into_inner(), T1.into_inner(), T2.into_inner(),
T3.into_inner(), T4.into_inner(), T5.into_inner(),
T6.into_inner(), T7.into_inner(), T8.into_inner()))
}
}
deserializer.deserialize_tuple(9,
TupleVisitor::<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>,
DeserializeAsWrap<T8, As8>>(PhantomData))
}
}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);
728impl<'de, T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6, As6, T7,
As7, T8, As8, T9, As9>
DeserializeAs<'de, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)> for
(As0, As1, As2, As3, As4, As5, As6, As7, As8, As9) where
As0: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2>, As3: DeserializeAs<'de, T3>,
As4: DeserializeAs<'de, T4>, As5: DeserializeAs<'de, T5>,
As6: DeserializeAs<'de, T6>, As7: DeserializeAs<'de, T7>,
As8: DeserializeAs<'de, T8>, As9: DeserializeAs<'de, T9> {
fn deserialize_as<D>(deserializer: D)
-> Result<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9), D::Error> where
D: Deserializer<'de> {
struct TupleVisitor<T0, T1, T2, T3, T4, T5, T6, T7, T8,
T9>(PhantomData<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)>);
impl<'de, T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6,
As6, T7, As7, T8, As8, T9, As9> Visitor<'de> for
TupleVisitor<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>, DeserializeAsWrap<T8, As8>,
DeserializeAsWrap<T9, As9>> where As0: DeserializeAs<'de, T0>,
As1: DeserializeAs<'de, T1>, As2: DeserializeAs<'de, T2>,
As3: DeserializeAs<'de, T3>, As4: DeserializeAs<'de, T4>,
As5: DeserializeAs<'de, T5>, As6: DeserializeAs<'de, T6>,
As7: DeserializeAs<'de, T7>, As8: DeserializeAs<'de, T8>,
As9: DeserializeAs<'de, T9> {
type Value = (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9);
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a tuple of size 10")
}
#[allow(non_snake_case)]
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let T0: DeserializeAsWrap<T0, As0> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(0, &self)),
};
let T1: DeserializeAsWrap<T1, As1> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(1, &self)),
};
let T2: DeserializeAsWrap<T2, As2> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(2, &self)),
};
let T3: DeserializeAsWrap<T3, As3> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(3, &self)),
};
let T4: DeserializeAsWrap<T4, As4> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(4, &self)),
};
let T5: DeserializeAsWrap<T5, As5> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(5, &self)),
};
let T6: DeserializeAsWrap<T6, As6> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(6, &self)),
};
let T7: DeserializeAsWrap<T7, As7> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(7, &self)),
};
let T8: DeserializeAsWrap<T8, As8> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(8, &self)),
};
let T9: DeserializeAsWrap<T9, As9> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(9, &self)),
};
Ok((T0.into_inner(), T1.into_inner(), T2.into_inner(),
T3.into_inner(), T4.into_inner(), T5.into_inner(),
T6.into_inner(), T7.into_inner(), T8.into_inner(),
T9.into_inner()))
}
}
deserializer.deserialize_tuple(10,
TupleVisitor::<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>, DeserializeAsWrap<T8, As8>,
DeserializeAsWrap<T9, As9>>(PhantomData))
}
}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);
729impl<'de, T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6, As6, T7,
As7, T8, As8, T9, As9, T10, As10>
DeserializeAs<'de, (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: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2>, As3: DeserializeAs<'de, T3>,
As4: DeserializeAs<'de, T4>, As5: DeserializeAs<'de, T5>,
As6: DeserializeAs<'de, T6>, As7: DeserializeAs<'de, T7>,
As8: DeserializeAs<'de, T8>, As9: DeserializeAs<'de, T9>,
As10: DeserializeAs<'de, T10> {
fn deserialize_as<D>(deserializer: D)
-> Result<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10), D::Error>
where D: Deserializer<'de> {
struct TupleVisitor<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9,
T10>(PhantomData<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>);
impl<'de, T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6,
As6, T7, As7, T8, As8, T9, As9, T10, As10> Visitor<'de> for
TupleVisitor<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>, DeserializeAsWrap<T8, As8>,
DeserializeAsWrap<T9, As9>, DeserializeAsWrap<T10, As10>> where
As0: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2>, As3: DeserializeAs<'de, T3>,
As4: DeserializeAs<'de, T4>, As5: DeserializeAs<'de, T5>,
As6: DeserializeAs<'de, T6>, As7: DeserializeAs<'de, T7>,
As8: DeserializeAs<'de, T8>, As9: DeserializeAs<'de, T9>,
As10: DeserializeAs<'de, T10> {
type Value = (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10);
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a tuple of size 11")
}
#[allow(non_snake_case)]
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let T0: DeserializeAsWrap<T0, As0> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(0, &self)),
};
let T1: DeserializeAsWrap<T1, As1> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(1, &self)),
};
let T2: DeserializeAsWrap<T2, As2> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(2, &self)),
};
let T3: DeserializeAsWrap<T3, As3> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(3, &self)),
};
let T4: DeserializeAsWrap<T4, As4> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(4, &self)),
};
let T5: DeserializeAsWrap<T5, As5> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(5, &self)),
};
let T6: DeserializeAsWrap<T6, As6> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(6, &self)),
};
let T7: DeserializeAsWrap<T7, As7> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(7, &self)),
};
let T8: DeserializeAsWrap<T8, As8> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(8, &self)),
};
let T9: DeserializeAsWrap<T9, As9> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(9, &self)),
};
let T10: DeserializeAsWrap<T10, As10> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(10, &self)),
};
Ok((T0.into_inner(), T1.into_inner(), T2.into_inner(),
T3.into_inner(), T4.into_inner(), T5.into_inner(),
T6.into_inner(), T7.into_inner(), T8.into_inner(),
T9.into_inner(), T10.into_inner()))
}
}
deserializer.deserialize_tuple(11,
TupleVisitor::<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>, DeserializeAsWrap<T8, As8>,
DeserializeAsWrap<T9, As9>,
DeserializeAsWrap<T10, As10>>(PhantomData))
}
}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);
730impl<'de, T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6, As6, T7,
As7, T8, As8, T9, As9, T10, As10, T11, As11>
DeserializeAs<'de, (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: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2>, As3: DeserializeAs<'de, T3>,
As4: DeserializeAs<'de, T4>, As5: DeserializeAs<'de, T5>,
As6: DeserializeAs<'de, T6>, As7: DeserializeAs<'de, T7>,
As8: DeserializeAs<'de, T8>, As9: DeserializeAs<'de, T9>,
As10: DeserializeAs<'de, T10>, As11: DeserializeAs<'de, T11> {
fn deserialize_as<D>(deserializer: D)
->
Result<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11),
D::Error> where D: Deserializer<'de> {
struct TupleVisitor<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
T11>(PhantomData<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
T11)>);
impl<'de, T0, As0, T1, As1, T2, As2, T3, As3, T4, As4, T5, As5, T6,
As6, T7, As7, T8, As8, T9, As9, T10, As10, T11, As11> Visitor<'de>
for
TupleVisitor<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>, DeserializeAsWrap<T8, As8>,
DeserializeAsWrap<T9, As9>, DeserializeAsWrap<T10, As10>,
DeserializeAsWrap<T11, As11>> where As0: DeserializeAs<'de, T0>,
As1: DeserializeAs<'de, T1>, As2: DeserializeAs<'de, T2>,
As3: DeserializeAs<'de, T3>, As4: DeserializeAs<'de, T4>,
As5: DeserializeAs<'de, T5>, As6: DeserializeAs<'de, T6>,
As7: DeserializeAs<'de, T7>, As8: DeserializeAs<'de, T8>,
As9: DeserializeAs<'de, T9>, As10: DeserializeAs<'de, T10>,
As11: DeserializeAs<'de, T11> {
type Value = (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11);
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a tuple of size 12")
}
#[allow(non_snake_case)]
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let T0: DeserializeAsWrap<T0, As0> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(0, &self)),
};
let T1: DeserializeAsWrap<T1, As1> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(1, &self)),
};
let T2: DeserializeAsWrap<T2, As2> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(2, &self)),
};
let T3: DeserializeAsWrap<T3, As3> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(3, &self)),
};
let T4: DeserializeAsWrap<T4, As4> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(4, &self)),
};
let T5: DeserializeAsWrap<T5, As5> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(5, &self)),
};
let T6: DeserializeAsWrap<T6, As6> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(6, &self)),
};
let T7: DeserializeAsWrap<T7, As7> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(7, &self)),
};
let T8: DeserializeAsWrap<T8, As8> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(8, &self)),
};
let T9: DeserializeAsWrap<T9, As9> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(9, &self)),
};
let T10: DeserializeAsWrap<T10, As10> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(10, &self)),
};
let T11: DeserializeAsWrap<T11, As11> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(11, &self)),
};
Ok((T0.into_inner(), T1.into_inner(), T2.into_inner(),
T3.into_inner(), T4.into_inner(), T5.into_inner(),
T6.into_inner(), T7.into_inner(), T8.into_inner(),
T9.into_inner(), T10.into_inner(), T11.into_inner()))
}
}
deserializer.deserialize_tuple(12,
TupleVisitor::<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>, DeserializeAsWrap<T8, As8>,
DeserializeAsWrap<T9, As9>, DeserializeAsWrap<T10, As10>,
DeserializeAsWrap<T11, As11>>(PhantomData))
}
}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);
731impl<'de, 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>
DeserializeAs<'de,
(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: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2>, As3: DeserializeAs<'de, T3>,
As4: DeserializeAs<'de, T4>, As5: DeserializeAs<'de, T5>,
As6: DeserializeAs<'de, T6>, As7: DeserializeAs<'de, T7>,
As8: DeserializeAs<'de, T8>, As9: DeserializeAs<'de, T9>,
As10: DeserializeAs<'de, T10>, As11: DeserializeAs<'de, T11>,
As12: DeserializeAs<'de, T12> {
fn deserialize_as<D>(deserializer: D)
->
Result<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12),
D::Error> where D: Deserializer<'de> {
struct TupleVisitor<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
T12>(PhantomData<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
T11, T12)>);
impl<'de, 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>
Visitor<'de> for
TupleVisitor<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>, DeserializeAsWrap<T8, As8>,
DeserializeAsWrap<T9, As9>, DeserializeAsWrap<T10, As10>,
DeserializeAsWrap<T11, As11>, DeserializeAsWrap<T12, As12>> where
As0: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2>, As3: DeserializeAs<'de, T3>,
As4: DeserializeAs<'de, T4>, As5: DeserializeAs<'de, T5>,
As6: DeserializeAs<'de, T6>, As7: DeserializeAs<'de, T7>,
As8: DeserializeAs<'de, T8>, As9: DeserializeAs<'de, T9>,
As10: DeserializeAs<'de, T10>, As11: DeserializeAs<'de, T11>,
As12: DeserializeAs<'de, T12> {
type Value =
(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12);
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a tuple of size 13")
}
#[allow(non_snake_case)]
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let T0: DeserializeAsWrap<T0, As0> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(0, &self)),
};
let T1: DeserializeAsWrap<T1, As1> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(1, &self)),
};
let T2: DeserializeAsWrap<T2, As2> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(2, &self)),
};
let T3: DeserializeAsWrap<T3, As3> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(3, &self)),
};
let T4: DeserializeAsWrap<T4, As4> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(4, &self)),
};
let T5: DeserializeAsWrap<T5, As5> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(5, &self)),
};
let T6: DeserializeAsWrap<T6, As6> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(6, &self)),
};
let T7: DeserializeAsWrap<T7, As7> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(7, &self)),
};
let T8: DeserializeAsWrap<T8, As8> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(8, &self)),
};
let T9: DeserializeAsWrap<T9, As9> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(9, &self)),
};
let T10: DeserializeAsWrap<T10, As10> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(10, &self)),
};
let T11: DeserializeAsWrap<T11, As11> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(11, &self)),
};
let T12: DeserializeAsWrap<T12, As12> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(12, &self)),
};
Ok((T0.into_inner(), T1.into_inner(), T2.into_inner(),
T3.into_inner(), T4.into_inner(), T5.into_inner(),
T6.into_inner(), T7.into_inner(), T8.into_inner(),
T9.into_inner(), T10.into_inner(), T11.into_inner(),
T12.into_inner()))
}
}
deserializer.deserialize_tuple(13,
TupleVisitor::<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>, DeserializeAsWrap<T8, As8>,
DeserializeAsWrap<T9, As9>, DeserializeAsWrap<T10, As10>,
DeserializeAsWrap<T11, As11>,
DeserializeAsWrap<T12, As12>>(PhantomData))
}
}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);
732impl<'de, 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>
DeserializeAs<'de,
(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: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2>, As3: DeserializeAs<'de, T3>,
As4: DeserializeAs<'de, T4>, As5: DeserializeAs<'de, T5>,
As6: DeserializeAs<'de, T6>, As7: DeserializeAs<'de, T7>,
As8: DeserializeAs<'de, T8>, As9: DeserializeAs<'de, T9>,
As10: DeserializeAs<'de, T10>, As11: DeserializeAs<'de, T11>,
As12: DeserializeAs<'de, T12>, As13: DeserializeAs<'de, T13> {
fn deserialize_as<D>(deserializer: D)
->
Result<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
T13), D::Error> where D: Deserializer<'de> {
struct TupleVisitor<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
T12,
T13>(PhantomData<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
T11, T12, T13)>);
impl<'de, 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> Visitor<'de> for
TupleVisitor<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>, DeserializeAsWrap<T8, As8>,
DeserializeAsWrap<T9, As9>, DeserializeAsWrap<T10, As10>,
DeserializeAsWrap<T11, As11>, DeserializeAsWrap<T12, As12>,
DeserializeAsWrap<T13, As13>> where As0: DeserializeAs<'de, T0>,
As1: DeserializeAs<'de, T1>, As2: DeserializeAs<'de, T2>,
As3: DeserializeAs<'de, T3>, As4: DeserializeAs<'de, T4>,
As5: DeserializeAs<'de, T5>, As6: DeserializeAs<'de, T6>,
As7: DeserializeAs<'de, T7>, As8: DeserializeAs<'de, T8>,
As9: DeserializeAs<'de, T9>, As10: DeserializeAs<'de, T10>,
As11: DeserializeAs<'de, T11>, As12: DeserializeAs<'de, T12>,
As13: DeserializeAs<'de, T13> {
type Value =
(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13);
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a tuple of size 14")
}
#[allow(non_snake_case)]
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let T0: DeserializeAsWrap<T0, As0> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(0, &self)),
};
let T1: DeserializeAsWrap<T1, As1> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(1, &self)),
};
let T2: DeserializeAsWrap<T2, As2> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(2, &self)),
};
let T3: DeserializeAsWrap<T3, As3> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(3, &self)),
};
let T4: DeserializeAsWrap<T4, As4> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(4, &self)),
};
let T5: DeserializeAsWrap<T5, As5> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(5, &self)),
};
let T6: DeserializeAsWrap<T6, As6> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(6, &self)),
};
let T7: DeserializeAsWrap<T7, As7> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(7, &self)),
};
let T8: DeserializeAsWrap<T8, As8> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(8, &self)),
};
let T9: DeserializeAsWrap<T9, As9> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(9, &self)),
};
let T10: DeserializeAsWrap<T10, As10> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(10, &self)),
};
let T11: DeserializeAsWrap<T11, As11> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(11, &self)),
};
let T12: DeserializeAsWrap<T12, As12> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(12, &self)),
};
let T13: DeserializeAsWrap<T13, As13> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(13, &self)),
};
Ok((T0.into_inner(), T1.into_inner(), T2.into_inner(),
T3.into_inner(), T4.into_inner(), T5.into_inner(),
T6.into_inner(), T7.into_inner(), T8.into_inner(),
T9.into_inner(), T10.into_inner(), T11.into_inner(),
T12.into_inner(), T13.into_inner()))
}
}
deserializer.deserialize_tuple(14,
TupleVisitor::<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>, DeserializeAsWrap<T8, As8>,
DeserializeAsWrap<T9, As9>, DeserializeAsWrap<T10, As10>,
DeserializeAsWrap<T11, As11>, DeserializeAsWrap<T12, As12>,
DeserializeAsWrap<T13, As13>>(PhantomData))
}
}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);
733impl<'de, 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>
DeserializeAs<'de,
(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: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2>, As3: DeserializeAs<'de, T3>,
As4: DeserializeAs<'de, T4>, As5: DeserializeAs<'de, T5>,
As6: DeserializeAs<'de, T6>, As7: DeserializeAs<'de, T7>,
As8: DeserializeAs<'de, T8>, As9: DeserializeAs<'de, T9>,
As10: DeserializeAs<'de, T10>, As11: DeserializeAs<'de, T11>,
As12: DeserializeAs<'de, T12>, As13: DeserializeAs<'de, T13>,
As14: DeserializeAs<'de, T14> {
fn deserialize_as<D>(deserializer: D)
->
Result<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
T13, T14), D::Error> where D: Deserializer<'de> {
struct TupleVisitor<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
T12, T13,
T14>(PhantomData<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
T11, T12, T13, T14)>);
impl<'de, 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> Visitor<'de> for
TupleVisitor<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>, DeserializeAsWrap<T8, As8>,
DeserializeAsWrap<T9, As9>, DeserializeAsWrap<T10, As10>,
DeserializeAsWrap<T11, As11>, DeserializeAsWrap<T12, As12>,
DeserializeAsWrap<T13, As13>, DeserializeAsWrap<T14, As14>> where
As0: DeserializeAs<'de, T0>, As1: DeserializeAs<'de, T1>,
As2: DeserializeAs<'de, T2>, As3: DeserializeAs<'de, T3>,
As4: DeserializeAs<'de, T4>, As5: DeserializeAs<'de, T5>,
As6: DeserializeAs<'de, T6>, As7: DeserializeAs<'de, T7>,
As8: DeserializeAs<'de, T8>, As9: DeserializeAs<'de, T9>,
As10: DeserializeAs<'de, T10>, As11: DeserializeAs<'de, T11>,
As12: DeserializeAs<'de, T12>, As13: DeserializeAs<'de, T13>,
As14: DeserializeAs<'de, T14> {
type Value =
(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
T14);
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a tuple of size 15")
}
#[allow(non_snake_case)]
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let T0: DeserializeAsWrap<T0, As0> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(0, &self)),
};
let T1: DeserializeAsWrap<T1, As1> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(1, &self)),
};
let T2: DeserializeAsWrap<T2, As2> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(2, &self)),
};
let T3: DeserializeAsWrap<T3, As3> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(3, &self)),
};
let T4: DeserializeAsWrap<T4, As4> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(4, &self)),
};
let T5: DeserializeAsWrap<T5, As5> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(5, &self)),
};
let T6: DeserializeAsWrap<T6, As6> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(6, &self)),
};
let T7: DeserializeAsWrap<T7, As7> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(7, &self)),
};
let T8: DeserializeAsWrap<T8, As8> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(8, &self)),
};
let T9: DeserializeAsWrap<T9, As9> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(9, &self)),
};
let T10: DeserializeAsWrap<T10, As10> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(10, &self)),
};
let T11: DeserializeAsWrap<T11, As11> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(11, &self)),
};
let T12: DeserializeAsWrap<T12, As12> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(12, &self)),
};
let T13: DeserializeAsWrap<T13, As13> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(13, &self)),
};
let T14: DeserializeAsWrap<T14, As14> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(14, &self)),
};
Ok((T0.into_inner(), T1.into_inner(), T2.into_inner(),
T3.into_inner(), T4.into_inner(), T5.into_inner(),
T6.into_inner(), T7.into_inner(), T8.into_inner(),
T9.into_inner(), T10.into_inner(), T11.into_inner(),
T12.into_inner(), T13.into_inner(), T14.into_inner()))
}
}
deserializer.deserialize_tuple(15,
TupleVisitor::<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>, DeserializeAsWrap<T8, As8>,
DeserializeAsWrap<T9, As9>, DeserializeAsWrap<T10, As10>,
DeserializeAsWrap<T11, As11>, DeserializeAsWrap<T12, As12>,
DeserializeAsWrap<T13, As13>,
DeserializeAsWrap<T14, As14>>(PhantomData))
}
}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);
734impl<'de, 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>
DeserializeAs<'de,
(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: DeserializeAs<'de, T0>,
As1: DeserializeAs<'de, T1>, As2: DeserializeAs<'de, T2>,
As3: DeserializeAs<'de, T3>, As4: DeserializeAs<'de, T4>,
As5: DeserializeAs<'de, T5>, As6: DeserializeAs<'de, T6>,
As7: DeserializeAs<'de, T7>, As8: DeserializeAs<'de, T8>,
As9: DeserializeAs<'de, T9>, As10: DeserializeAs<'de, T10>,
As11: DeserializeAs<'de, T11>, As12: DeserializeAs<'de, T12>,
As13: DeserializeAs<'de, T13>, As14: DeserializeAs<'de, T14>,
As15: DeserializeAs<'de, T15> {
fn deserialize_as<D>(deserializer: D)
->
Result<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
T13, T14, T15), D::Error> where D: Deserializer<'de> {
struct TupleVisitor<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
T12, T13, T14,
T15>(PhantomData<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
T11, T12, T13, T14, T15)>);
impl<'de, 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> Visitor<'de> for
TupleVisitor<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>, DeserializeAsWrap<T8, As8>,
DeserializeAsWrap<T9, As9>, DeserializeAsWrap<T10, As10>,
DeserializeAsWrap<T11, As11>, DeserializeAsWrap<T12, As12>,
DeserializeAsWrap<T13, As13>, DeserializeAsWrap<T14, As14>,
DeserializeAsWrap<T15, As15>> where As0: DeserializeAs<'de, T0>,
As1: DeserializeAs<'de, T1>, As2: DeserializeAs<'de, T2>,
As3: DeserializeAs<'de, T3>, As4: DeserializeAs<'de, T4>,
As5: DeserializeAs<'de, T5>, As6: DeserializeAs<'de, T6>,
As7: DeserializeAs<'de, T7>, As8: DeserializeAs<'de, T8>,
As9: DeserializeAs<'de, T9>, As10: DeserializeAs<'de, T10>,
As11: DeserializeAs<'de, T11>, As12: DeserializeAs<'de, T12>,
As13: DeserializeAs<'de, T13>, As14: DeserializeAs<'de, T14>,
As15: DeserializeAs<'de, T15> {
type Value =
(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
T14, T15);
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a tuple of size 16")
}
#[allow(non_snake_case)]
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let T0: DeserializeAsWrap<T0, As0> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(0, &self)),
};
let T1: DeserializeAsWrap<T1, As1> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(1, &self)),
};
let T2: DeserializeAsWrap<T2, As2> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(2, &self)),
};
let T3: DeserializeAsWrap<T3, As3> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(3, &self)),
};
let T4: DeserializeAsWrap<T4, As4> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(4, &self)),
};
let T5: DeserializeAsWrap<T5, As5> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(5, &self)),
};
let T6: DeserializeAsWrap<T6, As6> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(6, &self)),
};
let T7: DeserializeAsWrap<T7, As7> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(7, &self)),
};
let T8: DeserializeAsWrap<T8, As8> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(8, &self)),
};
let T9: DeserializeAsWrap<T9, As9> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(9, &self)),
};
let T10: DeserializeAsWrap<T10, As10> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(10, &self)),
};
let T11: DeserializeAsWrap<T11, As11> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(11, &self)),
};
let T12: DeserializeAsWrap<T12, As12> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(12, &self)),
};
let T13: DeserializeAsWrap<T13, As13> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(13, &self)),
};
let T14: DeserializeAsWrap<T14, As14> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(14, &self)),
};
let T15: DeserializeAsWrap<T15, As15> =
match seq.next_element()? {
Some(value) => value,
None => return Err(DeError::invalid_length(15, &self)),
};
Ok((T0.into_inner(), T1.into_inner(), T2.into_inner(),
T3.into_inner(), T4.into_inner(), T5.into_inner(),
T6.into_inner(), T7.into_inner(), T8.into_inner(),
T9.into_inner(), T10.into_inner(), T11.into_inner(),
T12.into_inner(), T13.into_inner(), T14.into_inner(),
T15.into_inner()))
}
}
deserializer.deserialize_tuple(16,
TupleVisitor::<DeserializeAsWrap<T0, As0>,
DeserializeAsWrap<T1, As1>, DeserializeAsWrap<T2, As2>,
DeserializeAsWrap<T3, As3>, DeserializeAsWrap<T4, As4>,
DeserializeAsWrap<T5, As5>, DeserializeAsWrap<T6, As6>,
DeserializeAsWrap<T7, As7>, DeserializeAsWrap<T8, As8>,
DeserializeAsWrap<T9, As9>, DeserializeAsWrap<T10, As10>,
DeserializeAsWrap<T11, As11>, DeserializeAsWrap<T12, As12>,
DeserializeAsWrap<T13, As13>, DeserializeAsWrap<T14, As14>,
DeserializeAsWrap<T15, As15>>(PhantomData))
}
}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);
735
736#[cfg(feature = "alloc")]
737macro_rules! map_as_tuple_seq_intern {
738 (
739 $tyorig:ident < K $(: $kbound1:ident $(+ $kbound2:ident)*)?, V $(, $typaram:ident : $bound1:ident $(+ $bound2:ident)*)* >,
740 $with_capacity:expr,
741 $ty:ident <(KAs, VAs)>
742 ) => {
743 impl<'de, K, KAs, V, VAs $(, $typaram)*> DeserializeAs<'de, $tyorig<K, V $(, $typaram)*>> for $ty<(KAs, VAs)>
744 where
745 KAs: DeserializeAs<'de, K>,
746 VAs: DeserializeAs<'de, V>,
747 $(K: $kbound1 $(+ $kbound2)*,)?
748 $($typaram: $bound1 $(+ $bound2)*,)*
749 {
750 fn deserialize_as<D>(deserializer: D) -> Result<$tyorig<K, V $(, $typaram)*>, D::Error>
751 where
752 D: Deserializer<'de>,
753 {
754 struct SeqVisitor<K, KAs, V, VAs $(, $typaram)*> {
755 marker: PhantomData<(K, KAs, V, VAs $(, $typaram)*)>,
756 }
757
758 impl<'de, K, KAs, V, VAs $(, $typaram)*> Visitor<'de> for SeqVisitor<K, KAs, V, VAs $(, $typaram)*>
759 where
760 KAs: DeserializeAs<'de, K>,
761 VAs: DeserializeAs<'de, V>,
762 $(K: $kbound1 $(+ $kbound2)*,)?
763 $($typaram: $bound1 $(+ $bound2)*,)*
764 {
765 type Value = $tyorig<K, V $(, $typaram)*>;
766
767 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
768 formatter.write_str("a sequence")
769 }
770
771 #[inline]
772 fn visit_seq<A>(self, access: A) -> Result<Self::Value, A::Error>
773 where
774 A: SeqAccess<'de>,
775 {
776 let iter = utils::SeqIter::new(access);
777 iter.map(|res| {
778 res.map(
779 |(k, v): (DeserializeAsWrap<K, KAs>, DeserializeAsWrap<V, VAs>)| {
780 (k.into_inner(), v.into_inner())
781 },
782 )
783 })
784 .collect()
785 }
786 }
787
788 let visitor = SeqVisitor::<K, KAs, V, VAs $(, $typaram)*> {
789 marker: PhantomData,
790 };
791 deserializer.deserialize_seq(visitor)
792 }
793 }
794 };
795}
796#[cfg(feature = "alloc")]
797macro_rules! map_as_tuple_seq {
798 (
799 $tyorig:ident < K $(: $kbound1:ident $(+ $kbound2:ident)*)?, V $(, $typaram:ident : $bound1:ident $(+ $bound2:ident)*)* >,
800 $with_capacity:expr
801 ) => {
802 map_as_tuple_seq_intern!($tyorig < K $(: $kbound1 $(+ $kbound2)*)? , V $(, $typaram : $bound1 $(+ $bound2)*)* >, $with_capacity, Seq<(KAs, VAs)>);
803 #[cfg(feature = "alloc")]
804 map_as_tuple_seq_intern!($tyorig < K $(: $kbound1 $(+ $kbound2)*)? , V $(, $typaram : $bound1 $(+ $bound2)*)* >, $with_capacity, Vec<(KAs, VAs)>);
805 }
806}
807impl<'de, K, KAs, V, VAs, S> DeserializeAs<'de, IndexMap2<K, V, S>> for
Vec<(KAs, VAs)> where KAs: DeserializeAs<'de, K>,
VAs: DeserializeAs<'de, V>, K: Eq + Hash, S: BuildHasher + Default {
fn deserialize_as<D>(deserializer: D)
-> Result<IndexMap2<K, V, S>, D::Error> where D: Deserializer<'de> {
struct SeqVisitor<K, KAs, V, VAs, S> {
marker: PhantomData<(K, KAs, V, VAs, S)>,
}
impl<'de, K, KAs, V, VAs, S> Visitor<'de> for
SeqVisitor<K, KAs, V, VAs, S> where KAs: DeserializeAs<'de, K>,
VAs: DeserializeAs<'de, V>, K: Eq + Hash, S: BuildHasher + Default
{
type Value = IndexMap2<K, V, S>;
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a sequence")
}
#[inline]
fn visit_seq<A>(self, access: A) -> Result<Self::Value, A::Error>
where A: SeqAccess<'de> {
let iter = utils::SeqIter::new(access);
iter.map(|res|
{
res.map(|(k, v):
(DeserializeAsWrap<K, KAs>, DeserializeAsWrap<V, VAs>)|
{ (k.into_inner(), v.into_inner()) })
}).collect()
}
}
let visitor = SeqVisitor::<K, KAs, V, VAs, S> { marker: PhantomData };
deserializer.deserialize_seq(visitor)
}
}foreach_map!(map_as_tuple_seq);
808
809#[cfg(feature = "alloc")]
810macro_rules! tuple_seq_as_map_impl_intern {
811 (
812 $tyorig:ident < (K, V) $(: $($bound:ident $(+)?)+)? $(, $typaram:ident : $bound1:ident $(+ $bound2:ident)* )* >,
813 $with_capacity:expr,
814 $append:ident,
815 $ty:ident <KAs, VAs>
816 ) => {
817 #[allow(clippy::implicit_hasher)]
818 impl<'de, K, KAs, V, VAs $(, $typaram)*> DeserializeAs<'de, $tyorig < (K, V) $(, $typaram)* >> for $ty<KAs, VAs>
819 where
820 KAs: DeserializeAs<'de, K>,
821 VAs: DeserializeAs<'de, V>,
822 (K, V): $($($bound +)*)?,
823 $($typaram: $bound1 $(+ $bound2)*,)*
824 {
825 fn deserialize_as<D>(deserializer: D) -> Result<$tyorig < (K, V) $(, $typaram)* >, D::Error>
826 where
827 D: Deserializer<'de>,
828 {
829 struct MapVisitor<K, KAs, V, VAs $(, $typaram)*> {
830 marker: PhantomData<(K, KAs, V, VAs $(, $typaram)*)>,
831 }
832
833 impl<'de, K, KAs, V, VAs $(, $typaram)*> Visitor<'de> for MapVisitor<K, KAs, V, VAs $(, $typaram)*>
834 where
835 KAs: DeserializeAs<'de, K>,
836 VAs: DeserializeAs<'de, V>,
837 (K, V): $($($bound +)*)?,
838 $($typaram: $bound1 $(+ $bound2)*,)*
839 {
840 type Value = $tyorig < (K, V) $(, $typaram)* >;
841
842 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
843 formatter.write_str("a map")
844 }
845
846 #[inline]
847 fn visit_map<A>(self, access: A) -> Result<Self::Value, A::Error>
848 where
849 A: MapAccess<'de>,
850 {
851 let iter = utils::MapIter::new(access);
852 iter.map(|res| {
853 res.map(
854 |(k, v): (DeserializeAsWrap<K, KAs>, DeserializeAsWrap<V, VAs>)| {
855 (k.into_inner(), v.into_inner())
856 },
857 )
858 })
859 .collect()
860 }
861 }
862
863 let visitor = MapVisitor::<K, KAs, V, VAs $(, $typaram)*> {
864 marker: PhantomData,
865 };
866 deserializer.deserialize_map(visitor)
867 }
868 }
869 }
870}
871#[cfg(feature = "alloc")]
872macro_rules! tuple_seq_as_map_impl {
873 (
874 $tyorig:ident < T $(: $($bound:ident $(+)?)+)? $(, $typaram:ident : $bound1:ident $(+ $bound2:ident)* )* >,
875 $with_capacity:expr,
876 $append:ident
877 ) => {
878 tuple_seq_as_map_impl_intern!($tyorig < (K, V) $(: $($bound +)+)? $(, $typaram: $bound1 $(+ $bound2)*)*>, $with_capacity, $append, Map<KAs, VAs>);
879 #[cfg(feature = "alloc")]
880 tuple_seq_as_map_impl_intern!($tyorig < (K, V) $(: $($bound +)+)? $(, $typaram: $bound1 $(+ $bound2)*)*>, $with_capacity, $append, BTreeMap<KAs, VAs>);
881 #[cfg(feature = "std")]
882 tuple_seq_as_map_impl_intern!($tyorig < (K, V) $(: $($bound +)+)? $(, $typaram: $bound1 $(+ $bound2)*)*>, $with_capacity, $append, HashMap<KAs, VAs>);
883 }
884}
885#[allow(clippy :: implicit_hasher)]
impl<'de, K, KAs, V, VAs> DeserializeAs<'de, VecDeque<(K, V)>> for
HashMap<KAs, VAs> where KAs: DeserializeAs<'de, K>,
VAs: DeserializeAs<'de, V>, (K, V): {
fn deserialize_as<D>(deserializer: D)
-> Result<VecDeque<(K, V)>, D::Error> where D: Deserializer<'de> {
struct MapVisitor<K, KAs, V, VAs> {
marker: PhantomData<(K, KAs, V, VAs)>,
}
impl<'de, K, KAs, V, VAs> Visitor<'de> for MapVisitor<K, KAs, V, VAs>
where KAs: DeserializeAs<'de, K>, VAs: DeserializeAs<'de, V>,
(K, V): {
type Value = VecDeque<(K, V)>;
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a map")
}
#[inline]
fn visit_map<A>(self, access: A) -> Result<Self::Value, A::Error>
where A: MapAccess<'de> {
let iter = utils::MapIter::new(access);
iter.map(|res|
{
res.map(|(k, v):
(DeserializeAsWrap<K, KAs>, DeserializeAsWrap<V, VAs>)|
{ (k.into_inner(), v.into_inner()) })
}).collect()
}
}
let visitor = MapVisitor::<K, KAs, V, VAs> { marker: PhantomData };
deserializer.deserialize_map(visitor)
}
}foreach_seq!(tuple_seq_as_map_impl);
886
887#[cfg(feature = "alloc")]
889macro_rules! tuple_seq_as_map_option_impl {
890 ($ty:ident) => {
891 #[allow(clippy::implicit_hasher)]
892 impl<'de, K, KAs, V, VAs> DeserializeAs<'de, Option<(K, V)>> for $ty<KAs, VAs>
893 where
894 KAs: DeserializeAs<'de, K>,
895 VAs: DeserializeAs<'de, V>,
896 {
897 fn deserialize_as<D>(deserializer: D) -> Result<Option<(K, V)>, D::Error>
898 where
899 D: Deserializer<'de>,
900 {
901 struct MapVisitor<K, KAs, V, VAs> {
902 marker: PhantomData<(K, KAs, V, VAs)>,
903 }
904
905 impl<'de, K, KAs, V, VAs> Visitor<'de> for MapVisitor<K, KAs, V, VAs>
906 where
907 KAs: DeserializeAs<'de, K>,
908 VAs: DeserializeAs<'de, V>,
909 {
910 type Value = Option<(K, V)>;
911
912 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
913 formatter.write_str("a map of size 1")
914 }
915
916 #[inline]
917 fn visit_map<A>(self, access: A) -> Result<Self::Value, A::Error>
918 where
919 A: MapAccess<'de>,
920 {
921 let iter = utils::MapIter::new(access);
922 iter.map(|res| {
923 res.map(
924 |(k, v): (DeserializeAsWrap<K, KAs>, DeserializeAsWrap<V, VAs>)| {
925 (k.into_inner(), v.into_inner())
926 },
927 )
928 })
929 .next()
930 .transpose()
931 }
932 }
933
934 let visitor = MapVisitor::<K, KAs, V, VAs> {
935 marker: PhantomData,
936 };
937 deserializer.deserialize_map(visitor)
938 }
939 }
940 };
941}
942#[cfg(feature = "alloc")]
943#[allow(clippy :: implicit_hasher)]
impl<'de, K, KAs, V, VAs> DeserializeAs<'de, Option<(K, V)>> for
BTreeMap<KAs, VAs> where KAs: DeserializeAs<'de, K>,
VAs: DeserializeAs<'de, V> {
fn deserialize_as<D>(deserializer: D) -> Result<Option<(K, V)>, D::Error>
where D: Deserializer<'de> {
struct MapVisitor<K, KAs, V, VAs> {
marker: PhantomData<(K, KAs, V, VAs)>,
}
impl<'de, K, KAs, V, VAs> Visitor<'de> for MapVisitor<K, KAs, V, VAs>
where KAs: DeserializeAs<'de, K>, VAs: DeserializeAs<'de, V> {
type Value = Option<(K, V)>;
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a map of size 1")
}
#[inline]
fn visit_map<A>(self, access: A) -> Result<Self::Value, A::Error>
where A: MapAccess<'de> {
let iter = utils::MapIter::new(access);
iter.map(|res|
{
res.map(|(k, v):
(DeserializeAsWrap<K, KAs>, DeserializeAsWrap<V, VAs>)|
{ (k.into_inner(), v.into_inner()) })
}).next().transpose()
}
}
let visitor = MapVisitor::<K, KAs, V, VAs> { marker: PhantomData };
deserializer.deserialize_map(visitor)
}
}tuple_seq_as_map_option_impl!(BTreeMap);
944#[cfg(feature = "std")]
945#[allow(clippy :: implicit_hasher)]
impl<'de, K, KAs, V, VAs> DeserializeAs<'de, Option<(K, V)>> for
HashMap<KAs, VAs> where KAs: DeserializeAs<'de, K>,
VAs: DeserializeAs<'de, V> {
fn deserialize_as<D>(deserializer: D) -> Result<Option<(K, V)>, D::Error>
where D: Deserializer<'de> {
struct MapVisitor<K, KAs, V, VAs> {
marker: PhantomData<(K, KAs, V, VAs)>,
}
impl<'de, K, KAs, V, VAs> Visitor<'de> for MapVisitor<K, KAs, V, VAs>
where KAs: DeserializeAs<'de, K>, VAs: DeserializeAs<'de, V> {
type Value = Option<(K, V)>;
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_str("a map of size 1")
}
#[inline]
fn visit_map<A>(self, access: A) -> Result<Self::Value, A::Error>
where A: MapAccess<'de> {
let iter = utils::MapIter::new(access);
iter.map(|res|
{
res.map(|(k, v):
(DeserializeAsWrap<K, KAs>, DeserializeAsWrap<V, VAs>)|
{ (k.into_inner(), v.into_inner()) })
}).next().transpose()
}
}
let visitor = MapVisitor::<K, KAs, V, VAs> { marker: PhantomData };
deserializer.deserialize_map(visitor)
}
}tuple_seq_as_map_option_impl!(HashMap);
946
947macro_rules! tuple_seq_as_map_arr {
948 ($ty:ident <KAs, VAs>) => {
949 #[allow(clippy::implicit_hasher)]
950 impl<'de, K, KAs, V, VAs, const N: usize> DeserializeAs<'de, [(K, V); N]> for $ty<KAs, VAs>
951 where
952 KAs: DeserializeAs<'de, K>,
953 VAs: DeserializeAs<'de, V>,
954 {
955 fn deserialize_as<D>(deserializer: D) -> Result<[(K, V); N], D::Error>
956 where
957 D: Deserializer<'de>,
958 {
959 struct MapVisitor<K, KAs, V, VAs, const M: usize> {
960 marker: PhantomData<(K, KAs, V, VAs)>,
961 }
962
963 impl<'de, K, KAs, V, VAs, const M: usize> Visitor<'de> for MapVisitor<K, KAs, V, VAs, M>
964 where
965 KAs: DeserializeAs<'de, K>,
966 VAs: DeserializeAs<'de, V>,
967 {
968 type Value = [(K, V); M];
969
970 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
971 formatter.write_fmt(format_args!("a map of length {}", M))
972 }
973
974 fn visit_map<A>(self, access: A) -> Result<Self::Value, A::Error>
975 where
976 A: MapAccess<'de>,
977 {
978 utils::array_from_iterator(utils::MapIter::new(access).map(
979 |res: Result<(DeserializeAsWrap<K, KAs>, DeserializeAsWrap<V, VAs>), A::Error>| {
980 res.map(|(k, v)| (k.into_inner(), v.into_inner()))
981 }
982 ), &self)
983 }
984 }
985
986 let visitor = MapVisitor::<K, KAs, V, VAs, N> {
987 marker: PhantomData,
988 };
989 deserializer.deserialize_map(visitor)
990 }
991 }
992 }
993}
994#[allow(clippy :: implicit_hasher)]
impl<'de, K, KAs, V, VAs, const N : usize> DeserializeAs<'de, [(K, V); N]> for
Map<KAs, VAs> where KAs: DeserializeAs<'de, K>, VAs: DeserializeAs<'de, V>
{
fn deserialize_as<D>(deserializer: D) -> Result<[(K, V); N], D::Error>
where D: Deserializer<'de> {
struct MapVisitor<K, KAs, V, VAs, const M : usize> {
marker: PhantomData<(K, KAs, V, VAs)>,
}
impl<'de, K, KAs, V, VAs, const M : usize> Visitor<'de> for
MapVisitor<K, KAs, V, VAs, M> where KAs: DeserializeAs<'de, K>,
VAs: DeserializeAs<'de, V> {
type Value = [(K, V); M];
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_fmt(format_args!("a map of length {0}", M))
}
fn visit_map<A>(self, access: A) -> Result<Self::Value, A::Error>
where A: MapAccess<'de> {
utils::array_from_iterator(utils::MapIter::new(access).map(|res:
Result<(DeserializeAsWrap<K, KAs>,
DeserializeAsWrap<V, VAs>), A::Error>|
{ res.map(|(k, v)| (k.into_inner(), v.into_inner())) }),
&self)
}
}
let visitor = MapVisitor::<K, KAs, V, VAs, N> { marker: PhantomData };
deserializer.deserialize_map(visitor)
}
}tuple_seq_as_map_arr!(Map<KAs, VAs>);
995#[cfg(feature = "alloc")]
996#[allow(clippy :: implicit_hasher)]
impl<'de, K, KAs, V, VAs, const N : usize> DeserializeAs<'de, [(K, V); N]> for
BTreeMap<KAs, VAs> where KAs: DeserializeAs<'de, K>,
VAs: DeserializeAs<'de, V> {
fn deserialize_as<D>(deserializer: D) -> Result<[(K, V); N], D::Error>
where D: Deserializer<'de> {
struct MapVisitor<K, KAs, V, VAs, const M : usize> {
marker: PhantomData<(K, KAs, V, VAs)>,
}
impl<'de, K, KAs, V, VAs, const M : usize> Visitor<'de> for
MapVisitor<K, KAs, V, VAs, M> where KAs: DeserializeAs<'de, K>,
VAs: DeserializeAs<'de, V> {
type Value = [(K, V); M];
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_fmt(format_args!("a map of length {0}", M))
}
fn visit_map<A>(self, access: A) -> Result<Self::Value, A::Error>
where A: MapAccess<'de> {
utils::array_from_iterator(utils::MapIter::new(access).map(|res:
Result<(DeserializeAsWrap<K, KAs>,
DeserializeAsWrap<V, VAs>), A::Error>|
{ res.map(|(k, v)| (k.into_inner(), v.into_inner())) }),
&self)
}
}
let visitor = MapVisitor::<K, KAs, V, VAs, N> { marker: PhantomData };
deserializer.deserialize_map(visitor)
}
}tuple_seq_as_map_arr!(BTreeMap<KAs, VAs>);
997#[cfg(feature = "std")]
998#[allow(clippy :: implicit_hasher)]
impl<'de, K, KAs, V, VAs, const N : usize> DeserializeAs<'de, [(K, V); N]> for
HashMap<KAs, VAs> where KAs: DeserializeAs<'de, K>,
VAs: DeserializeAs<'de, V> {
fn deserialize_as<D>(deserializer: D) -> Result<[(K, V); N], D::Error>
where D: Deserializer<'de> {
struct MapVisitor<K, KAs, V, VAs, const M : usize> {
marker: PhantomData<(K, KAs, V, VAs)>,
}
impl<'de, K, KAs, V, VAs, const M : usize> Visitor<'de> for
MapVisitor<K, KAs, V, VAs, M> where KAs: DeserializeAs<'de, K>,
VAs: DeserializeAs<'de, V> {
type Value = [(K, V); M];
fn expecting(&self, formatter: &mut fmt::Formatter<'_>)
-> fmt::Result {
formatter.write_fmt(format_args!("a map of length {0}", M))
}
fn visit_map<A>(self, access: A) -> Result<Self::Value, A::Error>
where A: MapAccess<'de> {
utils::array_from_iterator(utils::MapIter::new(access).map(|res:
Result<(DeserializeAsWrap<K, KAs>,
DeserializeAsWrap<V, VAs>), A::Error>|
{ res.map(|(k, v)| (k.into_inner(), v.into_inner())) }),
&self)
}
}
let visitor = MapVisitor::<K, KAs, V, VAs, N> { marker: PhantomData };
deserializer.deserialize_map(visitor)
}
}tuple_seq_as_map_arr!(HashMap<KAs, VAs>);
999
1000impl<'de, T: Deserialize<'de>> DeserializeAs<'de, T> for Same {
1005 fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>
1006 where
1007 D: Deserializer<'de>,
1008 {
1009 T::deserialize(deserializer)
1010 }
1011}
1012
1013impl<'de, T> DeserializeAs<'de, T> for DisplayFromStr
1014where
1015 T: FromStr,
1016 T::Err: Display,
1017{
1018 fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>
1019 where
1020 D: Deserializer<'de>,
1021 {
1022 struct Helper<S>(PhantomData<S>);
1023 impl<S> Visitor<'_> for Helper<S>
1024 where
1025 S: FromStr,
1026 <S as FromStr>::Err: Display,
1027 {
1028 type Value = S;
1029
1030 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
1031 formatter.write_str("a string")
1032 }
1033
1034 fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
1035 where
1036 E: DeError,
1037 {
1038 value.parse::<Self::Value>().map_err(DeError::custom)
1039 }
1040 }
1041
1042 deserializer.deserialize_str(Helper(PhantomData))
1043 }
1044}
1045
1046impl<'de, T, H, F> DeserializeAs<'de, T> for IfIsHumanReadable<H, F>
1047where
1048 H: DeserializeAs<'de, T>,
1049 F: DeserializeAs<'de, T>,
1050{
1051 fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>
1052 where
1053 D: Deserializer<'de>,
1054 {
1055 if deserializer.is_human_readable() {
1056 H::deserialize_as(deserializer)
1057 } else {
1058 F::deserialize_as(deserializer)
1059 }
1060 }
1061}
1062
1063impl<'de, Str> DeserializeAs<'de, Option<Str>> for NoneAsEmptyString
1064where
1065 Str: FromStr,
1066 Str::Err: Display,
1067{
1068 fn deserialize_as<D>(deserializer: D) -> Result<Option<Str>, D::Error>
1069 where
1070 D: Deserializer<'de>,
1071 {
1072 struct OptionStringEmptyNone<S>(PhantomData<S>);
1073 impl<S> Visitor<'_> for OptionStringEmptyNone<S>
1074 where
1075 S: FromStr,
1076 S::Err: Display,
1077 {
1078 type Value = Option<S>;
1079
1080 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
1081 formatter.write_str("a string")
1082 }
1083
1084 fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
1085 where
1086 E: DeError,
1087 {
1088 match value {
1089 "" => Ok(None),
1090 v => S::from_str(v).map(Some).map_err(DeError::custom),
1091 }
1092 }
1093
1094 fn visit_unit<E>(self) -> Result<Self::Value, E>
1096 where
1097 E: DeError,
1098 {
1099 Ok(None)
1100 }
1101 }
1102
1103 deserializer.deserialize_any(OptionStringEmptyNone(PhantomData))
1104 }
1105}
1106
1107#[cfg(feature = "alloc")]
1108impl<'de, T, TAs> DeserializeAs<'de, T> for DefaultOnError<TAs>
1109where
1110 TAs: DeserializeAs<'de, T>,
1111 T: Default,
1112{
1113 fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>
1114 where
1115 D: Deserializer<'de>,
1116 {
1117 let is_hr = deserializer.is_human_readable();
1118 let content: content::de::Content<'de> = match Deserialize::deserialize(deserializer) {
1119 Ok(content) => content,
1120 Err(_) => return Ok(Default::default()),
1121 };
1122
1123 Ok(
1124 match <DeserializeAsWrap<T, TAs>>::deserialize(content::de::ContentDeserializer::<
1125 D::Error,
1126 >::new(content, is_hr))
1127 {
1128 Ok(elem) => elem.into_inner(),
1129 Err(_) => Default::default(),
1130 },
1131 )
1132 }
1133}
1134
1135#[cfg(feature = "alloc")]
1136impl<'de> DeserializeAs<'de, Vec<u8>> for BytesOrString {
1137 fn deserialize_as<D>(deserializer: D) -> Result<Vec<u8>, D::Error>
1138 where
1139 D: Deserializer<'de>,
1140 {
1141 struct BytesOrStringVisitor;
1142 impl<'de> Visitor<'de> for BytesOrStringVisitor {
1143 type Value = Vec<u8>;
1144
1145 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
1146 formatter.write_str("a list of bytes or a string")
1147 }
1148
1149 fn visit_bytes<E>(self, v: &[u8]) -> Result<Self::Value, E> {
1150 Ok(v.to_vec())
1151 }
1152
1153 #[cfg(feature = "alloc")]
1154 fn visit_byte_buf<E>(self, v: Vec<u8>) -> Result<Self::Value, E> {
1155 Ok(v)
1156 }
1157
1158 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> {
1159 Ok(v.as_bytes().to_vec())
1160 }
1161
1162 #[cfg(feature = "alloc")]
1163 fn visit_string<E>(self, v: String) -> Result<Self::Value, E> {
1164 Ok(v.into_bytes())
1165 }
1166
1167 fn visit_seq<A>(self, seq: A) -> Result<Self::Value, A::Error>
1168 where
1169 A: SeqAccess<'de>,
1170 {
1171 utils::SeqIter::new(seq).collect()
1172 }
1173 }
1174 deserializer.deserialize_any(BytesOrStringVisitor)
1175 }
1176}
1177
1178impl<'de, SEPARATOR, I, T> DeserializeAs<'de, I> for StringWithSeparator<SEPARATOR, T>
1179where
1180 SEPARATOR: Separator,
1181 I: FromIterator<T>,
1182 T: FromStr,
1183 T::Err: Display,
1184{
1185 fn deserialize_as<D>(deserializer: D) -> Result<I, D::Error>
1186 where
1187 D: Deserializer<'de>,
1188 {
1189 struct Helper<SEPARATOR, I, T>(PhantomData<(SEPARATOR, I, T)>);
1190
1191 impl<SEPARATOR, I, T> Visitor<'_> for Helper<SEPARATOR, I, T>
1192 where
1193 SEPARATOR: Separator,
1194 I: FromIterator<T>,
1195 T: FromStr,
1196 T::Err: Display,
1197 {
1198 type Value = I;
1199
1200 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
1201 formatter.write_str("a string")
1202 }
1203
1204 fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
1205 where
1206 E: DeError,
1207 {
1208 if value.is_empty() {
1209 Ok(None.into_iter().collect())
1210 } else {
1211 value
1212 .split(SEPARATOR::separator())
1213 .map(FromStr::from_str)
1214 .collect::<Result<_, _>>()
1215 .map_err(DeError::custom)
1216 }
1217 }
1218 }
1219
1220 deserializer.deserialize_str(Helper::<SEPARATOR, I, T>(PhantomData))
1221 }
1222}
1223
1224macro_rules! use_signed_duration {
1225 (
1226 $main_trait:ident $internal_trait:ident =>
1227 {
1228 $ty:ty; $converter:ident =>
1229 $({
1230 $format:ty, $strictness:ty =>
1231 $($tbound:ident: $bound:ident $(,)?)*
1232 })*
1233 }
1234 ) => {
1235 $(
1236 impl<'de, $($tbound,)*> DeserializeAs<'de, $ty> for $main_trait<$format, $strictness>
1237 where
1238 $($tbound: $bound,)*
1239 {
1240 fn deserialize_as<D>(deserializer: D) -> Result<$ty, D::Error>
1241 where
1242 D: Deserializer<'de>,
1243 {
1244 let dur: DurationSigned = $internal_trait::<$format, $strictness>::deserialize_as(deserializer)?;
1245 dur.$converter::<D>()
1246 }
1247 }
1248 )*
1249 };
1250 (
1251 $( $main_trait:ident $internal_trait:ident, )+ => $rest:tt
1252 ) => {
1253 $( use_signed_duration!($main_trait $internal_trait => $rest); )+
1254 };
1255}
1256
1257impl<'de, FORMAT> DeserializeAs<'de, Duration> for
DurationNanoSeconds<FORMAT, Flexible> where FORMAT: Format {
fn deserialize_as<D>(deserializer: D) -> Result<Duration, D::Error> where
D: Deserializer<'de> {
let dur: DurationSigned =
DurationNanoSeconds::<FORMAT,
Flexible>::deserialize_as(deserializer)?;
dur.to_std_duration::<D>()
}
}use_signed_duration!(
1258 DurationSeconds DurationSeconds,
1259 DurationMilliSeconds DurationMilliSeconds,
1260 DurationMicroSeconds DurationMicroSeconds,
1261 DurationNanoSeconds DurationNanoSeconds,
1262 => {
1263 Duration; to_std_duration =>
1264 {u64, Strict =>}
1265 {FORMAT, Flexible => FORMAT: Format}
1266 }
1267);
1268#[cfg(feature = "alloc")]
1269impl<'de> DeserializeAs<'de, Duration> for DurationNanoSeconds<String, Strict>
where {
fn deserialize_as<D>(deserializer: D) -> Result<Duration, D::Error> where
D: Deserializer<'de> {
let dur: DurationSigned =
DurationNanoSeconds::<String,
Strict>::deserialize_as(deserializer)?;
dur.to_std_duration::<D>()
}
}use_signed_duration!(
1270 DurationSeconds DurationSeconds,
1271 DurationMilliSeconds DurationMilliSeconds,
1272 DurationMicroSeconds DurationMicroSeconds,
1273 DurationNanoSeconds DurationNanoSeconds,
1274 => {
1275 Duration; to_std_duration =>
1276 {String, Strict =>}
1277 }
1278);
1279#[cfg(feature = "std")]
1280impl<'de> DeserializeAs<'de, Duration> for DurationNanoSeconds<f64, Strict>
where {
fn deserialize_as<D>(deserializer: D) -> Result<Duration, D::Error> where
D: Deserializer<'de> {
let dur: DurationSigned =
DurationNanoSeconds::<f64, Strict>::deserialize_as(deserializer)?;
dur.to_std_duration::<D>()
}
}use_signed_duration!(
1281 DurationSeconds DurationSeconds,
1282 DurationMilliSeconds DurationMilliSeconds,
1283 DurationMicroSeconds DurationMicroSeconds,
1284 DurationNanoSeconds DurationNanoSeconds,
1285 => {
1286 Duration; to_std_duration =>
1287 {f64, Strict =>}
1289 }
1290);
1291impl<'de, FORMAT> DeserializeAs<'de, Duration> for
DurationNanoSecondsWithFrac<FORMAT, Flexible> where FORMAT: Format {
fn deserialize_as<D>(deserializer: D) -> Result<Duration, D::Error> where
D: Deserializer<'de> {
let dur: DurationSigned =
DurationNanoSecondsWithFrac::<FORMAT,
Flexible>::deserialize_as(deserializer)?;
dur.to_std_duration::<D>()
}
}use_signed_duration!(
1292 DurationSecondsWithFrac DurationSecondsWithFrac,
1293 DurationMilliSecondsWithFrac DurationMilliSecondsWithFrac,
1294 DurationMicroSecondsWithFrac DurationMicroSecondsWithFrac,
1295 DurationNanoSecondsWithFrac DurationNanoSecondsWithFrac,
1296 => {
1297 Duration; to_std_duration =>
1298 {f64, Strict =>}
1299 {FORMAT, Flexible => FORMAT: Format}
1300 }
1301);
1302#[cfg(feature = "alloc")]
1303impl<'de> DeserializeAs<'de, Duration> for
DurationNanoSecondsWithFrac<String, Strict> where {
fn deserialize_as<D>(deserializer: D) -> Result<Duration, D::Error> where
D: Deserializer<'de> {
let dur: DurationSigned =
DurationNanoSecondsWithFrac::<String,
Strict>::deserialize_as(deserializer)?;
dur.to_std_duration::<D>()
}
}use_signed_duration!(
1304 DurationSecondsWithFrac DurationSecondsWithFrac,
1305 DurationMilliSecondsWithFrac DurationMilliSecondsWithFrac,
1306 DurationMicroSecondsWithFrac DurationMicroSecondsWithFrac,
1307 DurationNanoSecondsWithFrac DurationNanoSecondsWithFrac,
1308 => {
1309 Duration; to_std_duration =>
1310 {String, Strict =>}
1311 }
1312);
1313
1314#[cfg(feature = "std")]
1315impl<'de, FORMAT> DeserializeAs<'de, SystemTime> for
TimestampNanoSeconds<FORMAT, Flexible> where FORMAT: Format {
fn deserialize_as<D>(deserializer: D) -> Result<SystemTime, D::Error>
where D: Deserializer<'de> {
let dur: DurationSigned =
DurationNanoSeconds::<FORMAT,
Flexible>::deserialize_as(deserializer)?;
dur.to_system_time::<D>()
}
}use_signed_duration!(
1316 TimestampSeconds DurationSeconds,
1317 TimestampMilliSeconds DurationMilliSeconds,
1318 TimestampMicroSeconds DurationMicroSeconds,
1319 TimestampNanoSeconds DurationNanoSeconds,
1320 => {
1321 SystemTime; to_system_time =>
1322 {i64, Strict =>}
1323 {f64, Strict =>}
1324 {String, Strict =>}
1325 {FORMAT, Flexible => FORMAT: Format}
1326 }
1327);
1328#[cfg(feature = "std")]
1329impl<'de, FORMAT> DeserializeAs<'de, SystemTime> for
TimestampNanoSecondsWithFrac<FORMAT, Flexible> where FORMAT: Format {
fn deserialize_as<D>(deserializer: D) -> Result<SystemTime, D::Error>
where D: Deserializer<'de> {
let dur: DurationSigned =
DurationNanoSecondsWithFrac::<FORMAT,
Flexible>::deserialize_as(deserializer)?;
dur.to_system_time::<D>()
}
}use_signed_duration!(
1330 TimestampSecondsWithFrac DurationSecondsWithFrac,
1331 TimestampMilliSecondsWithFrac DurationMilliSecondsWithFrac,
1332 TimestampMicroSecondsWithFrac DurationMicroSecondsWithFrac,
1333 TimestampNanoSecondsWithFrac DurationNanoSecondsWithFrac,
1334 => {
1335 SystemTime; to_system_time =>
1336 {f64, Strict =>}
1337 {String, Strict =>}
1338 {FORMAT, Flexible => FORMAT: Format}
1339 }
1340);
1341
1342impl<'de, T, U> DeserializeAs<'de, T> for DefaultOnNull<U>
1343where
1344 U: DeserializeAs<'de, T>,
1345 T: Default,
1346{
1347 fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>
1348 where
1349 D: Deserializer<'de>,
1350 {
1351 Ok(Option::<U>::deserialize_as(deserializer)?.unwrap_or_default())
1352 }
1353}
1354
1355impl<'de> DeserializeAs<'de, &'de [u8]> for Bytes {
1356 fn deserialize_as<D>(deserializer: D) -> Result<&'de [u8], D::Error>
1357 where
1358 D: Deserializer<'de>,
1359 {
1360 <&'de [u8]>::deserialize(deserializer)
1361 }
1362}
1363
1364#[cfg(feature = "alloc")]
1374impl<'de> DeserializeAs<'de, Vec<u8>> for Bytes {
1375 fn deserialize_as<D>(deserializer: D) -> Result<Vec<u8>, D::Error>
1376 where
1377 D: Deserializer<'de>,
1378 {
1379 struct VecVisitor;
1380
1381 impl<'de> Visitor<'de> for VecVisitor {
1382 type Value = Vec<u8>;
1383
1384 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
1385 formatter.write_str("a byte array")
1386 }
1387
1388 fn visit_seq<A>(self, seq: A) -> Result<Self::Value, A::Error>
1389 where
1390 A: SeqAccess<'de>,
1391 {
1392 utils::SeqIter::new(seq).collect::<Result<_, _>>()
1393 }
1394
1395 fn visit_bytes<E>(self, v: &[u8]) -> Result<Self::Value, E>
1396 where
1397 E: DeError,
1398 {
1399 Ok(v.to_vec())
1400 }
1401
1402 fn visit_byte_buf<E>(self, v: Vec<u8>) -> Result<Self::Value, E>
1403 where
1404 E: DeError,
1405 {
1406 Ok(v)
1407 }
1408
1409 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
1410 where
1411 E: DeError,
1412 {
1413 Ok(v.as_bytes().to_vec())
1414 }
1415
1416 fn visit_string<E>(self, v: String) -> Result<Self::Value, E>
1417 where
1418 E: DeError,
1419 {
1420 Ok(v.into_bytes())
1421 }
1422 }
1423
1424 deserializer.deserialize_byte_buf(VecVisitor)
1425 }
1426}
1427
1428#[cfg(feature = "alloc")]
1429impl<'de> DeserializeAs<'de, Box<[u8]>> for Bytes {
1430 fn deserialize_as<D>(deserializer: D) -> Result<Box<[u8]>, D::Error>
1431 where
1432 D: Deserializer<'de>,
1433 {
1434 <Bytes as DeserializeAs<'de, Vec<u8>>>::deserialize_as(deserializer)
1435 .map(Vec::into_boxed_slice)
1436 }
1437}
1438
1439#[cfg(feature = "alloc")]
1451impl<'de> DeserializeAs<'de, Cow<'de, [u8]>> for Bytes {
1452 fn deserialize_as<D>(deserializer: D) -> Result<Cow<'de, [u8]>, D::Error>
1453 where
1454 D: Deserializer<'de>,
1455 {
1456 struct CowVisitor;
1457
1458 impl<'de> Visitor<'de> for CowVisitor {
1459 type Value = Cow<'de, [u8]>;
1460
1461 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
1462 formatter.write_str("a byte array")
1463 }
1464
1465 fn visit_borrowed_bytes<E>(self, v: &'de [u8]) -> Result<Self::Value, E>
1466 where
1467 E: DeError,
1468 {
1469 Ok(Cow::Borrowed(v))
1470 }
1471
1472 fn visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E>
1473 where
1474 E: DeError,
1475 {
1476 Ok(Cow::Borrowed(v.as_bytes()))
1477 }
1478
1479 fn visit_bytes<E>(self, v: &[u8]) -> Result<Self::Value, E>
1480 where
1481 E: DeError,
1482 {
1483 Ok(Cow::Owned(v.to_vec()))
1484 }
1485
1486 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
1487 where
1488 E: DeError,
1489 {
1490 Ok(Cow::Owned(v.as_bytes().to_vec()))
1491 }
1492
1493 fn visit_byte_buf<E>(self, v: Vec<u8>) -> Result<Self::Value, E>
1494 where
1495 E: DeError,
1496 {
1497 Ok(Cow::Owned(v))
1498 }
1499
1500 fn visit_string<E>(self, v: String) -> Result<Self::Value, E>
1501 where
1502 E: DeError,
1503 {
1504 Ok(Cow::Owned(v.into_bytes()))
1505 }
1506
1507 fn visit_seq<V>(self, seq: V) -> Result<Self::Value, V::Error>
1508 where
1509 V: SeqAccess<'de>,
1510 {
1511 Ok(Cow::Owned(
1512 utils::SeqIter::new(seq).collect::<Result<_, _>>()?,
1513 ))
1514 }
1515 }
1516
1517 deserializer.deserialize_bytes(CowVisitor)
1518 }
1519}
1520
1521impl<'de, const N: usize> DeserializeAs<'de, [u8; N]> for Bytes {
1522 fn deserialize_as<D>(deserializer: D) -> Result<[u8; N], D::Error>
1523 where
1524 D: Deserializer<'de>,
1525 {
1526 struct ArrayVisitor<const M: usize>;
1527
1528 impl<'de, const M: usize> Visitor<'de> for ArrayVisitor<M> {
1529 type Value = [u8; M];
1530
1531 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
1532 formatter.write_fmt(format_args!("an byte array of size {0}", M)format_args!("an byte array of size {M}"))
1533 }
1534
1535 fn visit_seq<A>(self, seq: A) -> Result<Self::Value, A::Error>
1536 where
1537 A: SeqAccess<'de>,
1538 {
1539 utils::array_from_iterator(utils::SeqIter::new(seq), &self)
1540 }
1541
1542 fn visit_bytes<E>(self, v: &[u8]) -> Result<Self::Value, E>
1543 where
1544 E: DeError,
1545 {
1546 v.try_into()
1547 .map_err(|_| DeError::invalid_length(v.len(), &self))
1548 }
1549
1550 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
1551 where
1552 E: DeError,
1553 {
1554 v.as_bytes()
1555 .try_into()
1556 .map_err(|_| DeError::invalid_length(v.len(), &self))
1557 }
1558 }
1559
1560 deserializer.deserialize_bytes(ArrayVisitor::<N>)
1561 }
1562}
1563
1564impl<'de, const N: usize> DeserializeAs<'de, &'de [u8; N]> for Bytes {
1565 fn deserialize_as<D>(deserializer: D) -> Result<&'de [u8; N], D::Error>
1566 where
1567 D: Deserializer<'de>,
1568 {
1569 struct ArrayVisitor<const M: usize>;
1570
1571 impl<'de, const M: usize> Visitor<'de> for ArrayVisitor<M> {
1572 type Value = &'de [u8; M];
1573
1574 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
1575 formatter.write_fmt(format_args!("a borrowed byte array of size {0}", M)format_args!("a borrowed byte array of size {M}"))
1576 }
1577
1578 fn visit_borrowed_bytes<E>(self, v: &'de [u8]) -> Result<Self::Value, E>
1579 where
1580 E: DeError,
1581 {
1582 v.try_into()
1583 .map_err(|_| DeError::invalid_length(v.len(), &self))
1584 }
1585
1586 fn visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E>
1587 where
1588 E: DeError,
1589 {
1590 v.as_bytes()
1591 .try_into()
1592 .map_err(|_| DeError::invalid_length(v.len(), &self))
1593 }
1594 }
1595
1596 deserializer.deserialize_bytes(ArrayVisitor::<N>)
1597 }
1598}
1599
1600#[cfg(feature = "alloc")]
1601impl<'de, const N: usize> DeserializeAs<'de, Cow<'de, [u8; N]>> for Bytes {
1602 fn deserialize_as<D>(deserializer: D) -> Result<Cow<'de, [u8; N]>, D::Error>
1603 where
1604 D: Deserializer<'de>,
1605 {
1606 struct CowVisitor<const M: usize>;
1607
1608 impl<'de, const M: usize> Visitor<'de> for CowVisitor<M> {
1609 type Value = Cow<'de, [u8; M]>;
1610
1611 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
1612 formatter.write_str("a byte array")
1613 }
1614
1615 fn visit_borrowed_bytes<E>(self, v: &'de [u8]) -> Result<Self::Value, E>
1616 where
1617 E: DeError,
1618 {
1619 Ok(Cow::Borrowed(
1620 v.try_into()
1621 .map_err(|_| DeError::invalid_length(v.len(), &self))?,
1622 ))
1623 }
1624
1625 fn visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E>
1626 where
1627 E: DeError,
1628 {
1629 Ok(Cow::Borrowed(
1630 v.as_bytes()
1631 .try_into()
1632 .map_err(|_| DeError::invalid_length(v.len(), &self))?,
1633 ))
1634 }
1635
1636 fn visit_bytes<E>(self, v: &[u8]) -> Result<Self::Value, E>
1637 where
1638 E: DeError,
1639 {
1640 Ok(Cow::Owned(
1641 v.to_vec()
1642 .try_into()
1643 .map_err(|_| DeError::invalid_length(v.len(), &self))?,
1644 ))
1645 }
1646
1647 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
1648 where
1649 E: DeError,
1650 {
1651 Ok(Cow::Owned(
1652 v.as_bytes()
1653 .to_vec()
1654 .try_into()
1655 .map_err(|_| DeError::invalid_length(v.len(), &self))?,
1656 ))
1657 }
1658
1659 fn visit_byte_buf<E>(self, v: Vec<u8>) -> Result<Self::Value, E>
1660 where
1661 E: DeError,
1662 {
1663 let len = v.len();
1664 Ok(Cow::Owned(
1665 v.try_into()
1666 .map_err(|_| DeError::invalid_length(len, &self))?,
1667 ))
1668 }
1669
1670 fn visit_string<E>(self, v: String) -> Result<Self::Value, E>
1671 where
1672 E: DeError,
1673 {
1674 let len = v.len();
1675 Ok(Cow::Owned(
1676 v.into_bytes()
1677 .try_into()
1678 .map_err(|_| DeError::invalid_length(len, &self))?,
1679 ))
1680 }
1681
1682 fn visit_seq<V>(self, seq: V) -> Result<Self::Value, V::Error>
1683 where
1684 V: SeqAccess<'de>,
1685 {
1686 Ok(Cow::Owned(utils::array_from_iterator(
1687 utils::SeqIter::new(seq),
1688 &self,
1689 )?))
1690 }
1691 }
1692
1693 deserializer.deserialize_bytes(CowVisitor)
1694 }
1695}
1696
1697#[cfg(feature = "alloc")]
1698impl<'de, const N: usize> DeserializeAs<'de, Box<[u8; N]>> for Bytes {
1699 fn deserialize_as<D>(deserializer: D) -> Result<Box<[u8; N]>, D::Error>
1700 where
1701 D: Deserializer<'de>,
1702 {
1703 Bytes::deserialize_as(deserializer).map(Box::new)
1704 }
1705}
1706
1707#[cfg(feature = "alloc")]
1708impl<'de, T, TAs, FORMAT> DeserializeAs<'de, Vec<T>> for OneOrMany<TAs, FORMAT>
1709where
1710 TAs: DeserializeAs<'de, T>,
1711 FORMAT: Format,
1712{
1713 fn deserialize_as<D>(deserializer: D) -> Result<Vec<T>, D::Error>
1714 where
1715 D: Deserializer<'de>,
1716 {
1717 let is_hr = deserializer.is_human_readable();
1718 let content: content::de::Content<'de> = Deserialize::deserialize(deserializer)?;
1719
1720 let one_err: D::Error = match <DeserializeAsWrap<T, TAs>>::deserialize(
1721 content::de::ContentRefDeserializer::new(&content, is_hr),
1722 ) {
1723 Ok(one) => return Ok(<[_]>::into_vec(::alloc::boxed::box_new([one.into_inner()]))alloc::vec![one.into_inner()]),
1724 Err(err) => err,
1725 };
1726 let many_err: D::Error = match <DeserializeAsWrap<Vec<T>, Vec<TAs>>>::deserialize(
1727 content::de::ContentDeserializer::new(content, is_hr),
1728 ) {
1729 Ok(many) => return Ok(many.into_inner()),
1730 Err(err) => err,
1731 };
1732 Err(DeError::custom(format_args!("OneOrMany could not deserialize any variant:\n One: {0}\n Many: {1}",
one_err, many_err)format_args!(
1733 "OneOrMany could not deserialize any variant:\n One: {one_err}\n Many: {many_err}"
1734 )))
1735 }
1736}
1737
1738#[cfg(feature = "alloc")]
1739impl<'de, T, TAs1> DeserializeAs<'de, T> for PickFirst<(TAs1,)>
1740where
1741 TAs1: DeserializeAs<'de, T>,
1742{
1743 fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>
1744 where
1745 D: Deserializer<'de>,
1746 {
1747 Ok(DeserializeAsWrap::<T, TAs1>::deserialize(deserializer)?.into_inner())
1748 }
1749}
1750
1751#[cfg(feature = "alloc")]
1752impl<'de, T, TAs1, TAs2> DeserializeAs<'de, T> for PickFirst<(TAs1, TAs2)>
1753where
1754 TAs1: DeserializeAs<'de, T>,
1755 TAs2: DeserializeAs<'de, T>,
1756{
1757 fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>
1758 where
1759 D: Deserializer<'de>,
1760 {
1761 let is_hr = deserializer.is_human_readable();
1762 let content: content::de::Content<'de> = Deserialize::deserialize(deserializer)?;
1763
1764 let first_err: D::Error = match <DeserializeAsWrap<T, TAs1>>::deserialize(
1765 content::de::ContentRefDeserializer::new(&content, is_hr),
1766 ) {
1767 Ok(first) => return Ok(first.into_inner()),
1768 Err(err) => err,
1769 };
1770 let second_err: D::Error = match <DeserializeAsWrap<T, TAs2>>::deserialize(
1771 content::de::ContentDeserializer::new(content, is_hr),
1772 ) {
1773 Ok(second) => return Ok(second.into_inner()),
1774 Err(err) => err,
1775 };
1776 Err(DeError::custom(format_args!("PickFirst could not deserialize any variant:\n First: {0}\n Second: {1}",
first_err, second_err)format_args!(
1777 "PickFirst could not deserialize any variant:\n First: {first_err}\n Second: {second_err}"
1778 )))
1779 }
1780}
1781
1782#[cfg(feature = "alloc")]
1783impl<'de, T, TAs1, TAs2, TAs3> DeserializeAs<'de, T> for PickFirst<(TAs1, TAs2, TAs3)>
1784where
1785 TAs1: DeserializeAs<'de, T>,
1786 TAs2: DeserializeAs<'de, T>,
1787 TAs3: DeserializeAs<'de, T>,
1788{
1789 fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>
1790 where
1791 D: Deserializer<'de>,
1792 {
1793 let is_hr = deserializer.is_human_readable();
1794 let content: content::de::Content<'de> = Deserialize::deserialize(deserializer)?;
1795
1796 let first_err: D::Error = match <DeserializeAsWrap<T, TAs1>>::deserialize(
1797 content::de::ContentRefDeserializer::new(&content, is_hr),
1798 ) {
1799 Ok(first) => return Ok(first.into_inner()),
1800 Err(err) => err,
1801 };
1802 let second_err: D::Error = match <DeserializeAsWrap<T, TAs2>>::deserialize(
1803 content::de::ContentRefDeserializer::new(&content, is_hr),
1804 ) {
1805 Ok(second) => return Ok(second.into_inner()),
1806 Err(err) => err,
1807 };
1808 let third_err: D::Error = match <DeserializeAsWrap<T, TAs3>>::deserialize(
1809 content::de::ContentDeserializer::new(content, is_hr),
1810 ) {
1811 Ok(third) => return Ok(third.into_inner()),
1812 Err(err) => err,
1813 };
1814 Err(DeError::custom(format_args!("PickFirst could not deserialize any variant:\n First: {0}\n Second: {1}\n Third: {2}",
first_err, second_err, third_err)format_args!(
1815 "PickFirst could not deserialize any variant:\n First: {first_err}\n Second: {second_err}\n Third: {third_err}",
1816 )))
1817 }
1818}
1819
1820#[cfg(feature = "alloc")]
1821impl<'de, T, TAs1, TAs2, TAs3, TAs4> DeserializeAs<'de, T> for PickFirst<(TAs1, TAs2, TAs3, TAs4)>
1822where
1823 TAs1: DeserializeAs<'de, T>,
1824 TAs2: DeserializeAs<'de, T>,
1825 TAs3: DeserializeAs<'de, T>,
1826 TAs4: DeserializeAs<'de, T>,
1827{
1828 fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>
1829 where
1830 D: Deserializer<'de>,
1831 {
1832 let is_hr = deserializer.is_human_readable();
1833 let content: content::de::Content<'de> = Deserialize::deserialize(deserializer)?;
1834
1835 let first_err: D::Error = match <DeserializeAsWrap<T, TAs1>>::deserialize(
1836 content::de::ContentRefDeserializer::new(&content, is_hr),
1837 ) {
1838 Ok(first) => return Ok(first.into_inner()),
1839 Err(err) => err,
1840 };
1841 let second_err: D::Error = match <DeserializeAsWrap<T, TAs2>>::deserialize(
1842 content::de::ContentRefDeserializer::new(&content, is_hr),
1843 ) {
1844 Ok(second) => return Ok(second.into_inner()),
1845 Err(err) => err,
1846 };
1847 let third_err: D::Error = match <DeserializeAsWrap<T, TAs3>>::deserialize(
1848 content::de::ContentRefDeserializer::new(&content, is_hr),
1849 ) {
1850 Ok(third) => return Ok(third.into_inner()),
1851 Err(err) => err,
1852 };
1853 let fourth_err: D::Error = match <DeserializeAsWrap<T, TAs4>>::deserialize(
1854 content::de::ContentDeserializer::new(content, is_hr),
1855 ) {
1856 Ok(fourth) => return Ok(fourth.into_inner()),
1857 Err(err) => err,
1858 };
1859 Err(DeError::custom(format_args!("PickFirst could not deserialize any variant:\n First: {0}\n Second: {1}\n Third: {2}\n Fourth: {3}",
first_err, second_err, third_err, fourth_err)format_args!(
1860 "PickFirst could not deserialize any variant:\n First: {first_err}\n Second: {second_err}\n Third: {third_err}\n Fourth: {fourth_err}",
1861 )))
1862 }
1863}
1864
1865impl<'de, T, U> DeserializeAs<'de, T> for FromInto<U>
1866where
1867 U: Into<T>,
1868 U: Deserialize<'de>,
1869{
1870 fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>
1871 where
1872 D: Deserializer<'de>,
1873 {
1874 Ok(U::deserialize(deserializer)?.into())
1875 }
1876}
1877
1878impl<'de, T, U> DeserializeAs<'de, T> for TryFromInto<U>
1879where
1880 U: TryInto<T>,
1881 <U as TryInto<T>>::Error: Display,
1882 U: Deserialize<'de>,
1883{
1884 fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>
1885 where
1886 D: Deserializer<'de>,
1887 {
1888 U::deserialize(deserializer)?
1889 .try_into()
1890 .map_err(DeError::custom)
1891 }
1892}
1893
1894impl<'de, T, U> DeserializeAs<'de, T> for FromIntoRef<U>
1895where
1896 U: Into<T>,
1897 U: Deserialize<'de>,
1898{
1899 fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>
1900 where
1901 D: Deserializer<'de>,
1902 {
1903 Ok(U::deserialize(deserializer)?.into())
1904 }
1905}
1906
1907impl<'de, T, U> DeserializeAs<'de, T> for TryFromIntoRef<U>
1908where
1909 U: TryInto<T>,
1910 <U as TryInto<T>>::Error: Display,
1911 U: Deserialize<'de>,
1912{
1913 fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>
1914 where
1915 D: Deserializer<'de>,
1916 {
1917 U::deserialize(deserializer)?
1918 .try_into()
1919 .map_err(DeError::custom)
1920 }
1921}
1922
1923#[cfg(feature = "alloc")]
1924impl<'de> DeserializeAs<'de, Cow<'de, str>> for BorrowCow {
1925 fn deserialize_as<D>(deserializer: D) -> Result<Cow<'de, str>, D::Error>
1926 where
1927 D: Deserializer<'de>,
1928 {
1929 struct CowVisitor;
1930
1931 impl<'de> Visitor<'de> for CowVisitor {
1932 type Value = Cow<'de, str>;
1933
1934 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
1935 formatter.write_str("an optionally borrowed string")
1936 }
1937
1938 fn visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E>
1939 where
1940 E: DeError,
1941 {
1942 Ok(Cow::Borrowed(v))
1943 }
1944
1945 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
1946 where
1947 E: DeError,
1948 {
1949 Ok(Cow::Owned(v.to_owned()))
1950 }
1951
1952 fn visit_string<E>(self, v: String) -> Result<Self::Value, E>
1953 where
1954 E: DeError,
1955 {
1956 Ok(Cow::Owned(v))
1957 }
1958 }
1959
1960 deserializer.deserialize_string(CowVisitor)
1961 }
1962}
1963
1964#[cfg(feature = "alloc")]
1965impl<'de> DeserializeAs<'de, Cow<'de, [u8]>> for BorrowCow {
1966 fn deserialize_as<D>(deserializer: D) -> Result<Cow<'de, [u8]>, D::Error>
1967 where
1968 D: Deserializer<'de>,
1969 {
1970 Bytes::deserialize_as(deserializer)
1971 }
1972}
1973
1974#[cfg(feature = "alloc")]
1975impl<'de, const N: usize> DeserializeAs<'de, Cow<'de, [u8; N]>> for BorrowCow {
1976 fn deserialize_as<D>(deserializer: D) -> Result<Cow<'de, [u8; N]>, D::Error>
1977 where
1978 D: Deserializer<'de>,
1979 {
1980 Bytes::deserialize_as(deserializer)
1981 }
1982}
1983
1984impl<'de> DeserializeAs<'de, bool> for BoolFromInt<Strict> {
1985 fn deserialize_as<D>(deserializer: D) -> Result<bool, D::Error>
1986 where
1987 D: Deserializer<'de>,
1988 {
1989 struct U8Visitor;
1990 impl Visitor<'_> for U8Visitor {
1991 type Value = bool;
1992
1993 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
1994 formatter.write_str("an integer 0 or 1")
1995 }
1996
1997 fn visit_u8<E>(self, v: u8) -> Result<Self::Value, E>
1998 where
1999 E: DeError,
2000 {
2001 match v {
2002 0 => Ok(false),
2003 1 => Ok(true),
2004 unexp => Err(DeError::invalid_value(
2005 Unexpected::Unsigned(u64::from(unexp)),
2006 &"0 or 1",
2007 )),
2008 }
2009 }
2010
2011 fn visit_i8<E>(self, v: i8) -> Result<Self::Value, E>
2012 where
2013 E: DeError,
2014 {
2015 match v {
2016 0 => Ok(false),
2017 1 => Ok(true),
2018 unexp => Err(DeError::invalid_value(
2019 Unexpected::Signed(i64::from(unexp)),
2020 &"0 or 1",
2021 )),
2022 }
2023 }
2024
2025 fn visit_u64<E>(self, v: u64) -> Result<Self::Value, E>
2026 where
2027 E: DeError,
2028 {
2029 match v {
2030 0 => Ok(false),
2031 1 => Ok(true),
2032 unexp => Err(DeError::invalid_value(
2033 Unexpected::Unsigned(unexp),
2034 &"0 or 1",
2035 )),
2036 }
2037 }
2038
2039 fn visit_i64<E>(self, v: i64) -> Result<Self::Value, E>
2040 where
2041 E: DeError,
2042 {
2043 match v {
2044 0 => Ok(false),
2045 1 => Ok(true),
2046 unexp => Err(DeError::invalid_value(Unexpected::Signed(unexp), &"0 or 1")),
2047 }
2048 }
2049
2050 fn visit_u128<E>(self, v: u128) -> Result<Self::Value, E>
2051 where
2052 E: DeError,
2053 {
2054 match v {
2055 0 => Ok(false),
2056 1 => Ok(true),
2057 unexp => {
2058 let mut buf: [u8; 58] = [0u8; 58];
2059 Err(DeError::invalid_value(
2060 crate::utils::get_unexpected_u128(unexp, &mut buf),
2061 &self,
2062 ))
2063 }
2064 }
2065 }
2066
2067 fn visit_i128<E>(self, v: i128) -> Result<Self::Value, E>
2068 where
2069 E: DeError,
2070 {
2071 match v {
2072 0 => Ok(false),
2073 1 => Ok(true),
2074 unexp => {
2075 let mut buf: [u8; 58] = [0u8; 58];
2076 Err(DeError::invalid_value(
2077 crate::utils::get_unexpected_i128(unexp, &mut buf),
2078 &"0 or 1",
2079 ))
2080 }
2081 }
2082 }
2083 }
2084
2085 deserializer.deserialize_u8(U8Visitor)
2086 }
2087}
2088
2089impl<'de> DeserializeAs<'de, bool> for BoolFromInt<Flexible> {
2090 fn deserialize_as<D>(deserializer: D) -> Result<bool, D::Error>
2091 where
2092 D: Deserializer<'de>,
2093 {
2094 struct U8Visitor;
2095 impl Visitor<'_> for U8Visitor {
2096 type Value = bool;
2097
2098 fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
2099 formatter.write_str("an integer")
2100 }
2101
2102 fn visit_u8<E>(self, v: u8) -> Result<Self::Value, E>
2103 where
2104 E: DeError,
2105 {
2106 Ok(v != 0)
2107 }
2108
2109 fn visit_i8<E>(self, v: i8) -> Result<Self::Value, E>
2110 where
2111 E: DeError,
2112 {
2113 Ok(v != 0)
2114 }
2115
2116 fn visit_u64<E>(self, v: u64) -> Result<Self::Value, E>
2117 where
2118 E: DeError,
2119 {
2120 Ok(v != 0)
2121 }
2122
2123 fn visit_i64<E>(self, v: i64) -> Result<Self::Value, E>
2124 where
2125 E: DeError,
2126 {
2127 Ok(v != 0)
2128 }
2129
2130 fn visit_u128<E>(self, v: u128) -> Result<Self::Value, E>
2131 where
2132 E: DeError,
2133 {
2134 Ok(v != 0)
2135 }
2136
2137 fn visit_i128<E>(self, v: i128) -> Result<Self::Value, E>
2138 where
2139 E: DeError,
2140 {
2141 Ok(v != 0)
2142 }
2143 }
2144
2145 deserializer.deserialize_u8(U8Visitor)
2146 }
2147}
2148
2149