Coverage Report

Created: 2025-08-29 06:27

/rust/registry/src/index.crates.io-6f17d22bba15001f/erased-serde-0.4.6/src/de.rs
Line
Count
Source (jump to first uncovered line)
1
use crate::any::Any;
2
use crate::error::{erase_de as erase, unerase_de as unerase, Error};
3
use crate::map::{OptionExt, ResultExt};
4
use crate::sealed::deserializer::Sealed;
5
use alloc::boxed::Box;
6
#[cfg(feature = "alloc")]
7
use alloc::string::String;
8
#[cfg(feature = "alloc")]
9
use alloc::vec::Vec;
10
use core::fmt;
11
12
/// Deserialize a value of type `T` from the given trait object.
13
///
14
/// ```rust
15
/// use erased_serde::Deserializer;
16
/// use std::collections::BTreeMap as Map;
17
///
18
/// fn main() {
19
///     static JSON: &'static [u8] = br#"{"A": 65, "B": 66}"#;
20
///     static CBOR: &'static [u8] = &[162, 97, 65, 24, 65, 97, 66, 24, 66];
21
///
22
///     // Construct some deserializers.
23
///     let json = &mut serde_json::Deserializer::from_slice(JSON);
24
///     let cbor = &mut serde_cbor::Deserializer::from_slice(CBOR);
25
///
26
///     // The values in this map are boxed trait objects, which is not possible
27
///     // with the normal serde::Deserializer because of object safety.
28
///     let mut formats: Map<&str, Box<dyn Deserializer>> = Map::new();
29
///     formats.insert("json", Box::new(<dyn Deserializer>::erase(json)));
30
///     formats.insert("cbor", Box::new(<dyn Deserializer>::erase(cbor)));
31
///
32
///     // Pick a Deserializer out of the formats map.
33
///     let format = formats.get_mut("json").unwrap();
34
///
35
///     let data: Map<String, usize> = erased_serde::deserialize(format).unwrap();
36
///
37
///     println!("{}", data["A"] + data["B"]);
38
/// }
39
/// ```
40
0
pub fn deserialize<'de, T>(deserializer: &mut dyn Deserializer<'de>) -> Result<T, Error>
41
0
where
42
0
    T: serde::Deserialize<'de>,
43
0
{
44
0
    serde::Deserialize::deserialize(deserializer)
45
0
}
46
47
// TRAITS //////////////////////////////////////////////////////////////////////
48
49
pub trait DeserializeSeed<'de> {
50
    fn erased_deserialize_seed(
51
        &mut self,
52
        deserializer: &mut dyn Deserializer<'de>,
53
    ) -> Result<Out, Error>;
