Coverage Report

Created: 2025-12-31 06:22

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