54
}
55
56
/// An object-safe equivalent of Serde's `Deserializer` trait.
57
///
58
/// Any implementation of Serde's `Deserializer` can be converted to a
59
/// `&dyn erased_serde::Deserializer` or `Box<dyn erased_serde::Deserializer>`
60
/// trait object using `erased_serde::Deserializer::erase`.
61
///
62
/// ```rust
63
/// use erased_serde::Deserializer;
64
/// use std::collections::BTreeMap as Map;
65
///
66
/// fn main() {
67
///     static JSON: &'static [u8] = br#"{"A": 65, "B": 66}"#;
68
///     static CBOR: &'static [u8] = &[162, 97, 65, 24, 65, 97, 66, 24, 66];
69
///
70
///     // Construct some deserializers.
71
///     let json = &mut serde_json::Deserializer::from_slice(JSON);
72
///     let cbor = &mut serde_cbor::Deserializer::from_slice(CBOR);
73
///
74
///     // The values in this map are boxed trait objects, which is not possible
75
///     // with the normal serde::Deserializer because of object safety.
76
///     let mut formats: Map<&str, Box<dyn Deserializer>> = Map::new();
77
///     formats.insert("json", Box::new(<dyn Deserializer>::erase(json)));
78
///     formats.insert("cbor", Box::new(<dyn Deserializer>::erase(cbor)));
79
///
80
///     // Pick a Deserializer out of the formats map.
81
///     let format = formats.get_mut("json").unwrap();
82
///
83
///     let data: Map<String, usize> = erased_serde::deserialize(format).unwrap();
84
///
85
///     println!("{}", data["A"] + data["B"]);
86
/// }
87
/// ```
88
///
89
/// This trait is sealed and can only be implemented via a
90
/// `serde::Deserializer<'de>` impl.
91
pub trait Deserializer<'de>: Sealed {
92
    fn erased_deserialize_any(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
93
    fn erased_deserialize_bool(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
94
    fn erased_deserialize_i8(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
95
    fn erased_deserialize_i16(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
96
    fn erased_deserialize_i32(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
97
    fn erased_deserialize_i64(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
98
    fn erased_deserialize_i128(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
99
    fn erased_deserialize_u8(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
100
    fn erased_deserialize_u16(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
101
    fn erased_deserialize_u32(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
102
    fn erased_deserialize_u64(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
103
    fn erased_deserialize_u128(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
104
    fn erased_deserialize_f32(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
105
    fn erased_deserialize_f64(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
106
    fn erased_deserialize_char(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
107
    fn erased_deserialize_str(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
108
    fn erased_deserialize_string(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
109
    fn erased_deserialize_bytes(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
110
    fn erased_deserialize_byte_buf(&mut self, visitor: &mut dyn Visitor<'de>)
111
        -> Result<Out, Error>;
112
    fn erased_deserialize_option(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
113
    fn erased_deserialize_unit(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
114
    fn erased_deserialize_unit_struct(
115
        &mut self,
116
        name: &'static str,
117
        visitor: &mut dyn Visitor<'de>,
118
    ) -> Result<Out, Error>;
119
    fn erased_deserialize_newtype_struct(
120
        &mut self,
121
        name: &'static str,
122
        visitor: &mut dyn Visitor<'de>,
123
    ) -> Result<Out, Error>;
124
    fn erased_deserialize_seq(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
125
    fn erased_deserialize_tuple(
126
        &mut self,
127
        len: usize,
128
        visitor: &mut dyn Visitor<'de>,
129
    ) -> Result<Out, Error>;
130
    fn erased_deserialize_tuple_struct(
131
        &mut self,
132
        name: &'static str,
133
        len: usize,
134
        visitor: &mut dyn Visitor<'de>,
135
    ) -> Result<Out, Error>;
136
    fn erased_deserialize_map(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>;
137
    fn erased_deserialize_struct(
138
        &mut self,
139
        name: &'static str,
140
        fields: &'static [&'static str],
141
        visitor: &mut dyn Visitor<'de>,
142
    ) -> Result<Out, Error>;
143
    fn erased_deserialize_identifier(
144
        &mut self,
145
        visitor: &mut dyn Visitor<'de>,
146
    ) -> Result<Out, Error>;
147
    fn erased_deserialize_enum(
148
        &mut self,
149
        name: &'static str,
150
        variants: &'static [&'static str],
151
        visitor: &mut dyn Visitor<'de>,
152
    ) -> Result<Out, Error>;
153
    fn erased_deserialize_ignored_any(
154
        &mut self,
155
        visitor: &mut dyn Visitor<'de>,
156
    ) -> Result<Out, Error>;
157
    fn erased_is_human_readable(&self) -> bool;
158
}
159
160
pub trait Visitor<'de> {
161
    fn erased_expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result;
162
    fn erased_visit_bool(&mut self, v: bool) -> Result<Out, Error>;
163
    fn erased_visit_i8(&mut self, v: i8) -> Result<Out, Error>;
164
    fn erased_visit_i16(&mut self, v: i16) -> Result<Out, Error>;
165
    fn erased_visit_i32(&mut self, v: i32) -> Result<Out, Error>;
166
    fn erased_visit_i64(&mut self, v: i64) -> Result<Out, Error>;
167
    fn erased_visit_i128(&mut self, v: i128) -> Result<Out, Error>;
168
    fn erased_visit_u8(&mut self, v: u8) -> Result<Out, Error>;
169
    fn erased_visit_u16(&mut self, v: u16) -> Result<Out, Error>;
170
    fn erased_visit_u32(&mut self, v: u32) -> Result<Out, Error>;
171
    fn erased_visit_u64(&mut self, v: u64) -> Result<Out, Error>;
172
    fn erased_visit_u128(&mut self, v: u128) -> Result<Out, Error>;
173
    fn erased_visit_f32(&mut self, v: f32) -> Result<Out, Error>;
174
    fn erased_visit_f64(&mut self, v: f64) -> Result<Out, Error>;
175
    fn erased_visit_char(&mut self, v: char) -> Result<Out, Error>;
176
    fn erased_visit_str(&mut self, v: &str) -> Result<Out, Error>;
177
    fn erased_visit_borrowed_str(&mut self, v: &'de str) -> Result<Out, Error>;
178
    #[cfg(feature = "alloc")]
179
    fn erased_visit_string(&mut self, v: String) -> Result<Out, Error>;
180
    fn erased_visit_bytes(&mut self, v: &[u8]) -> Result<Out, Error>;
181
    fn erased_visit_borrowed_bytes(&mut self, v: &'de [u8]) -> Result<Out, Error>;
182
    #[cfg(feature = "alloc")]
183
    fn erased_visit_byte_buf(&mut self, v: Vec<u8>) -> Result<Out, Error>;
184
    fn erased_visit_none(&mut self) -> Result<Out, Error>;
185
    fn erased_visit_some(&mut self, deserializer: &mut dyn Deserializer<'de>)
186
        -> Result<Out, Error>;
187
    fn erased_visit_unit(&mut self) -> Result<Out, Error>;
188
    fn erased_visit_newtype_struct(
189
        &mut self,
190
        deserializer: &mut dyn Deserializer<'de>,
191
    ) -> Result<Out, Error>;
192
    fn erased_visit_seq(&mut self, seq: &mut dyn SeqAccess<'de>) -> Result<Out, Error>;
193
    fn erased_visit_map(&mut self, map: &mut dyn MapAccess<'de>) -> Result<Out, Error>;
194
    fn erased_visit_enum(&mut self, data: &mut dyn EnumAccess<'de>) -> Result<Out, Error>;
195
}
196
197
pub trait SeqAccess<'de> {
198
    fn erased_next_element(
199
        &mut self,
200
        seed: &mut dyn DeserializeSeed<'de>,
201
    ) -> Result<Option<Out>, Error>;
202
    fn erased_size_hint(&self) -> Option<usize>;
203
}
204
205
pub trait MapAccess<'de> {
206
    fn erased_next_key(
207
        &mut self,
208
        seed: &mut dyn DeserializeSeed<'de>,
209
    ) -> Result<Option<Out>, Error>;
210
    fn erased_next_value(&mut self, seed: &mut dyn DeserializeSeed<'de>) -> Result<Out, Error>;
211
    fn erased_next_entry(
212
        &mut self,
213
        key: &mut dyn DeserializeSeed<'de>,
214
        value: &mut dyn DeserializeSeed<'de>,
215
    ) -> Result<Option<(Out, Out)>, Error>;
216
    fn erased_size_hint(&self) -> Option<usize>;
217
}
218
219
pub trait EnumAccess<'de> {
220
    fn erased_variant_seed(
221
        &mut self,
222
        seed: &mut dyn DeserializeSeed<'de>,
223
    ) -> Result<(Out, Variant<'de>), Error>;
224
}
225
226
impl<'de> dyn Deserializer<'de> {
227
    /// Convert any Serde `Deserializer` to a trait object.
228
    ///
229
    /// ```rust
230
    /// use erased_serde::Deserializer;
231
    /// use std::collections::BTreeMap as Map;
232
    ///
233
    /// fn main() {
234
    ///     static JSON: &'static [u8] = br#"{"A": 65, "B": 66}"#;
235
    ///     static CBOR: &'static [u8] = &[162, 97, 65, 24, 65, 97, 66, 24, 66];
236
    ///
237
    ///     // Construct some deserializers.
238
    ///     let json = &mut serde_json::Deserializer::from_slice(JSON);
239
    ///     let cbor = &mut serde_cbor::Deserializer::from_slice(CBOR);
240
    ///
241
    ///     // The values in this map are boxed trait objects, which is not possible
242
    ///     // with the normal serde::Deserializer because of object safety.
243
    ///     let mut formats: Map<&str, Box<dyn Deserializer>> = Map::new();
244
    ///     formats.insert("json", Box::new(<dyn Deserializer>::erase(json)));
245
    ///     formats.insert("cbor", Box::new(<dyn Deserializer>::erase(cbor)));
246
    ///
247
    ///     // Pick a Deserializer out of the formats map.
248
    ///     let format = formats.get_mut("json").unwrap();
249
    ///
250
    ///     let data: Map<String, usize> = erased_serde::deserialize(format).unwrap();
251
    ///
252
    ///     println!("{}", data["A"] + data["B"]);
253
    /// }
254
    /// ```
255
0
    pub fn erase<D>(deserializer: D) -> impl Deserializer<'de>
256
0
    where
257
0
        D: serde::Deserializer<'de>,
258
0
    {
259
0
        erase::Deserializer::new(deserializer)
260
0
    }
261
}
262
263
// OUT /////////////////////////////////////////////////////////////////////////
264
265
pub struct Out(Any);
266
267
impl Out {
268
0
    unsafe fn new<T>(t: T) -> Self {
269
0
        Out(unsafe { Any::new(t) })
270
0
    }
271
272
0
    unsafe fn take<T>(self) -> T {
273
0
        unsafe { self.0.take() }
274
0
    }
275
}
276
277
// IMPL ERASED SERDE FOR SERDE /////////////////////////////////////////////////
278
279
mod erase {
280
    pub struct DeserializeSeed<D> {
281
        state: Option<D>,
282
    }
283
284
    impl<D> DeserializeSeed<D> {
285
0
        pub(crate) fn new(seed: D) -> Self {
286
0
            DeserializeSeed { state: Some(seed) }
287
0
        }
288
289
0
        pub(crate) fn take(&mut self) -> D {
290
0
            self.state.take().unwrap()
291
0
        }
292
    }
293
294
    pub struct Deserializer<D> {
295
        state: Option<D>,
296
    }
297
298
    impl<D> Deserializer<D> {
299
0
        pub(crate) fn new(deserializer: D) -> Self {
300
0
            Deserializer {
301
0
                state: Some(deserializer),
302
0
            }
303
0
        }
304
305
0
        pub(crate) fn take(&mut self) -> D {
306
0
            self.state.take().unwrap()
307
0
        }
308
309
0
        pub(crate) fn as_ref(&self) -> &D {
310
0
            self.state.as_ref().unwrap()
311
0
        }
312
    }
313
314
    pub struct Visitor<D> {
315
        state: Option<D>,
316
    }
317
318
    impl<D> Visitor<D> {
319
0
        pub(crate) fn new(visitor: D) -> Self {
320
0
            Visitor {
321
0
                state: Some(visitor),
322
0
            }
323
0
        }
324
325
0
        pub(crate) fn take(&mut self) -> D {
326
0
            self.state.take().unwrap()
327
0
        }
328
329
0
        pub(crate) fn as_ref(&self) -> &D {
330
0
            self.state.as_ref().unwrap()
331
0
        }
332
    }
333
334
    pub struct SeqAccess<D> {
335
        state: D,
336
    }
337
338
    impl<D> SeqAccess<D> {
339
0
        pub(crate) fn new(seq_access: D) -> Self {
340
0
            SeqAccess { state: seq_access }
341
0
        }
342
343
0
        pub(crate) fn as_ref(&self) -> &D {
344
0
            &self.state
345
0
        }
346
347
0
        pub(crate) fn as_mut(&mut self) -> &mut D {
348
0
            &mut self.state
349
0
        }
350
    }
351
352
    pub struct MapAccess<D> {
353
        state: D,
354
    }
355
356
    impl<D> MapAccess<D> {
357
0
        pub(crate) fn new(map_access: D) -> Self {
358
0
            MapAccess { state: map_access }
359
0
        }
360
361
0
        pub(crate) fn as_ref(&self) -> &D {
362
0
            &self.state
363
0
        }
364
365
0
        pub(crate) fn as_mut(&mut self) -> &mut D {
366
0
            &mut self.state
367
0
        }
368
    }
369
370
    pub struct EnumAccess<D> {
371
        state: Option<D>,
372
    }
373
374
    impl<D> EnumAccess<D> {
375
0
        pub(crate) fn new(enum_access: D) -> Self {
376
0
            EnumAccess {
377
0
                state: Some(enum_access),
378
0
            }
379
0
        }
380
381
0
        pub(crate) fn take(&mut self) -> D {
382
0
            self.state.take().unwrap()
383
0
        }
384
    }
385
}
386
387
impl<'de, T> DeserializeSeed<'de> for erase::DeserializeSeed<T>
388
where
389
    T: serde::de::DeserializeSeed<'de>,
390
{
391
0
    fn erased_deserialize_seed(
392
0
        &mut self,
393
0
        deserializer: &mut dyn Deserializer<'de>,
394
0
    ) -> Result<Out, Error> {
395
0
        unsafe { self.take().deserialize(deserializer).unsafe_map(Out::new) }
396
0
    }
397
}
398
399
impl<'de, T> Deserializer<'de> for erase::Deserializer<T>
400
where
401
    T: serde::Deserializer<'de>,
402
{
403
0
    fn erased_deserialize_any(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
404
0
        self.take().deserialize_any(visitor).map_err(erase)
405
0
    }
406
407
0
    fn erased_deserialize_bool(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
408
0
        self.take().deserialize_bool(visitor).map_err(erase)
409
0
    }
410
411
0
    fn erased_deserialize_i8(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
412
0
        self.take().deserialize_i8(visitor).map_err(erase)
413
0
    }
414
415
0
    fn erased_deserialize_i16(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
416
0
        self.take().deserialize_i16(visitor).map_err(erase)
417
0
    }
418
419
0
    fn erased_deserialize_i32(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
420
0
        self.take().deserialize_i32(visitor).map_err(erase)
421
0
    }
422
423
0
    fn erased_deserialize_i64(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
424
0
        self.take().deserialize_i64(visitor).map_err(erase)
425
0
    }
426
427
0
    fn erased_deserialize_i128(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
428
0
        self.take().deserialize_i128(visitor).map_err(erase)
429
0
    }
430
431
0
    fn erased_deserialize_u8(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
432
0
        self.take().deserialize_u8(visitor).map_err(erase)
433
0
    }
434
435
0
    fn erased_deserialize_u16(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
436
0
        self.take().deserialize_u16(visitor).map_err(erase)
437
0
    }
438
439
0
    fn erased_deserialize_u32(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
440
0
        self.take().deserialize_u32(visitor).map_err(erase)
441
0
    }
442
443
0
    fn erased_deserialize_u64(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
444
0
        self.take().deserialize_u64(visitor).map_err(erase)
445
0
    }
446
447
0
    fn erased_deserialize_u128(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
448
0
        self.take().deserialize_u128(visitor).map_err(erase)
449
0
    }
450
451
0
    fn erased_deserialize_f32(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
452
0
        self.take().deserialize_f32(visitor).map_err(erase)
453
0
    }
454
455
0
    fn erased_deserialize_f64(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
456
0
        self.take().deserialize_f64(visitor).map_err(erase)
457
0
    }
458
459
0
    fn erased_deserialize_char(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
460
0
        self.take().deserialize_char(visitor).map_err(erase)
461
0
    }
462
463
0
    fn erased_deserialize_str(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
464
0
        self.take().deserialize_str(visitor).map_err(erase)
465
0
    }
466
467
0
    fn erased_deserialize_string(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
468
0
        self.take().deserialize_string(visitor).map_err(erase)
469
0
    }
470
471
0
    fn erased_deserialize_bytes(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
472
0
        self.take().deserialize_bytes(visitor).map_err(erase)
473
0
    }
474
475
0
    fn erased_deserialize_byte_buf(
476
0
        &mut self,
477
0
        visitor: &mut dyn Visitor<'de>,
478
0
    ) -> Result<Out, Error> {
479
0
        self.take().deserialize_byte_buf(visitor).map_err(erase)
480
0
    }
481
482
0
    fn erased_deserialize_option(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
483
0
        self.take().deserialize_option(visitor).map_err(erase)
484
0
    }
485
486
0
    fn erased_deserialize_unit(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
487
0
        self.take().deserialize_unit(visitor).map_err(erase)
488
0
    }
489
490
0
    fn erased_deserialize_unit_struct(
491
0
        &mut self,
492
0
        name: &'static str,
493
0
        visitor: &mut dyn Visitor<'de>,
494
0
    ) -> Result<Out, Error> {
495
0
        self.take()
496
0
            .deserialize_unit_struct(name, visitor)
497
0
            .map_err(erase)
498
0
    }
499
500
0
    fn erased_deserialize_newtype_struct(
501
0
        &mut self,
502
0
        name: &'static str,
503
0
        visitor: &mut dyn Visitor<'de>,
504
0
    ) -> Result<Out, Error> {
505
0
        self.take()
506
0
            .deserialize_newtype_struct(name, visitor)
507
0
            .map_err(erase)
508
0
    }
509
510
0
    fn erased_deserialize_seq(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
511
0
        self.take().deserialize_seq(visitor).map_err(erase)
512
0
    }
513
514
0
    fn erased_deserialize_tuple(
515
0
        &mut self,
516
0
        len: usize,
517
0
        visitor: &mut dyn Visitor<'de>,
518
0
    ) -> Result<Out, Error> {
519
0
        self.take().deserialize_tuple(len, visitor).map_err(erase)
520
0
    }
521
522
0
    fn erased_deserialize_tuple_struct(
523
0
        &mut self,
524
0
        name: &'static str,
525
0
        len: usize,
526
0
        visitor: &mut dyn Visitor<'de>,
527
0
    ) -> Result<Out, Error> {
528
0
        self.take()
529
0
            .deserialize_tuple_struct(name, len, visitor)
530
0
            .map_err(erase)
531
0
    }
532
533
0
    fn erased_deserialize_map(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
534
0
        self.take().deserialize_map(visitor).map_err(erase)
535
0
    }
536
537
0
    fn erased_deserialize_struct(
538
0
        &mut self,
539
0
        name: &'static str,
540
0
        fields: &'static [&'static str],
541
0
        visitor: &mut dyn Visitor<'de>,
542
0
    ) -> Result<Out, Error> {
543
0
        self.take()
544
0
            .deserialize_struct(name, fields, visitor)
545
0
            .map_err(erase)
546
0
    }
547
548
0
    fn erased_deserialize_identifier(
549
0
        &mut self,
550
0
        visitor: &mut dyn Visitor<'de>,
551
0
    ) -> Result<Out, Error> {
552
0
        self.take().deserialize_identifier(visitor).map_err(erase)
553
0
    }
554
555
0
    fn erased_deserialize_enum(
556
0
        &mut self,
557
0
        name: &'static str,
558
0
        variants: &'static [&'static str],
559
0
        visitor: &mut dyn Visitor<'de>,
560
0
    ) -> Result<Out, Error> {
561
0
        self.take()
562
0
            .deserialize_enum(name, variants, visitor)
563
0
            .map_err(erase)
564
0
    }
565
566
0
    fn erased_deserialize_ignored_any(
567
0
        &mut self,
568
0
        visitor: &mut dyn Visitor<'de>,
569
0
    ) -> Result<Out, Error> {
570
0
        self.take().deserialize_ignored_any(visitor).map_err(erase)
571
0
    }
572
573
0
    fn erased_is_human_readable(&self) -> bool {
574
0
        self.as_ref().is_human_readable()
575
0
    }
576
}
577
578
impl<'de, T> Sealed for erase::Deserializer<T> where T: serde::Deserializer<'de> {}
579
580
impl<'de, T> Visitor<'de> for erase::Visitor<T>
581
where
582
    T: serde::de::Visitor<'de>,
583
{
584
0
    fn erased_expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
585
0
        self.as_ref().expecting(formatter)
586
0
    }
587
588
0
    fn erased_visit_bool(&mut self, v: bool) -> Result<Out, Error> {
589
0
        unsafe { self.take().visit_bool(v).unsafe_map(Out::new) }
590
0
    }
591
592
0
    fn erased_visit_i8(&mut self, v: i8) -> Result<Out, Error> {
593
0
        unsafe { self.take().visit_i8(v).unsafe_map(Out::new) }
594
0
    }
595
596
0
    fn erased_visit_i16(&mut self, v: i16) -> Result<Out, Error> {
597
0
        unsafe { self.take().visit_i16(v).unsafe_map(Out::new) }
598
0
    }
599
600
0
    fn erased_visit_i32(&mut self, v: i32) -> Result<Out, Error> {
601
0
        unsafe { self.take().visit_i32(v).unsafe_map(Out::new) }
602
0
    }
603
604
0
    fn erased_visit_i64(&mut self, v: i64) -> Result<Out, Error> {
605
0
        unsafe { self.take().visit_i64(v).unsafe_map(Out::new) }
606
0
    }
607
608
0
    fn erased_visit_i128(&mut self, v: i128) -> Result<Out, Error> {
609
0
        unsafe { self.take().visit_i128(v).unsafe_map(Out::new) }
610
0
    }
611
612
0
    fn erased_visit_u8(&mut self, v: u8) -> Result<Out, Error> {
613
0
        unsafe { self.take().visit_u8(v).unsafe_map(Out::new) }
614
0
    }
615
616
0
    fn erased_visit_u16(&mut self, v: u16) -> Result<Out, Error> {
617
0
        unsafe { self.take().visit_u16(v).unsafe_map(Out::new) }
618
0
    }
619
620
0
    fn erased_visit_u32(&mut self, v: u32) -> Result<Out, Error> {
621
0
        unsafe { self.take().visit_u32(v).unsafe_map(Out::new) }
622
0
    }
623
624
0
    fn erased_visit_u64(&mut self, v: u64) -> Result<Out, Error> {
625
0
        unsafe { self.take().visit_u64(v).unsafe_map(Out::new) }
626
0
    }
627
628
0
    fn erased_visit_u128(&mut self, v: u128) -> Result<Out, Error> {
629
0
        unsafe { self.take().visit_u128(v).unsafe_map(Out::new) }
630
0
    }
631
632
0
    fn erased_visit_f32(&mut self, v: f32) -> Result<Out, Error> {
633
0
        unsafe { self.take().visit_f32(v).unsafe_map(Out::new) }
634
0
    }
635
636
0
    fn erased_visit_f64(&mut self, v: f64) -> Result<Out, Error> {
637
0
        unsafe { self.take().visit_f64(v).unsafe_map(Out::new) }
638
0
    }
639
640
0
    fn erased_visit_char(&mut self, v: char) -> Result<Out, Error> {
641
0
        unsafe { self.take().visit_char(v).unsafe_map(Out::new) }
642
0
    }
643
644
0
    fn erased_visit_str(&mut self, v: &str) -> Result<Out, Error> {
645
0
        unsafe { self.take().visit_str(v).unsafe_map(Out::new) }
646
0
    }
647
648
0
    fn erased_visit_borrowed_str(&mut self, v: &'de str) -> Result<Out, Error> {
649
0
        unsafe { self.take().visit_borrowed_str(v).unsafe_map(Out::new) }
650
0
    }
651
652
    #[cfg(feature = "alloc")]
653
0
    fn erased_visit_string(&mut self, v: String) -> Result<Out, Error> {
654
0
        unsafe { self.take().visit_string(v).unsafe_map(Out::new) }
655
0
    }
656
657
0
    fn erased_visit_bytes(&mut self, v: &[u8]) -> Result<Out, Error> {
658
0
        unsafe { self.take().visit_bytes(v).unsafe_map(Out::new) }
659
0
    }
660
661
0
    fn erased_visit_borrowed_bytes(&mut self, v: &'de [u8]) -> Result<Out, Error> {
662
0
        unsafe { self.take().visit_borrowed_bytes(v).unsafe_map(Out::new) }
663
0
    }
664
665
    #[cfg(feature = "alloc")]
666
0
    fn erased_visit_byte_buf(&mut self, v: Vec<u8>) -> Result<Out, Error> {
667
0
        unsafe { self.take().visit_byte_buf(v).unsafe_map(Out::new) }
668
0
    }
669
670
0
    fn erased_visit_none(&mut self) -> Result<Out, Error> {
671
0
        unsafe { self.take().visit_none().unsafe_map(Out::new) }
672
0
    }
673
674
0
    fn erased_visit_some(
675
0
        &mut self,
676
0
        deserializer: &mut dyn Deserializer<'de>,
677
0
    ) -> Result<Out, Error> {
678
0
        unsafe { self.take().visit_some(deserializer).unsafe_map(Out::new) }
679
0
    }
680
681
0
    fn erased_visit_unit(&mut self) -> Result<Out, Error> {
682
0
        unsafe { self.take().visit_unit().unsafe_map(Out::new) }
683
0
    }
684
685
0
    fn erased_visit_newtype_struct(
686
0
        &mut self,
687
0
        deserializer: &mut dyn Deserializer<'de>,
688
0
    ) -> Result<Out, Error> {
689
0
        unsafe {
690
0
            self.take()
691
0
                .visit_newtype_struct(deserializer)
692
0
                .unsafe_map(Out::new)
693
0
        }
694
0
    }
695
696
0
    fn erased_visit_seq(&mut self, seq: &mut dyn SeqAccess<'de>) -> Result<Out, Error> {
697
0
        unsafe { self.take().visit_seq(seq).unsafe_map(Out::new) }
698
0
    }
699
700
0
    fn erased_visit_map(&mut self, map: &mut dyn MapAccess<'de>) -> Result<Out, Error> {
701
0
        unsafe { self.take().visit_map(map).unsafe_map(Out::new) }
702
0
    }
703
704
0
    fn erased_visit_enum(&mut self, data: &mut dyn EnumAccess<'de>) -> Result<Out, Error> {
705
0
        unsafe { self.take().visit_enum(data).unsafe_map(Out::new) }
706
0
    }
707
}
708
709
impl<'de, T> SeqAccess<'de> for erase::SeqAccess<T>
710
where
711
    T: serde::de::SeqAccess<'de>,
712
{
713
0
    fn erased_next_element(
714
0
        &mut self,
715
0
        seed: &mut dyn DeserializeSeed<'de>,
716
0
    ) -> Result<Option<Out>, Error> {
717
0
        self.as_mut().next_element_seed(seed).map_err(erase)
718
0
    }
719
720
0
    fn erased_size_hint(&self) -> Option<usize> {
721
0
        self.as_ref().size_hint()
722
0
    }
723
}
724
725
impl<'de, T> MapAccess<'de> for erase::MapAccess<T>
726
where
727
    T: serde::de::MapAccess<'de>,
728
{
729
0
    fn erased_next_key(
730
0
        &mut self,
731
0
        seed: &mut dyn DeserializeSeed<'de>,
732
0
    ) -> Result<Option<Out>, Error> {
733
0
        self.as_mut().next_key_seed(seed).map_err(erase)
734
0
    }
735
736
0
    fn erased_next_value(&mut self, seed: &mut dyn DeserializeSeed<'de>) -> Result<Out, Error> {
737
0
        self.as_mut().next_value_seed(seed).map_err(erase)
738
0
    }
739
740
0
    fn erased_next_entry(
741
0
        &mut self,
742
0
        kseed: &mut dyn DeserializeSeed<'de>,
743
0
        vseed: &mut dyn DeserializeSeed<'de>,
744
0
    ) -> Result<Option<(Out, Out)>, Error> {
745
0
        self.as_mut().next_entry_seed(kseed, vseed).map_err(erase)
746
0
    }
747
748
0
    fn erased_size_hint(&self) -> Option<usize> {
749
0
        self.as_ref().size_hint()
750
0
    }
751
}
752
753
impl<'de, T> EnumAccess<'de> for erase::EnumAccess<T>
754
where
755
    T: serde::de::EnumAccess<'de>,
756
{
757
0
    fn erased_variant_seed(
758
0
        &mut self,
759
0
        seed: &mut dyn DeserializeSeed<'de>,
760
0
    ) -> Result<(Out, Variant<'de>), Error> {
761
0
        self.take()
762
0
            .variant_seed(seed)
763
0
            .map(|(out, variant)| {
764
                use serde::de::VariantAccess;
765
0
                let erased = Variant {
766
0
                    data: unsafe { Any::new(variant) },
767
0
                    unit_variant: {
768
0
                        unsafe fn unit_variant<'de, T>(a: Any) -> Result<(), Error>
769
0
                        where
770
0
                            T: serde::de::EnumAccess<'de>,
771
0
                        {
772
0
                            unsafe { a.take::<T::Variant>().unit_variant().map_err(erase) }
773
0
                        }
774
0
                        unit_variant::<T>
775
0
                    },
776
0
                    visit_newtype: {
777
0
                        unsafe fn visit_newtype<'de, T>(
778
0
                            a: Any,
779
0
                            seed: &mut dyn DeserializeSeed<'de>,
780
0
                        ) -> Result<Out, Error>
781
0
                        where
782
0
                            T: serde::de::EnumAccess<'de>,
783
0
                        {
784
0
                            unsafe {
785
0
                                a.take::<T::Variant>()
786
0
                                    .newtype_variant_seed(seed)
787
0
                                    .map_err(erase)
788
0
                            }
789
0
                        }
790
0
                        visit_newtype::<T>
791
0
                    },
792
0
                    tuple_variant: {
793
0
                        unsafe fn tuple_variant<'de, T>(
794
0
                            a: Any,
795
0
                            len: usize,
796
0
                            visitor: &mut dyn Visitor<'de>,
797
0
                        ) -> Result<Out, Error>
798
0
                        where
799
0
                            T: serde::de::EnumAccess<'de>,
800
0
                        {
801
0
                            unsafe {
802
0
                                a.take::<T::Variant>()
803
0
                                    .tuple_variant(len, visitor)
804
0
                                    .map_err(erase)
805
0
                            }
806
0
                        }
807
0
                        tuple_variant::<T>
808
0
                    },
809
0
                    struct_variant: {
810
0
                        unsafe fn struct_variant<'de, T>(
811
0
                            a: Any,
812
0
                            fields: &'static [&'static str],
813
0
                            visitor: &mut dyn Visitor<'de>,
814
0
                        ) -> Result<Out, Error>
815
0
                        where
816
0
                            T: serde::de::EnumAccess<'de>,
817
0
                        {
818
0
                            unsafe {
819
0
                                a.take::<T::Variant>()
820
0
                                    .struct_variant(fields, visitor)
821
0
                                    .map_err(erase)
822
0
                            }
823
0
                        }
824
0
                        struct_variant::<T>
825
0
                    },
826
0
                };
827
0
                (out, erased)
828
0
            })
829
0
            .map_err(erase)
830
0
    }
831
}
832
833
// IMPL SERDE FOR ERASED SERDE /////////////////////////////////////////////////
834
835
impl<'de> serde::de::DeserializeSeed<'de> for &mut (dyn DeserializeSeed<'de> + '_) {
836
    type Value = Out;
837
0
    fn deserialize<D>(self, deserializer: D) -> Result<Out, D::Error>
838
0
    where
839
0
        D: serde::Deserializer<'de>,
840
0
    {
841
0
        let mut erased = erase::Deserializer::new(deserializer);
842
0
        self.erased_deserialize_seed(&mut erased).map_err(unerase)
843
0
    }
844
}
845
846
macro_rules! impl_deserializer_for_trait_object {
847
    ({$($mut:tt)*} $ty:ty) => {
848
        impl<'de> serde::Deserializer<'de> for $ty {
849
            type Error = Error;
850
851
0
            fn deserialize_any<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
852
0
            where
853
0
                V: serde::de::Visitor<'de>,
854
0
            {
855
0
                let mut erased = erase::Visitor::new(visitor);
856
0
                unsafe { self.erased_deserialize_any(&mut erased).unsafe_map(Out::take) }
857
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_any::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_any::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_any::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_any::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_any::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_any::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_any::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_any::<_>
858
859
0
            fn deserialize_bool<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
860
0
            where
861
0
                V: serde::de::Visitor<'de>,
862
0
            {
863
0
                let mut erased = erase::Visitor::new(visitor);
864
0
                unsafe { self.erased_deserialize_bool(&mut erased).unsafe_map(Out::take) }
865
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_bool::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_bool::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_bool::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_bool::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_bool::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_bool::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_bool::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_bool::<_>
866
867
0
            fn deserialize_i8<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
868
0
            where
869
0
                V: serde::de::Visitor<'de>,
870
0
            {
871
0
                let mut erased = erase::Visitor::new(visitor);
872
0
                unsafe { self.erased_deserialize_i8(&mut erased).unsafe_map(Out::take) }
873
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_i8::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_i8::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_i8::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_i8::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_i8::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_i8::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_i8::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_i8::<_>
874
875
0
            fn deserialize_i16<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
876
0
            where
877
0
                V: serde::de::Visitor<'de>,
878
0
            {
879
0
                let mut erased = erase::Visitor::new(visitor);
880
0
                unsafe { self.erased_deserialize_i16(&mut erased).unsafe_map(Out::take) }
881
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_i16::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_i16::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_i16::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_i16::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_i16::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_i16::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_i16::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_i16::<_>
882
883
0
            fn deserialize_i32<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
884
0
            where
885
0
                V: serde::de::Visitor<'de>,
886
0
            {
887
0
                let mut erased = erase::Visitor::new(visitor);
888
0
                unsafe { self.erased_deserialize_i32(&mut erased).unsafe_map(Out::take) }
889
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_i32::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_i32::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_i32::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_i32::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_i32::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_i32::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_i32::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_i32::<_>
890
891
0
            fn deserialize_i64<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
892
0
            where
893
0
                V: serde::de::Visitor<'de>,
894
0
            {
895
0
                let mut erased = erase::Visitor::new(visitor);
896
0
                unsafe { self.erased_deserialize_i64(&mut erased).unsafe_map(Out::take) }
897
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_i64::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_i64::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_i64::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_i64::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_i64::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_i64::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_i64::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_i64::<_>
898
899
0
            fn deserialize_i128<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
900
0
            where
901
0
                V: serde::de::Visitor<'de>,
902
0
            {
903
0
                let mut erased = erase::Visitor::new(visitor);
904
0
                unsafe { self.erased_deserialize_i128(&mut erased).unsafe_map(Out::take) }
905
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_i128::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_i128::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_i128::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_i128::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_i128::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_i128::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_i128::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_i128::<_>
906
907
0
            fn deserialize_u8<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
908
0
            where
909
0
                V: serde::de::Visitor<'de>,
910
0
            {
911
0
                let mut erased = erase::Visitor::new(visitor);
912
0
                unsafe { self.erased_deserialize_u8(&mut erased).unsafe_map(Out::take) }
913
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_u8::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_u8::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_u8::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_u8::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_u8::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_u8::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_u8::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_u8::<_>
914
915
0
            fn deserialize_u16<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
916
0
            where
917
0
                V: serde::de::Visitor<'de>,
918
0
            {
919
0
                let mut erased = erase::Visitor::new(visitor);
920
0
                unsafe { self.erased_deserialize_u16(&mut erased).unsafe_map(Out::take) }
921
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_u16::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_u16::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_u16::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_u16::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_u16::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_u16::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_u16::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_u16::<_>
922
923
0
            fn deserialize_u32<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
924
0
            where
925
0
                V: serde::de::Visitor<'de>,
926
0
            {
927
0
                let mut erased = erase::Visitor::new(visitor);
928
0
                unsafe { self.erased_deserialize_u32(&mut erased).unsafe_map(Out::take) }
929
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_u32::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_u32::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_u32::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_u32::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_u32::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_u32::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_u32::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_u32::<_>
930
931
0
            fn deserialize_u64<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
932
0
            where
933
0
                V: serde::de::Visitor<'de>,
934
0
            {
935
0
                let mut erased = erase::Visitor::new(visitor);
936
0
                unsafe { self.erased_deserialize_u64(&mut erased).unsafe_map(Out::take) }
937
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_u64::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_u64::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_u64::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_u64::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_u64::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_u64::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_u64::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_u64::<_>
938
939
0
            fn deserialize_u128<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
940
0
            where
941
0
                V: serde::de::Visitor<'de>,
942
0
            {
943
0
                let mut erased = erase::Visitor::new(visitor);
944
0
                unsafe { self.erased_deserialize_u128(&mut erased).unsafe_map(Out::take) }
945
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_u128::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_u128::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_u128::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_u128::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_u128::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_u128::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_u128::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_u128::<_>
946
947
0
            fn deserialize_f32<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
948
0
            where
949
0
                V: serde::de::Visitor<'de>,
950
0
            {
951
0
                let mut erased = erase::Visitor::new(visitor);
952
0
                unsafe { self.erased_deserialize_f32(&mut erased).unsafe_map(Out::take) }
953
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_f32::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_f32::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_f32::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_f32::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_f32::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_f32::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_f32::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_f32::<_>
954
955
0
            fn deserialize_f64<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
956
0
            where
957
0
                V: serde::de::Visitor<'de>,
958
0
            {
959
0
                let mut erased = erase::Visitor::new(visitor);
960
0
                unsafe { self.erased_deserialize_f64(&mut erased).unsafe_map(Out::take) }
961
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_f64::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_f64::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_f64::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_f64::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_f64::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_f64::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_f64::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_f64::<_>
962
963
0
            fn deserialize_char<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
964
0
            where
965
0
                V: serde::de::Visitor<'de>,
966
0
            {
967
0
                let mut erased = erase::Visitor::new(visitor);
968
0
                unsafe { self.erased_deserialize_char(&mut erased).unsafe_map(Out::take) }
969
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_char::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_char::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_char::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_char::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_char::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_char::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_char::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_char::<_>
970
971
0
            fn deserialize_str<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
972
0
            where
973
0
                V: serde::de::Visitor<'de>,
974
0
            {
975
0
                let mut erased = erase::Visitor::new(visitor);
976
0
                unsafe { self.erased_deserialize_str(&mut erased).unsafe_map(Out::take) }
977
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_str::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_str::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_str::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_str::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_str::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_str::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_str::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_str::<_>
978
979
0
            fn deserialize_string<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
980
0
            where
981
0
                V: serde::de::Visitor<'de>,
982
0
            {
983
0
                let mut erased = erase::Visitor::new(visitor);
984
0
                unsafe { self.erased_deserialize_string(&mut erased).unsafe_map(Out::take) }
985
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_string::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_string::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_string::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_string::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_string::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_string::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_string::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_string::<_>
986
987
0
            fn deserialize_bytes<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
988
0
            where
989
0
                V: serde::de::Visitor<'de>,
990
0
            {
991
0
                let mut erased = erase::Visitor::new(visitor);
992
0
                unsafe { self.erased_deserialize_bytes(&mut erased).unsafe_map(Out::take) }
993
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_bytes::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_bytes::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_bytes::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_bytes::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_bytes::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_bytes::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_bytes::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_bytes::<_>
994
995
0
            fn deserialize_byte_buf<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
996
0
            where
997
0
                V: serde::de::Visitor<'de>,
998
0
            {
999
0
                let mut erased = erase::Visitor::new(visitor);
1000
0
                unsafe { self.erased_deserialize_byte_buf(&mut erased).unsafe_map(Out::take) }
1001
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_byte_buf::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_byte_buf::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_byte_buf::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_byte_buf::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_byte_buf::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_byte_buf::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_byte_buf::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_byte_buf::<_>
1002
1003
0
            fn deserialize_option<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
1004
0
            where
1005
0
                V: serde::de::Visitor<'de>,
1006
0
            {
1007
0
                let mut erased = erase::Visitor::new(visitor);
1008
0
                unsafe { self.erased_deserialize_option(&mut erased).unsafe_map(Out::take) }
1009
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_option::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_option::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_option::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_option::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_option::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_option::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_option::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_option::<_>
1010
1011
0
            fn deserialize_unit<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
1012
0
            where
1013
0
                V: serde::de::Visitor<'de>,
1014
0
            {
1015
0
                let mut erased = erase::Visitor::new(visitor);
1016
0
                unsafe { self.erased_deserialize_unit(&mut erased).unsafe_map(Out::take) }
1017
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_unit::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_unit::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_unit::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_unit::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_unit::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_unit::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_unit::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_unit::<_>
1018
1019
0
            fn deserialize_unit_struct<V>($($mut)* self, name: &'static str, visitor: V) -> Result<V::Value, Error>
1020
0
            where
1021
0
                V: serde::de::Visitor<'de>,
1022
0
            {
1023
0
                let mut erased = erase::Visitor::new(visitor);
1024
0
                unsafe { self.erased_deserialize_unit_struct(name, &mut erased).unsafe_map(Out::take) }
1025
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_unit_struct::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_unit_struct::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_unit_struct::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_unit_struct::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_unit_struct::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_unit_struct::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_unit_struct::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_unit_struct::<_>
1026
1027
0
            fn deserialize_newtype_struct<V>($($mut)* self, name: &'static str, visitor: V) -> Result<V::Value, Error>
1028
0
            where
1029
0
                V: serde::de::Visitor<'de>,
1030
0
            {
1031
0
                let mut erased = erase::Visitor::new(visitor);
1032
0
                unsafe { self.erased_deserialize_newtype_struct(name, &mut erased).unsafe_map(Out::take) }
1033
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_newtype_struct::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_newtype_struct::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_newtype_struct::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_newtype_struct::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_newtype_struct::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_newtype_struct::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_newtype_struct::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_newtype_struct::<_>
1034
1035
0
            fn deserialize_seq<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
1036
0
            where
1037
0
                V: serde::de::Visitor<'de>,
1038
0
            {
1039
0
                let mut erased = erase::Visitor::new(visitor);
1040
0
                unsafe { self.erased_deserialize_seq(&mut erased).unsafe_map(Out::take) }
1041
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_seq::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_seq::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_seq::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_seq::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_seq::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_seq::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_seq::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_seq::<_>
1042
1043
0
            fn deserialize_tuple<V>($($mut)* self, len: usize, visitor: V) -> Result<V::Value, Error>
1044
0
            where
1045
0
                V: serde::de::Visitor<'de>,
1046
0
            {
1047
0
                let mut erased = erase::Visitor::new(visitor);
1048
0
                unsafe { self.erased_deserialize_tuple(len, &mut erased).unsafe_map(Out::take) }
1049
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_tuple::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_tuple::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_tuple::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_tuple::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_tuple::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_tuple::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_tuple::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_tuple::<_>
1050
1051
0
            fn deserialize_tuple_struct<V>($($mut)* self, name: &'static str, len: usize, visitor: V) -> Result<V::Value, Error>
1052
0
            where
1053
0
                V: serde::de::Visitor<'de>,
1054
0
            {
1055
0
                let mut erased = erase::Visitor::new(visitor);
1056
0
                unsafe { self.erased_deserialize_tuple_struct(name, len, &mut erased).unsafe_map(Out::take) }
1057
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_tuple_struct::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_tuple_struct::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_tuple_struct::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_tuple_struct::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_tuple_struct::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_tuple_struct::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_tuple_struct::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_tuple_struct::<_>
1058
1059
0
            fn deserialize_map<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
1060
0
            where
1061
0
                V: serde::de::Visitor<'de>,
1062
0
            {
1063
0
                let mut erased = erase::Visitor::new(visitor);
1064
0
                unsafe { self.erased_deserialize_map(&mut erased).unsafe_map(Out::take) }
1065
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_map::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_map::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_map::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_map::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_map::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_map::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_map::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_map::<_>
1066
1067
0
            fn deserialize_struct<V>($($mut)* self, name: &'static str, fields: &'static [&'static str], visitor: V) -> Result<V::Value, Error>
1068
0
            where
1069
0
                V: serde::de::Visitor<'de>,
1070
0
            {
1071
0
                let mut erased = erase::Visitor::new(visitor);
1072
0
                unsafe { self.erased_deserialize_struct(name, fields, &mut erased).unsafe_map(Out::take) }
1073
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_struct::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_struct::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_struct::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_struct::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_struct::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_struct::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_struct::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_struct::<_>
1074
1075
0
            fn deserialize_identifier<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
1076
0
            where
1077
0
                V: serde::de::Visitor<'de>,
1078
0
            {
1079
0
                let mut erased = erase::Visitor::new(visitor);
1080
0
                unsafe { self.erased_deserialize_identifier(&mut erased).unsafe_map(Out::take) }
1081
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_identifier::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_identifier::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_identifier::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_identifier::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_identifier::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_identifier::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_identifier::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_identifier::<_>
1082
1083
0
            fn deserialize_enum<V>($($mut)* self, name: &'static str, variants: &'static [&'static str], visitor: V) -> Result<V::Value, Error>
1084
0
            where
1085
0
                V: serde::de::Visitor<'de>,
1086
0
            {
1087
0
                let mut erased = erase::Visitor::new(visitor);
1088
0
                unsafe { self.erased_deserialize_enum(name, variants, &mut erased).unsafe_map(Out::take) }
1089
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_enum::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_enum::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_enum::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_enum::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_enum::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_enum::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_enum::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_enum::<_>
1090
1091
0
            fn deserialize_ignored_any<V>($($mut)* self, visitor: V) -> Result<V::Value, Error>
1092
0
            where
1093
0
                V: serde::de::Visitor<'de>,
1094
0
            {
1095
0
                let mut erased = erase::Visitor::new(visitor);
1096
0
                unsafe { self.erased_deserialize_ignored_any(&mut erased).unsafe_map(Out::take) }
1097
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::deserialize_ignored_any::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::deserialize_ignored_any::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::deserialize_ignored_any::<_>
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::deserialize_ignored_any::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::deserialize_ignored_any::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::deserialize_ignored_any::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::deserialize_ignored_any::<_>
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::deserialize_ignored_any::<_>
1098
1099
0
            fn is_human_readable(&self) -> bool {
1100
0
                self.erased_is_human_readable()
1101
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as serde::de::Deserializer>::is_human_readable
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as serde::de::Deserializer>::is_human_readable
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as serde::de::Deserializer>::is_human_readable
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as serde::de::Deserializer>::is_human_readable
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as serde::de::Deserializer>::is_human_readable
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as serde::de::Deserializer>::is_human_readable
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as serde::de::Deserializer>::is_human_readable
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as serde::de::Deserializer>::is_human_readable
1102
        }
1103
    };
1104
}
1105
1106
impl_deserializer_for_trait_object!({} &mut (dyn Deserializer<'de> + '_));
1107
impl_deserializer_for_trait_object!({} &mut (dyn Deserializer<'de> + Send + '_));
1108
impl_deserializer_for_trait_object!({} &mut (dyn Deserializer<'de> + Sync + '_));
1109
impl_deserializer_for_trait_object!({} &mut (dyn Deserializer<'de> + Send + Sync + '_));
1110
impl_deserializer_for_trait_object!({mut} Box<dyn Deserializer<'de> + '_>);
1111
impl_deserializer_for_trait_object!({mut} Box<dyn Deserializer<'de> + Send + '_>);
1112
impl_deserializer_for_trait_object!({mut} Box<dyn Deserializer<'de> + Sync + '_>);
1113
impl_deserializer_for_trait_object!({mut} Box<dyn Deserializer<'de> + Send + Sync + '_>);
1114
1115
impl<'de> serde::de::Visitor<'de> for &mut (dyn Visitor<'de> + '_) {
1116
    type Value = Out;
1117
1118
0
    fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
1119
0
        (**self).erased_expecting(formatter)
1120
0
    }
1121
1122
0
    fn visit_bool<E>(self, v: bool) -> Result<Out, E>
1123
0
    where
1124
0
        E: serde::de::Error,
1125
0
    {
1126
0
        self.erased_visit_bool(v).map_err(unerase)
1127
0
    }
1128
1129
0
    fn visit_i8<E>(self, v: i8) -> Result<Out, E>
1130
0
    where
1131
0
        E: serde::de::Error,
1132
0
    {
1133
0
        self.erased_visit_i8(v).map_err(unerase)
1134
0
    }
1135
1136
0
    fn visit_i16<E>(self, v: i16) -> Result<Out, E>
1137
0
    where
1138
0
        E: serde::de::Error,
1139
0
    {
1140
0
        self.erased_visit_i16(v).map_err(unerase)
1141
0
    }
1142
1143
0
    fn visit_i32<E>(self, v: i32) -> Result<Out, E>
1144
0
    where
1145
0
        E: serde::de::Error,
1146
0
    {
1147
0
        self.erased_visit_i32(v).map_err(unerase)
1148
0
    }
1149
1150
0
    fn visit_i64<E>(self, v: i64) -> Result<Out, E>
1151
0
    where
1152
0
        E: serde::de::Error,
1153
0
    {
1154
0
        self.erased_visit_i64(v).map_err(unerase)
1155
0
    }
1156
1157
0
    fn visit_i128<E>(self, v: i128) -> Result<Out, E>
1158
0
    where
1159
0
        E: serde::de::Error,
1160
0
    {
1161
0
        self.erased_visit_i128(v).map_err(unerase)
1162
0
    }
1163
1164
0
    fn visit_u8<E>(self, v: u8) -> Result<Out, E>
1165
0
    where
1166
0
        E: serde::de::Error,
1167
0
    {
1168
0
        self.erased_visit_u8(v).map_err(unerase)
1169
0
    }
1170
1171
0
    fn visit_u16<E>(self, v: u16) -> Result<Out, E>
1172
0
    where
1173
0
        E: serde::de::Error,
1174
0
    {
1175
0
        self.erased_visit_u16(v).map_err(unerase)
1176
0
    }
1177
1178
0
    fn visit_u32<E>(self, v: u32) -> Result<Out, E>
1179
0
    where
1180
0
        E: serde::de::Error,
1181
0
    {
1182
0
        self.erased_visit_u32(v).map_err(unerase)
1183
0
    }
1184
1185
0
    fn visit_u64<E>(self, v: u64) -> Result<Out, E>
1186
0
    where
1187
0
        E: serde::de::Error,
1188
0
    {
1189
0
        self.erased_visit_u64(v).map_err(unerase)
1190
0
    }
1191
1192
0
    fn visit_u128<E>(self, v: u128) -> Result<Out, E>
1193
0
    where
1194
0
        E: serde::de::Error,
1195
0
    {
1196
0
        self.erased_visit_u128(v).map_err(unerase)
1197
0
    }
1198
1199
0
    fn visit_f32<E>(self, v: f32) -> Result<Out, E>
1200
0
    where
1201
0
        E: serde::de::Error,
1202
0
    {
1203
0
        self.erased_visit_f32(v).map_err(unerase)
1204
0
    }
1205
1206
0
    fn visit_f64<E>(self, v: f64) -> Result<Out, E>
1207
0
    where
1208
0
        E: serde::de::Error,
1209
0
    {
1210
0
        self.erased_visit_f64(v).map_err(unerase)
1211
0
    }
1212
1213
0
    fn visit_char<E>(self, v: char) -> Result<Out, E>
1214
0
    where
1215
0
        E: serde::de::Error,
1216
0
    {
1217
0
        self.erased_visit_char(v).map_err(unerase)
1218
0
    }
1219
1220
0
    fn visit_str<E>(self, v: &str) -> Result<Out, E>
1221
0
    where
1222
0
        E: serde::de::Error,
1223
0
    {
1224
0
        self.erased_visit_str(v).map_err(unerase)
1225
0
    }
1226
1227
0
    fn visit_borrowed_str<E>(self, v: &'de str) -> Result<Out, E>
1228
0
    where
1229
0
        E: serde::de::Error,
1230
0
    {
1231
0
        self.erased_visit_borrowed_str(v).map_err(unerase)
1232
0
    }
1233
1234
    #[cfg(feature = "alloc")]
1235
0
    fn visit_string<E>(self, v: String) -> Result<Out, E>
1236
0
    where
1237
0
        E: serde::de::Error,
1238
0
    {
1239
0
        self.erased_visit_string(v).map_err(unerase)
1240
0
    }
1241
1242
0
    fn visit_bytes<E>(self, v: &[u8]) -> Result<Out, E>
1243
0
    where
1244
0
        E: serde::de::Error,
1245
0
    {
1246
0
        self.erased_visit_bytes(v).map_err(unerase)
1247
0
    }
1248
1249
0
    fn visit_borrowed_bytes<E>(self, v: &'de [u8]) -> Result<Out, E>
1250
0
    where
1251
0
        E: serde::de::Error,
1252
0
    {
1253
0
        self.erased_visit_borrowed_bytes(v).map_err(unerase)
1254
0
    }
1255
1256
    #[cfg(feature = "alloc")]
1257
0
    fn visit_byte_buf<E>(self, v: Vec<u8>) -> Result<Out, E>
1258
0
    where
1259
0
        E: serde::de::Error,
1260
0
    {
1261
0
        self.erased_visit_byte_buf(v).map_err(unerase)
1262
0
    }
1263
1264
0
    fn visit_none<E>(self) -> Result<Out, E>
1265
0
    where
1266
0
        E: serde::de::Error,
1267
0
    {
1268
0
        self.erased_visit_none().map_err(unerase)
1269
0
    }
1270
1271
0
    fn visit_some<D>(self, deserializer: D) -> Result<Out, D::Error>
1272
0
    where
1273
0
        D: serde::Deserializer<'de>,
1274
0
    {
1275
0
        let mut erased = erase::Deserializer::new(deserializer);
1276
0
        self.erased_visit_some(&mut erased).map_err(unerase)
1277
0
    }
1278
1279
0
    fn visit_unit<E>(self) -> Result<Out, E>
1280
0
    where
1281
0
        E: serde::de::Error,
1282
0
    {
1283
0
        self.erased_visit_unit().map_err(unerase)
1284
0
    }
1285
1286
0
    fn visit_newtype_struct<D>(self, deserializer: D) -> Result<Out, D::Error>
1287
0
    where
1288
0
        D: serde::Deserializer<'de>,
1289
0
    {
1290
0
        let mut erased = erase::Deserializer::new(deserializer);
1291
0
        self.erased_visit_newtype_struct(&mut erased)
1292
0
            .map_err(unerase)
1293
0
    }
1294
1295
0
    fn visit_seq<V>(self, seq: V) -> Result<Out, V::Error>
1296
0
    where
1297
0
        V: serde::de::SeqAccess<'de>,
1298
0
    {
1299
0
        let mut erased = erase::SeqAccess::new(seq);
1300
0
        self.erased_visit_seq(&mut erased).map_err(unerase)
1301
0
    }
1302
1303
0
    fn visit_map<V>(self, map: V) -> Result<Out, V::Error>
1304
0
    where
1305
0
        V: serde::de::MapAccess<'de>,
1306
0
    {
1307
0
        let mut erased = erase::MapAccess::new(map);
1308
0
        self.erased_visit_map(&mut erased).map_err(unerase)
1309
0
    }
1310
1311
0
    fn visit_enum<V>(self, data: V) -> Result<Out, V::Error>
1312
0
    where
1313
0
        V: serde::de::EnumAccess<'de>,
1314
0
    {
1315
0
        let mut erased = erase::EnumAccess::new(data);
1316
0
        self.erased_visit_enum(&mut erased).map_err(unerase)
1317
0
    }
1318
}
1319
1320
impl<'de> serde::de::SeqAccess<'de> for &mut (dyn SeqAccess<'de> + '_) {
1321
    type Error = Error;
1322
1323
0
    fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>, Error>
1324
0
    where
1325
0
        T: serde::de::DeserializeSeed<'de>,
1326
0
    {
1327
0
        let mut seed = erase::DeserializeSeed::new(seed);
1328
0
        unsafe {
1329
0
            (**self)
1330
0
                .erased_next_element(&mut seed)
1331
0
                .map(|opt| opt.unsafe_map(Out::take))
1332
0
        }
1333
0
    }
1334
1335
0
    fn size_hint(&self) -> Option<usize> {
1336
0
        (**self).erased_size_hint()
1337
0
    }
1338
}
1339
1340
impl<'de> serde::de::MapAccess<'de> for &mut (dyn MapAccess<'de> + '_) {
1341
    type Error = Error;
1342
1343
0
    fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Error>
1344
0
    where
1345
0
        K: serde::de::DeserializeSeed<'de>,
1346
0
    {
1347
0
        let mut erased = erase::DeserializeSeed::new(seed);
1348
0
        unsafe {
1349
0
            (**self)
1350
0
                .erased_next_key(&mut erased)
1351
0
                .map(|opt| opt.unsafe_map(Out::take))
1352
0
        }
1353
0
    }
1354
1355
0
    fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Error>
1356
0
    where
1357
0
        V: serde::de::DeserializeSeed<'de>,
1358
0
    {
1359
0
        let mut erased = erase::DeserializeSeed::new(seed);
1360
0
        unsafe {
1361
0
            (**self)
1362
0
                .erased_next_value(&mut erased)
1363
0
                .unsafe_map(Out::take)
1364
0
        }
1365
0
    }
1366
1367
0
    fn size_hint(&self) -> Option<usize> {
1368
0
        (**self).erased_size_hint()
1369
0
    }
1370
}
1371
1372
impl<'de> serde::de::EnumAccess<'de> for &mut (dyn EnumAccess<'de> + '_) {
1373
    type Error = Error;
1374
    type Variant = Variant<'de>;
1375
1376
0
    fn variant_seed<V>(self, seed: V) -> Result<(V::Value, Self::Variant), Self::Error>
1377
0
    where
1378
0
        V: serde::de::DeserializeSeed<'de>,
1379
0
    {
1380
0
        let mut erased = erase::DeserializeSeed::new(seed);
1381
0
        match self.erased_variant_seed(&mut erased) {
1382
0
            Ok((out, variant)) => Ok((unsafe { out.take() }, variant)),
1383
0
            Err(err) => Err(err),
1384
        }
1385
0
    }
1386
}
1387
1388
pub struct Variant<'de> {
1389
    data: Any,
1390
    unit_variant: unsafe fn(Any) -> Result<(), Error>,
1391
    visit_newtype: unsafe fn(Any, seed: &mut dyn DeserializeSeed<'de>) -> Result<Out, Error>,
1392
    tuple_variant: unsafe fn(Any, len: usize, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error>,
1393
    struct_variant: unsafe fn(
1394
        Any,
1395
        fields: &'static [&'static str],
1396
        visitor: &mut dyn Visitor<'de>,
1397
    ) -> Result<Out, Error>,
1398
}
1399
1400
impl<'de> serde::de::VariantAccess<'de> for Variant<'de> {
1401
    type Error = Error;
1402
1403
0
    fn unit_variant(self) -> Result<(), Error> {
1404
0
        unsafe { (self.unit_variant)(self.data) }
1405
0
    }
1406
1407
0
    fn newtype_variant_seed<T>(self, seed: T) -> Result<T::Value, Error>
1408
0
    where
1409
0
        T: serde::de::DeserializeSeed<'de>,
1410
0
    {
1411
0
        let mut erased = erase::DeserializeSeed::new(seed);
1412
0
        unsafe { (self.visit_newtype)(self.data, &mut erased).unsafe_map(Out::take) }
1413
0
    }
1414
1415
0
    fn tuple_variant<V>(self, len: usize, visitor: V) -> Result<V::Value, Error>
1416
0
    where
1417
0
        V: serde::de::Visitor<'de>,
1418
0
    {
1419
0
        let mut erased = erase::Visitor::new(visitor);
1420
0
        unsafe { (self.tuple_variant)(self.data, len, &mut erased).unsafe_map(Out::take) }
1421
0
    }
1422
1423
0
    fn struct_variant<V>(
1424
0
        self,
1425
0
        fields: &'static [&'static str],
1426
0
        visitor: V,
1427
0
    ) -> Result<V::Value, Error>
1428
0
    where
1429
0
        V: serde::de::Visitor<'de>,
1430
0
    {
1431
0
        let mut erased = erase::Visitor::new(visitor);
1432
0
        unsafe { (self.struct_variant)(self.data, fields, &mut erased).unsafe_map(Out::take) }
1433
0
    }
1434
}
1435
1436
// IMPL ERASED SERDE FOR ERASED SERDE //////////////////////////////////////////
1437
1438
macro_rules! deref_erased_deserializer {
1439
    (<'de $(, $T:ident)*> Deserializer<'de> for $ty:ty $(where $($where:tt)*)?) => {
1440
        impl<'de $(, $T)*> Deserializer<'de> for $ty $(where $($where)*)? {
1441
0
            fn erased_deserialize_any(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1442
0
                (**self).erased_deserialize_any(visitor)
1443
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_any
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_any
1444
1445
0
            fn erased_deserialize_bool(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1446
0
                (**self).erased_deserialize_bool(visitor)
1447
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_bool
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_bool
1448
1449
0
            fn erased_deserialize_i8(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1450
0
                (**self).erased_deserialize_i8(visitor)
1451
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_i8
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_i8
1452
1453
0
            fn erased_deserialize_i16(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1454
0
                (**self).erased_deserialize_i16(visitor)
1455
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_i16
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_i16
1456
1457
0
            fn erased_deserialize_i32(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1458
0
                (**self).erased_deserialize_i32(visitor)
1459
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_i32
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_i32
1460
1461
0
            fn erased_deserialize_i64(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1462
0
                (**self).erased_deserialize_i64(visitor)
1463
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_i64
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_i64
1464
1465
0
            fn erased_deserialize_i128(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1466
0
                (**self).erased_deserialize_i128(visitor)
1467
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_i128
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_i128
1468
1469
0
            fn erased_deserialize_u8(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1470
0
                (**self).erased_deserialize_u8(visitor)
1471
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_u8
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_u8
1472
1473
0
            fn erased_deserialize_u16(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1474
0
                (**self).erased_deserialize_u16(visitor)
1475
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_u16
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_u16
1476
1477
0
            fn erased_deserialize_u32(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1478
0
                (**self).erased_deserialize_u32(visitor)
1479
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_u32
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_u32
1480
1481
0
            fn erased_deserialize_u64(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1482
0
                (**self).erased_deserialize_u64(visitor)
1483
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_u64
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_u64
1484
1485
0
            fn erased_deserialize_u128(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1486
0
                (**self).erased_deserialize_u128(visitor)
1487
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_u128
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_u128
1488
1489
0
            fn erased_deserialize_f32(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1490
0
                (**self).erased_deserialize_f32(visitor)
1491
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_f32
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_f32
1492
1493
0
            fn erased_deserialize_f64(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1494
0
                (**self).erased_deserialize_f64(visitor)
1495
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_f64
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_f64
1496
1497
0
            fn erased_deserialize_char(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1498
0
                (**self).erased_deserialize_char(visitor)
1499
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_char
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_char
1500
1501
0
            fn erased_deserialize_str(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1502
0
                (**self).erased_deserialize_str(visitor)
1503
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_str
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_str
1504
1505
0
            fn erased_deserialize_string(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1506
0
                (**self).erased_deserialize_string(visitor)
1507
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_string
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_string
1508
1509
0
            fn erased_deserialize_bytes(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1510
0
                (**self).erased_deserialize_bytes(visitor)
1511
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_bytes
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_bytes
1512
1513
0
            fn erased_deserialize_byte_buf(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1514
0
                (**self).erased_deserialize_byte_buf(visitor)
1515
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_byte_buf
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_byte_buf
1516
1517
0
            fn erased_deserialize_option(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1518
0
                (**self).erased_deserialize_option(visitor)
1519
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_option
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_option
1520
1521
0
            fn erased_deserialize_unit(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1522
0
                (**self).erased_deserialize_unit(visitor)
1523
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_unit
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_unit
1524
1525
0
            fn erased_deserialize_unit_struct(&mut self, name: &'static str, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1526
0
                (**self).erased_deserialize_unit_struct(name, visitor)
1527
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_unit_struct
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_unit_struct
1528
1529
0
            fn erased_deserialize_newtype_struct(&mut self, name: &'static str, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1530
0
                (**self).erased_deserialize_newtype_struct(name, visitor)
1531
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_newtype_struct
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_newtype_struct
1532
1533
0
            fn erased_deserialize_seq(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1534
0
                (**self).erased_deserialize_seq(visitor)
1535
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_seq
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_seq
1536
1537
0
            fn erased_deserialize_tuple(&mut self, len: usize, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1538
0
                (**self).erased_deserialize_tuple(len, visitor)
1539
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_tuple
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_tuple
1540
1541
0
            fn erased_deserialize_tuple_struct(&mut self, name: &'static str, len: usize, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1542
0
                (**self).erased_deserialize_tuple_struct(name, len, visitor)
1543
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_tuple_struct
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_tuple_struct
1544
1545
0
            fn erased_deserialize_map(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1546
0
                (**self).erased_deserialize_map(visitor)
1547
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_map
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_map
1548
1549
0
            fn erased_deserialize_struct(&mut self, name: &'static str, fields: &'static [&'static str], visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1550
0
                (**self).erased_deserialize_struct(name, fields, visitor)
1551
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_struct
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_struct
1552
1553
0
            fn erased_deserialize_identifier(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1554
0
                (**self).erased_deserialize_identifier(visitor)
1555
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_identifier
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_identifier
1556
1557
0
            fn erased_deserialize_enum(&mut self, name: &'static str, variants: &'static [&'static str], visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1558
0
                (**self).erased_deserialize_enum(name, variants, visitor)
1559
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_enum
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_enum
1560
1561
0
            fn erased_deserialize_ignored_any(&mut self, visitor: &mut dyn Visitor<'de>) -> Result<Out, Error> {
1562
0
                (**self).erased_deserialize_ignored_any(visitor)
1563
0
            }
Unexecuted instantiation: <&mut _ as erased_serde::de::Deserializer>::erased_deserialize_ignored_any
Unexecuted instantiation: <alloc::boxed::Box<_> as erased_serde::de::Deserializer>::erased_deserialize_ignored_any
1564
1565
0
            fn erased_is_human_readable(&self) -> bool {
1566
0
                (**self).erased_is_human_readable()
1567
0
            }
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer as erased_serde::de::Deserializer>::erased_is_human_readable
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Send as erased_serde::de::Deserializer>::erased_is_human_readable
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync as erased_serde::de::Deserializer>::erased_is_human_readable
Unexecuted instantiation: <&mut dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send as erased_serde::de::Deserializer>::erased_is_human_readable
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer> as erased_serde::de::Deserializer>::erased_is_human_readable
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Send> as erased_serde::de::Deserializer>::erased_is_human_readable
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync> as erased_serde::de::Deserializer>::erased_is_human_readable
Unexecuted instantiation: <alloc::boxed::Box<dyn erased_serde::de::Deserializer + core::marker::Sync + core::marker::Send> as erased_serde::de::Deserializer>::erased_is_human_readable
1568
        }
1569
1570
        impl<'de $(, $T)*> Sealed for $ty $(where $($where)*)? {}
1571
    };
1572
}
1573
1574
deref_erased_deserializer!(<'de, T> Deserializer<'de> for &mut T where T: ?Sized + Deserializer<'de>);
1575
deref_erased_deserializer!(<'de, T> Deserializer<'de> for Box<T> where T: ?Sized + Deserializer<'de>);
1576
1577
// TEST ////////////////////////////////////////////////////////////////////////
1578
1579
#[cfg(test)]
1580
mod tests {
1581
    use super::*;
1582
    use alloc::borrow::ToOwned;
1583
    use core::fmt::Debug;
1584
    use serde_derive::Deserialize;
1585
1586
    fn test_json<'de, T>(json: &'de [u8])
1587
    where
1588
        T: serde::Deserialize<'de> + PartialEq + Debug,
1589
    {
1590
        let expected: T = serde_json::from_slice(json).unwrap();
1591
1592
        // test borrowed trait object
1593
        {
1594
            let mut de = serde_json::Deserializer::from_slice(json);
1595
            let de: &mut dyn Deserializer = &mut <dyn Deserializer>::erase(&mut de);
1596
            assert_eq!(expected, deserialize::<T>(de).unwrap());
1597
        }
1598
1599
        // test boxed trait object
1600
        {
1601
            let mut de = serde_json::Deserializer::from_slice(json);
1602
            let mut de: Box<dyn Deserializer> = Box::new(<dyn Deserializer>::erase(&mut de));
1603
            assert_eq!(expected, deserialize::<T>(&mut de).unwrap());
1604
        }
1605
    }
1606
1607
    #[test]
1608
    fn test_value() {
1609
        test_json::<serde_json::Value>(br#"["a", 1, [true], {"a": 1}]"#);
1610
    }
1611
1612
    #[test]
1613
    fn test_struct() {
1614
        #[derive(Deserialize, PartialEq, Debug)]
1615
        struct S {
1616
            f: usize,
1617
        }
1618
1619
        test_json::<S>(br#"{"f":256}"#);
1620
    }
1621
1622
    #[test]
1623
    fn test_enum() {
1624
        #[derive(Deserialize, PartialEq, Debug)]
1625
        enum E {
1626
            Unit,
1627
            Newtype(bool),
1628
            Tuple(bool, bool),
1629
            Struct { t: bool, f: bool },
1630
        }
1631
1632
        test_json::<E>(br#""Unit""#);
1633
        test_json::<E>(br#"{"Newtype":true}"#);
1634
        test_json::<E>(br#"{"Tuple":[true,false]}"#);
1635
        test_json::<E>(br#"{"Struct":{"t":true,"f":false}}"#);
1636
    }
1637
1638
    #[test]
1639
    fn test_borrowed() {
1640
        let bytes = br#""borrowed""#.to_owned();
1641
        test_json::<&str>(&bytes);
1642
    }
1643
1644
    #[test]
1645
    fn assert_deserializer() {
1646
        fn assert<'de, T: serde::Deserializer<'de>>() {}
1647
1648
        assert::<&mut dyn Deserializer>();
1649
        assert::<&mut (dyn Deserializer + Send)>();
1650
        assert::<&mut (dyn Deserializer + Sync)>();
1651
        assert::<&mut (dyn Deserializer + Send + Sync)>();
1652
        assert::<&mut (dyn Deserializer + Sync + Send)>();
1653
1654
        assert::<Box<dyn Deserializer>>();
1655
        assert::<Box<dyn Deserializer + Send>>();
1656
        assert::<Box<dyn Deserializer + Sync>>();
1657
        assert::<Box<dyn Deserializer + Send + Sync>>();
1658
        assert::<Box<dyn Deserializer + Sync + Send>>();
1659
    }
1660
}