Coverage Report

Created: 2026-08-14 06:27

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/serde_json-1.0.82/src/de.rs
Line
Count
Source
1
//! Deserialize JSON data to a Rust data structure.
2
3
use crate::error::{Error, ErrorCode, Result};
4
#[cfg(feature = "float_roundtrip")]
5
use crate::lexical;
6
use crate::number::Number;
7
use crate::read::{self, Fused, Reference};
8
use alloc::string::String;
9
use alloc::vec::Vec;
10
#[cfg(feature = "float_roundtrip")]
11
use core::iter;
12
use core::iter::FusedIterator;
13
use core::marker::PhantomData;
14
use core::result;
15
use core::str::FromStr;
16
use serde::de::{self, Expected, Unexpected};
17
use serde::{forward_to_deserialize_any, serde_if_integer128};
18
19
#[cfg(feature = "arbitrary_precision")]
20
use crate::number::NumberDeserializer;
21
22
pub use crate::read::{Read, SliceRead, StrRead};
23
24
#[cfg(feature = "std")]
25
pub use crate::read::IoRead;
26
27
//////////////////////////////////////////////////////////////////////////////
28
29
/// A structure that deserializes JSON into Rust values.
30
pub struct Deserializer<R> {
31
    read: R,
32
    scratch: Vec<u8>,
33
    remaining_depth: u8,
34
    #[cfg(feature = "float_roundtrip")]
35
    single_precision: bool,
36
    #[cfg(feature = "unbounded_depth")]
37
    disable_recursion_limit: bool,
38
}
39
40
impl<'de, R> Deserializer<R>
41
where
42
    R: read::Read<'de>,
43
{
44
    /// Create a JSON deserializer from one of the possible serde_json input
45
    /// sources.
46
    ///
47
    /// Typically it is more convenient to use one of these methods instead:
48
    ///
49
    ///   - Deserializer::from_str
50
    ///   - Deserializer::from_slice
51
    ///   - Deserializer::from_reader
52
0
    pub fn new(read: R) -> Self {
53
0
        Deserializer {
54
0
            read,
55
0
            scratch: Vec::new(),
56
0
            remaining_depth: 128,
57
0
            #[cfg(feature = "float_roundtrip")]
58
0
            single_precision: false,
59
0
            #[cfg(feature = "unbounded_depth")]
60
0
            disable_recursion_limit: false,
61
0
        }
62
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::new
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::new
63
}
64
65
#[cfg(feature = "std")]
66
impl<R> Deserializer<read::IoRead<R>>
67
where
68
    R: crate::io::Read,
69
{
70
    /// Creates a JSON deserializer from an `io::Read`.
71
    ///
72
    /// Reader-based deserializers do not support deserializing borrowed types
73
    /// like `&str`, since the `std::io::Read` trait has no non-copying methods
74
    /// -- everything it does involves copying bytes out of the data source.
75
0
    pub fn from_reader(reader: R) -> Self {
76
0
        Deserializer::new(read::IoRead::new(reader))
77
0
    }
78
}
79
80
impl<'a> Deserializer<read::SliceRead<'a>> {
81
    /// Creates a JSON deserializer from a `&[u8]`.
82
0
    pub fn from_slice(bytes: &'a [u8]) -> Self {
83
0
        Deserializer::new(read::SliceRead::new(bytes))
84
0
    }
85
}
86
87
impl<'a> Deserializer<read::StrRead<'a>> {
88
    /// Creates a JSON deserializer from a `&str`.
89
0
    pub fn from_str(s: &'a str) -> Self {
90
0
        Deserializer::new(read::StrRead::new(s))
91
0
    }
92
}
93
94
macro_rules! overflow {
95
    ($a:ident * 10 + $b:ident, $c:expr) => {
96
        match $c {
97
            c => $a >= c / 10 && ($a > c / 10 || $b > c % 10),
98
        }
99
    };
100
}
101
102
pub(crate) enum ParserNumber {
103
    F64(f64),
104
    U64(u64),
105
    I64(i64),
106
    #[cfg(feature = "arbitrary_precision")]
107
    String(String),
108
}
109
110
impl ParserNumber {
111
0
    fn visit<'de, V>(self, visitor: V) -> Result<V::Value>
112
0
    where
113
0
        V: de::Visitor<'de>,
114
    {
115
0
        match self {
116
0
            ParserNumber::F64(x) => visitor.visit_f64(x),
117
0
            ParserNumber::U64(x) => visitor.visit_u64(x),
118
0
            ParserNumber::I64(x) => visitor.visit_i64(x),
119
            #[cfg(feature = "arbitrary_precision")]
120
            ParserNumber::String(x) => visitor.visit_map(NumberDeserializer { number: x.into() }),
121
        }
122
0
    }
Unexecuted instantiation: <serde_json::de::ParserNumber>::visit::<<serde_json::value::Value as serde_core::de::Deserialize>::deserialize::ValueVisitor>
Unexecuted instantiation: <serde_json::de::ParserNumber>::visit::<base::descriptor_reflection::deserialize_descriptor::DescriptorVisitor>
Unexecuted instantiation: <serde_json::de::ParserNumber>::visit::<<u8 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <serde_json::de::ParserNumber>::visit::<<u16 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <serde_json::de::ParserNumber>::visit::<<u32 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <serde_json::de::ParserNumber>::visit::<<u64 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <serde_json::de::ParserNumber>::visit::<<usize as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <serde_json::de::ParserNumber>::visit::<<i32 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
123
124
0
    fn invalid_type(self, exp: &dyn Expected) -> Error {
125
0
        match self {
126
0
            ParserNumber::F64(x) => de::Error::invalid_type(Unexpected::Float(x), exp),
127
0
            ParserNumber::U64(x) => de::Error::invalid_type(Unexpected::Unsigned(x), exp),
128
0
            ParserNumber::I64(x) => de::Error::invalid_type(Unexpected::Signed(x), exp),
129
            #[cfg(feature = "arbitrary_precision")]
130
            ParserNumber::String(_) => de::Error::invalid_type(Unexpected::Other("number"), exp),
131
        }
132
0
    }
133
}
134
135
impl<'de, R: Read<'de>> Deserializer<R> {
136
    /// The `Deserializer::end` method should be called after a value has been fully deserialized.
137
    /// This allows the `Deserializer` to validate that the input stream is at the end or that it
138
    /// only has trailing whitespace.
139
0
    pub fn end(&mut self) -> Result<()> {
140
0
        match tri!(self.parse_whitespace()) {
141
0
            Some(_) => Err(self.peek_error(ErrorCode::TrailingCharacters)),
142
0
            None => Ok(()),
143
        }
144
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::end
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::end
145
146
    /// Turn a JSON deserializer into an iterator over values of type T.
147
0
    pub fn into_iter<T>(self) -> StreamDeserializer<'de, R, T>
148
0
    where
149
0
        T: de::Deserialize<'de>,
150
    {
151
        // This cannot be an implementation of std::iter::IntoIterator because
152
        // we need the caller to choose what T is.
153
0
        let offset = self.read.byte_offset();
154
0
        StreamDeserializer {
155
0
            de: self,
156
0
            offset,
157
0
            failed: false,
158
0
            output: PhantomData,
159
0
            lifetime: PhantomData,
160
0
        }
161
0
    }
162
163
    /// Parse arbitrarily deep JSON structures without any consideration for
164
    /// overflowing the stack.
165
    ///
166
    /// You will want to provide some other way to protect against stack
167
    /// overflows, such as by wrapping your Deserializer in the dynamically
168
    /// growing stack adapter provided by the serde_stacker crate. Additionally
169
    /// you will need to be careful around other recursive operations on the
170
    /// parsed result which may overflow the stack after deserialization has
171
    /// completed, including, but not limited to, Display and Debug and Drop
172
    /// impls.
173
    ///
174
    /// *This method is only available if serde_json is built with the
175
    /// `"unbounded_depth"` feature.*
176
    ///
177
    /// # Examples
178
    ///
179
    /// ```
180
    /// use serde::Deserialize;
181
    /// use serde_json::Value;
182
    ///
183
    /// fn main() {
184
    ///     let mut json = String::new();
185
    ///     for _ in 0..10000 {
186
    ///         json = format!("[{}]", json);
187
    ///     }
188
    ///
189
    ///     let mut deserializer = serde_json::Deserializer::from_str(&json);
190
    ///     deserializer.disable_recursion_limit();
191
    ///     let deserializer = serde_stacker::Deserializer::new(&mut deserializer);
192
    ///     let value = Value::deserialize(deserializer).unwrap();
193
    ///
194
    ///     carefully_drop_nested_arrays(value);
195
    /// }
196
    ///
197
    /// fn carefully_drop_nested_arrays(value: Value) {
198
    ///     let mut stack = vec![value];
199
    ///     while let Some(value) = stack.pop() {
200
    ///         if let Value::Array(array) = value {
201
    ///             stack.extend(array);
202
    ///         }
203
    ///     }
204
    /// }
205
    /// ```
206
    #[cfg(feature = "unbounded_depth")]
207
    #[cfg_attr(docsrs, doc(cfg(feature = "unbounded_depth")))]
208
    pub fn disable_recursion_limit(&mut self) {
209
        self.disable_recursion_limit = true;
210
    }
211
212
0
    fn peek(&mut self) -> Result<Option<u8>> {
213
0
        self.read.peek()
214
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::peek
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::peek
215
216
0
    fn peek_or_null(&mut self) -> Result<u8> {
217
0
        Ok(tri!(self.peek()).unwrap_or(b'\x00'))
218
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::peek_or_null
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::peek_or_null
219
220
0
    fn eat_char(&mut self) {
221
0
        self.read.discard();
222
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::eat_char
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::eat_char
223
224
0
    fn next_char(&mut self) -> Result<Option<u8>> {
225
0
        self.read.next()
226
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::next_char
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::next_char
227
228
0
    fn next_char_or_null(&mut self) -> Result<u8> {
229
0
        Ok(tri!(self.next_char()).unwrap_or(b'\x00'))
230
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<_>>::next_char_or_null
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::next_char_or_null
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::next_char_or_null
231
232
    /// Error caused by a byte from next_char().
233
    #[cold]
234
0
    fn error(&self, reason: ErrorCode) -> Error {
235
0
        let position = self.read.position();
236
0
        Error::syntax(reason, position.line, position.column)
237
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::error
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::error
238
239
    /// Error caused by a byte from peek().
240
    #[cold]
241
0
    fn peek_error(&self, reason: ErrorCode) -> Error {
242
0
        let position = self.read.peek_position();
243
0
        Error::syntax(reason, position.line, position.column)
244
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::peek_error
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::peek_error
245
246
    /// Returns the first non-whitespace byte without consuming it, or `None` if
247
    /// EOF is encountered.
248
0
    fn parse_whitespace(&mut self) -> Result<Option<u8>> {
249
        loop {
250
0
            match tri!(self.peek()) {
251
0
                Some(b' ') | Some(b'\n') | Some(b'\t') | Some(b'\r') => {
252
0
                    self.eat_char();
253
0
                }
254
0
                other => {
255
0
                    return Ok(other);
256
                }
257
            }
258
        }
259
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::parse_whitespace
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::parse_whitespace
260
261
    #[cold]
262
0
    fn peek_invalid_type(&mut self, exp: &dyn Expected) -> Error {
263
0
        let err = match self.peek_or_null().unwrap_or(b'\x00') {
264
            b'n' => {
265
0
                self.eat_char();
266
0
                if let Err(err) = self.parse_ident(b"ull") {
267
0
                    return err;
268
0
                }
269
0
                de::Error::invalid_type(Unexpected::Unit, exp)
270
            }
271
            b't' => {
272
0
                self.eat_char();
273
0
                if let Err(err) = self.parse_ident(b"rue") {
274
0
                    return err;
275
0
                }
276
0
                de::Error::invalid_type(Unexpected::Bool(true), exp)
277
            }
278
            b'f' => {
279
0
                self.eat_char();
280
0
                if let Err(err) = self.parse_ident(b"alse") {
281
0
                    return err;
282
0
                }
283
0
                de::Error::invalid_type(Unexpected::Bool(false), exp)
284
            }
285
            b'-' => {
286
0
                self.eat_char();
287
0
                match self.parse_any_number(false) {
288
0
                    Ok(n) => n.invalid_type(exp),
289
0
                    Err(err) => return err,
290
                }
291
            }
292
0
            b'0'..=b'9' => match self.parse_any_number(true) {
293
0
                Ok(n) => n.invalid_type(exp),
294
0
                Err(err) => return err,
295
            },
296
            b'"' => {
297
0
                self.eat_char();
298
0
                self.scratch.clear();
299
0
                match self.read.parse_str(&mut self.scratch) {
300
0
                    Ok(s) => de::Error::invalid_type(Unexpected::Str(&s), exp),
301
0
                    Err(err) => return err,
302
                }
303
            }
304
0
            b'[' => de::Error::invalid_type(Unexpected::Seq, exp),
305
0
            b'{' => de::Error::invalid_type(Unexpected::Map, exp),
306
0
            _ => self.peek_error(ErrorCode::ExpectedSomeValue),
307
        };
308
309
0
        self.fix_position(err)
310
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<_>>::peek_invalid_type
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::peek_invalid_type
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::peek_invalid_type
311
312
0
    fn deserialize_number<V>(&mut self, visitor: V) -> Result<V::Value>
313
0
    where
314
0
        V: de::Visitor<'de>,
315
    {
316
0
        let peek = match tri!(self.parse_whitespace()) {
317
0
            Some(b) => b,
318
            None => {
319
0
                return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
320
            }
321
        };
322
323
0
        let value = match peek {
324
            b'-' => {
325
0
                self.eat_char();
326
0
                tri!(self.parse_integer(false)).visit(visitor)
327
            }
328
0
            b'0'..=b'9' => tri!(self.parse_integer(true)).visit(visitor),
329
0
            _ => Err(self.peek_invalid_type(&visitor)),
330
        };
331
332
0
        match value {
333
0
            Ok(value) => Ok(value),
334
0
            Err(err) => Err(self.fix_position(err)),
335
        }
336
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<_>>::deserialize_number::<_>
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::deserialize_number::<<u16 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::deserialize_number::<<u32 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::deserialize_number::<base::descriptor_reflection::deserialize_descriptor::DescriptorVisitor>
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::deserialize_number::<<u8 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::deserialize_number::<<u16 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::deserialize_number::<<u32 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::deserialize_number::<<u64 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::deserialize_number::<<usize as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::deserialize_number::<<i32 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
337
338
    serde_if_integer128! {
339
0
        fn scan_integer128(&mut self, buf: &mut String) -> Result<()> {
340
0
            match tri!(self.next_char_or_null()) {
341
                b'0' => {
342
0
                    buf.push('0');
343
                    // There can be only one leading '0'.
344
0
                    match tri!(self.peek_or_null()) {
345
0
                        b'0'..=b'9' => {
346
0
                            Err(self.peek_error(ErrorCode::InvalidNumber))
347
                        }
348
0
                        _ => Ok(()),
349
                    }
350
                }
351
0
                c @ b'1'..=b'9' => {
352
0
                    buf.push(c as char);
353
0
                    while let c @ b'0'..=b'9' = tri!(self.peek_or_null()) {
354
0
                        self.eat_char();
355
0
                        buf.push(c as char);
356
0
                    }
357
0
                    Ok(())
358
                }
359
                _ => {
360
0
                    Err(self.error(ErrorCode::InvalidNumber))
361
                }
362
            }
363
0
        }
364
    }
365
366
    #[cold]
367
0
    fn fix_position(&self, err: Error) -> Error {
368
0
        err.fix_position(move |code| self.error(code))
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::fix_position::{closure#0}
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::fix_position::{closure#0}
369
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::fix_position
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::fix_position
370
371
0
    fn parse_ident(&mut self, ident: &[u8]) -> Result<()> {
372
0
        for expected in ident {
373
0
            match tri!(self.next_char()) {
374
                None => {
375
0
                    return Err(self.error(ErrorCode::EofWhileParsingValue));
376
                }
377
0
                Some(next) => {
378
0
                    if next != *expected {
379
0
                        return Err(self.error(ErrorCode::ExpectedSomeIdent));
380
0
                    }
381
                }
382
            }
383
        }
384
385
0
        Ok(())
386
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::parse_ident
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::parse_ident
387
388
0
    fn parse_integer(&mut self, positive: bool) -> Result<ParserNumber> {
389
0
        let next = match tri!(self.next_char()) {
390
0
            Some(b) => b,
391
            None => {
392
0
                return Err(self.error(ErrorCode::EofWhileParsingValue));
393
            }
394
        };
395
396
0
        match next {
397
            b'0' => {
398
                // There can be only one leading '0'.
399
0
                match tri!(self.peek_or_null()) {
400
0
                    b'0'..=b'9' => Err(self.peek_error(ErrorCode::InvalidNumber)),
401
0
                    _ => self.parse_number(positive, 0),
402
                }
403
            }
404
0
            c @ b'1'..=b'9' => {
405
0
                let mut significand = (c - b'0') as u64;
406
407
                loop {
408
0
                    match tri!(self.peek_or_null()) {
409
0
                        c @ b'0'..=b'9' => {
410
0
                            let digit = (c - b'0') as u64;
411
412
                            // We need to be careful with overflow. If we can,
413
                            // try to keep the number as a `u64` until we grow
414
                            // too large. At that point, switch to parsing the
415
                            // value as a `f64`.
416
0
                            if overflow!(significand * 10 + digit, u64::max_value()) {
417
0
                                return Ok(ParserNumber::F64(tri!(
418
0
                                    self.parse_long_integer(positive, significand),
419
                                )));
420
0
                            }
421
422
0
                            self.eat_char();
423
0
                            significand = significand * 10 + digit;
424
                        }
425
                        _ => {
426
0
                            return self.parse_number(positive, significand);
427
                        }
428
                    }
429
                }
430
            }
431
0
            _ => Err(self.error(ErrorCode::InvalidNumber)),
432
        }
433
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::parse_integer
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::parse_integer
434
435
0
    fn parse_number(&mut self, positive: bool, significand: u64) -> Result<ParserNumber> {
436
0
        Ok(match tri!(self.peek_or_null()) {
437
0
            b'.' => ParserNumber::F64(tri!(self.parse_decimal(positive, significand, 0))),
438
0
            b'e' | b'E' => ParserNumber::F64(tri!(self.parse_exponent(positive, significand, 0))),
439
            _ => {
440
0
                if positive {
441
0
                    ParserNumber::U64(significand)
442
                } else {
443
0
                    let neg = (significand as i64).wrapping_neg();
444
445
                    // Convert into a float if we underflow, or on `-0`.
446
0
                    if neg >= 0 {
447
0
                        ParserNumber::F64(-(significand as f64))
448
                    } else {
449
0
                        ParserNumber::I64(neg)
450
                    }
451
                }
452
            }
453
        })
454
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::parse_number
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::parse_number
455
456
0
    fn parse_decimal(
457
0
        &mut self,
458
0
        positive: bool,
459
0
        mut significand: u64,
460
0
        mut exponent: i32,
461
0
    ) -> Result<f64> {
462
0
        self.eat_char();
463
464
0
        while let c @ b'0'..=b'9' = tri!(self.peek_or_null()) {
465
0
            let digit = (c - b'0') as u64;
466
467
0
            if overflow!(significand * 10 + digit, u64::max_value()) {
468
0
                return self.parse_decimal_overflow(positive, significand, exponent);
469
0
            }
470
471
0
            self.eat_char();
472
0
            significand = significand * 10 + digit;
473
0
            exponent -= 1;
474
        }
475
476
        // Error if there is not at least one digit after the decimal point.
477
0
        if exponent == 0 {
478
0
            match tri!(self.peek()) {
479
0
                Some(_) => return Err(self.peek_error(ErrorCode::InvalidNumber)),
480
0
                None => return Err(self.peek_error(ErrorCode::EofWhileParsingValue)),
481
            }
482
0
        }
483
484
0
        match tri!(self.peek_or_null()) {
485
0
            b'e' | b'E' => self.parse_exponent(positive, significand, exponent),
486
0
            _ => self.f64_from_parts(positive, significand, exponent),
487
        }
488
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::parse_decimal
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::parse_decimal
489
490
0
    fn parse_exponent(
491
0
        &mut self,
492
0
        positive: bool,
493
0
        significand: u64,
494
0
        starting_exp: i32,
495
0
    ) -> Result<f64> {
496
0
        self.eat_char();
497
498
0
        let positive_exp = match tri!(self.peek_or_null()) {
499
            b'+' => {
500
0
                self.eat_char();
501
0
                true
502
            }
503
            b'-' => {
504
0
                self.eat_char();
505
0
                false
506
            }
507
0
            _ => true,
508
        };
509
510
0
        let next = match tri!(self.next_char()) {
511
0
            Some(b) => b,
512
            None => {
513
0
                return Err(self.error(ErrorCode::EofWhileParsingValue));
514
            }
515
        };
516
517
        // Make sure a digit follows the exponent place.
518
0
        let mut exp = match next {
519
0
            c @ b'0'..=b'9' => (c - b'0') as i32,
520
            _ => {
521
0
                return Err(self.error(ErrorCode::InvalidNumber));
522
            }
523
        };
524
525
0
        while let c @ b'0'..=b'9' = tri!(self.peek_or_null()) {
526
0
            self.eat_char();
527
0
            let digit = (c - b'0') as i32;
528
529
0
            if overflow!(exp * 10 + digit, i32::max_value()) {
530
0
                let zero_significand = significand == 0;
531
0
                return self.parse_exponent_overflow(positive, zero_significand, positive_exp);
532
0
            }
533
534
0
            exp = exp * 10 + digit;
535
        }
536
537
0
        let final_exp = if positive_exp {
538
0
            starting_exp.saturating_add(exp)
539
        } else {
540
0
            starting_exp.saturating_sub(exp)
541
        };
542
543
0
        self.f64_from_parts(positive, significand, final_exp)
544
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::parse_exponent
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::parse_exponent
545
546
    #[cfg(feature = "float_roundtrip")]
547
    fn f64_from_parts(&mut self, positive: bool, significand: u64, exponent: i32) -> Result<f64> {
548
        let f = if self.single_precision {
549
            lexical::parse_concise_float::<f32>(significand, exponent) as f64
550
        } else {
551
            lexical::parse_concise_float::<f64>(significand, exponent)
552
        };
553
554
        if f.is_infinite() {
555
            Err(self.error(ErrorCode::NumberOutOfRange))
556
        } else {
557
            Ok(if positive { f } else { -f })
558
        }
559
    }
560
561
    #[cfg(not(feature = "float_roundtrip"))]
562
0
    fn f64_from_parts(
563
0
        &mut self,
564
0
        positive: bool,
565
0
        significand: u64,
566
0
        mut exponent: i32,
567
0
    ) -> Result<f64> {
568
0
        let mut f = significand as f64;
569
        loop {
570
0
            match POW10.get(exponent.wrapping_abs() as usize) {
571
0
                Some(&pow) => {
572
0
                    if exponent >= 0 {
573
0
                        f *= pow;
574
0
                        if f.is_infinite() {
575
0
                            return Err(self.error(ErrorCode::NumberOutOfRange));
576
0
                        }
577
0
                    } else {
578
0
                        f /= pow;
579
0
                    }
580
0
                    break;
581
                }
582
                None => {
583
0
                    if f == 0.0 {
584
0
                        break;
585
0
                    }
586
0
                    if exponent >= 0 {
587
0
                        return Err(self.error(ErrorCode::NumberOutOfRange));
588
0
                    }
589
0
                    f /= 1e308;
590
0
                    exponent += 308;
591
                }
592
            }
593
        }
594
0
        Ok(if positive { f } else { -f })
595
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::f64_from_parts
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::f64_from_parts
596
597
    #[cfg(feature = "float_roundtrip")]
598
    #[cold]
599
    #[inline(never)]
600
    fn parse_long_integer(&mut self, positive: bool, partial_significand: u64) -> Result<f64> {
601
        // To deserialize floats we'll first push the integer and fraction
602
        // parts, both as byte strings, into the scratch buffer and then feed
603
        // both slices to lexical's parser. For example if the input is
604
        // `12.34e5` we'll push b"1234" into scratch and then pass b"12" and
605
        // b"34" to lexical. `integer_end` will be used to track where to split
606
        // the scratch buffer.
607
        //
608
        // Note that lexical expects the integer part to contain *no* leading
609
        // zeroes and the fraction part to contain *no* trailing zeroes. The
610
        // first requirement is already handled by the integer parsing logic.
611
        // The second requirement will be enforced just before passing the
612
        // slices to lexical in f64_long_from_parts.
613
        self.scratch.clear();
614
        self.scratch
615
            .extend_from_slice(itoa::Buffer::new().format(partial_significand).as_bytes());
616
617
        loop {
618
            match tri!(self.peek_or_null()) {
619
                c @ b'0'..=b'9' => {
620
                    self.scratch.push(c);
621
                    self.eat_char();
622
                }
623
                b'.' => {
624
                    self.eat_char();
625
                    return self.parse_long_decimal(positive, self.scratch.len());
626
                }
627
                b'e' | b'E' => {
628
                    return self.parse_long_exponent(positive, self.scratch.len());
629
                }
630
                _ => {
631
                    return self.f64_long_from_parts(positive, self.scratch.len(), 0);
632
                }
633
            }
634
        }
635
    }
636
637
    #[cfg(not(feature = "float_roundtrip"))]
638
    #[cold]
639
    #[inline(never)]
640
0
    fn parse_long_integer(&mut self, positive: bool, significand: u64) -> Result<f64> {
641
0
        let mut exponent = 0;
642
        loop {
643
0
            match tri!(self.peek_or_null()) {
644
0
                b'0'..=b'9' => {
645
0
                    self.eat_char();
646
0
                    // This could overflow... if your integer is gigabytes long.
647
0
                    // Ignore that possibility.
648
0
                    exponent += 1;
649
0
                }
650
                b'.' => {
651
0
                    return self.parse_decimal(positive, significand, exponent);
652
                }
653
                b'e' | b'E' => {
654
0
                    return self.parse_exponent(positive, significand, exponent);
655
                }
656
                _ => {
657
0
                    return self.f64_from_parts(positive, significand, exponent);
658
                }
659
            }
660
        }
661
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::parse_long_integer
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::parse_long_integer
662
663
    #[cfg(feature = "float_roundtrip")]
664
    #[cold]
665
    fn parse_long_decimal(&mut self, positive: bool, integer_end: usize) -> Result<f64> {
666
        let mut at_least_one_digit = integer_end < self.scratch.len();
667
        while let c @ b'0'..=b'9' = tri!(self.peek_or_null()) {
668
            self.scratch.push(c);
669
            self.eat_char();
670
            at_least_one_digit = true;
671
        }
672
673
        if !at_least_one_digit {
674
            match tri!(self.peek()) {
675
                Some(_) => return Err(self.peek_error(ErrorCode::InvalidNumber)),
676
                None => return Err(self.peek_error(ErrorCode::EofWhileParsingValue)),
677
            }
678
        }
679
680
        match tri!(self.peek_or_null()) {
681
            b'e' | b'E' => self.parse_long_exponent(positive, integer_end),
682
            _ => self.f64_long_from_parts(positive, integer_end, 0),
683
        }
684
    }
685
686
    #[cfg(feature = "float_roundtrip")]
687
    fn parse_long_exponent(&mut self, positive: bool, integer_end: usize) -> Result<f64> {
688
        self.eat_char();
689
690
        let positive_exp = match tri!(self.peek_or_null()) {
691
            b'+' => {
692
                self.eat_char();
693
                true
694
            }
695
            b'-' => {
696
                self.eat_char();
697
                false
698
            }
699
            _ => true,
700
        };
701
702
        let next = match tri!(self.next_char()) {
703
            Some(b) => b,
704
            None => {
705
                return Err(self.error(ErrorCode::EofWhileParsingValue));
706
            }
707
        };
708
709
        // Make sure a digit follows the exponent place.
710
        let mut exp = match next {
711
            c @ b'0'..=b'9' => (c - b'0') as i32,
712
            _ => {
713
                return Err(self.error(ErrorCode::InvalidNumber));
714
            }
715
        };
716
717
        while let c @ b'0'..=b'9' = tri!(self.peek_or_null()) {
718
            self.eat_char();
719
            let digit = (c - b'0') as i32;
720
721
            if overflow!(exp * 10 + digit, i32::max_value()) {
722
                let zero_significand = self.scratch.iter().all(|&digit| digit == b'0');
723
                return self.parse_exponent_overflow(positive, zero_significand, positive_exp);
724
            }
725
726
            exp = exp * 10 + digit;
727
        }
728
729
        let final_exp = if positive_exp { exp } else { -exp };
730
731
        self.f64_long_from_parts(positive, integer_end, final_exp)
732
    }
733
734
    // This cold code should not be inlined into the middle of the hot
735
    // decimal-parsing loop above.
736
    #[cfg(feature = "float_roundtrip")]
737
    #[cold]
738
    #[inline(never)]
739
    fn parse_decimal_overflow(
740
        &mut self,
741
        positive: bool,
742
        significand: u64,
743
        exponent: i32,
744
    ) -> Result<f64> {
745
        let mut buffer = itoa::Buffer::new();
746
        let significand = buffer.format(significand);
747
        let fraction_digits = -exponent as usize;
748
        self.scratch.clear();
749
        if let Some(zeros) = fraction_digits.checked_sub(significand.len() + 1) {
750
            self.scratch.extend(iter::repeat(b'0').take(zeros + 1));
751
        }
752
        self.scratch.extend_from_slice(significand.as_bytes());
753
        let integer_end = self.scratch.len() - fraction_digits;
754
        self.parse_long_decimal(positive, integer_end)
755
    }
756
757
    #[cfg(not(feature = "float_roundtrip"))]
758
    #[cold]
759
    #[inline(never)]
760
0
    fn parse_decimal_overflow(
761
0
        &mut self,
762
0
        positive: bool,
763
0
        significand: u64,
764
0
        exponent: i32,
765
0
    ) -> Result<f64> {
766
        // The next multiply/add would overflow, so just ignore all further
767
        // digits.
768
0
        while let b'0'..=b'9' = tri!(self.peek_or_null()) {
769
0
            self.eat_char();
770
0
        }
771
772
0
        match tri!(self.peek_or_null()) {
773
0
            b'e' | b'E' => self.parse_exponent(positive, significand, exponent),
774
0
            _ => self.f64_from_parts(positive, significand, exponent),
775
        }
776
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::parse_decimal_overflow
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::parse_decimal_overflow
777
778
    // This cold code should not be inlined into the middle of the hot
779
    // exponent-parsing loop above.
780
    #[cold]
781
    #[inline(never)]
782
0
    fn parse_exponent_overflow(
783
0
        &mut self,
784
0
        positive: bool,
785
0
        zero_significand: bool,
786
0
        positive_exp: bool,
787
0
    ) -> Result<f64> {
788
        // Error instead of +/- infinity.
789
0
        if !zero_significand && positive_exp {
790
0
            return Err(self.error(ErrorCode::NumberOutOfRange));
791
0
        }
792
793
0
        while let b'0'..=b'9' = tri!(self.peek_or_null()) {
794
0
            self.eat_char();
795
0
        }
796
0
        Ok(if positive { 0.0 } else { -0.0 })
797
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::parse_exponent_overflow
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::parse_exponent_overflow
798
799
    #[cfg(feature = "float_roundtrip")]
800
    fn f64_long_from_parts(
801
        &mut self,
802
        positive: bool,
803
        integer_end: usize,
804
        exponent: i32,
805
    ) -> Result<f64> {
806
        let integer = &self.scratch[..integer_end];
807
        let fraction = &self.scratch[integer_end..];
808
809
        let f = if self.single_precision {
810
            lexical::parse_truncated_float::<f32>(integer, fraction, exponent) as f64
811
        } else {
812
            lexical::parse_truncated_float::<f64>(integer, fraction, exponent)
813
        };
814
815
        if f.is_infinite() {
816
            Err(self.error(ErrorCode::NumberOutOfRange))
817
        } else {
818
            Ok(if positive { f } else { -f })
819
        }
820
    }
821
822
0
    fn parse_any_signed_number(&mut self) -> Result<ParserNumber> {
823
0
        let peek = match tri!(self.peek()) {
824
0
            Some(b) => b,
825
            None => {
826
0
                return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
827
            }
828
        };
829
830
0
        let value = match peek {
831
            b'-' => {
832
0
                self.eat_char();
833
0
                self.parse_any_number(false)
834
            }
835
0
            b'0'..=b'9' => self.parse_any_number(true),
836
0
            _ => Err(self.peek_error(ErrorCode::InvalidNumber)),
837
        };
838
839
0
        let value = match tri!(self.peek()) {
840
0
            Some(_) => Err(self.peek_error(ErrorCode::InvalidNumber)),
841
0
            None => value,
842
        };
843
844
0
        match value {
845
0
            Ok(value) => Ok(value),
846
            // The de::Error impl creates errors with unknown line and column.
847
            // Fill in the position here by looking at the current index in the
848
            // input. There is no way to tell whether this should call `error`
849
            // or `peek_error` so pick the one that seems correct more often.
850
            // Worst case, the position is off by one character.
851
0
            Err(err) => Err(self.fix_position(err)),
852
        }
853
0
    }
854
855
    #[cfg(not(feature = "arbitrary_precision"))]
856
0
    fn parse_any_number(&mut self, positive: bool) -> Result<ParserNumber> {
857
0
        self.parse_integer(positive)
858
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::parse_any_number
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::parse_any_number
859
860
    #[cfg(feature = "arbitrary_precision")]
861
    fn parse_any_number(&mut self, positive: bool) -> Result<ParserNumber> {
862
        let mut buf = String::with_capacity(16);
863
        if !positive {
864
            buf.push('-');
865
        }
866
        self.scan_integer(&mut buf)?;
867
        if positive {
868
            if let Ok(unsigned) = buf.parse() {
869
                return Ok(ParserNumber::U64(unsigned));
870
            }
871
        } else {
872
            if let Ok(signed) = buf.parse() {
873
                return Ok(ParserNumber::I64(signed));
874
            }
875
        }
876
        Ok(ParserNumber::String(buf))
877
    }
878
879
    #[cfg(feature = "arbitrary_precision")]
880
    fn scan_or_eof(&mut self, buf: &mut String) -> Result<u8> {
881
        match tri!(self.next_char()) {
882
            Some(b) => {
883
                buf.push(b as char);
884
                Ok(b)
885
            }
886
            None => Err(self.error(ErrorCode::EofWhileParsingValue)),
887
        }
888
    }
889
890
    #[cfg(feature = "arbitrary_precision")]
891
    fn scan_integer(&mut self, buf: &mut String) -> Result<()> {
892
        match tri!(self.scan_or_eof(buf)) {
893
            b'0' => {
894
                // There can be only one leading '0'.
895
                match tri!(self.peek_or_null()) {
896
                    b'0'..=b'9' => Err(self.peek_error(ErrorCode::InvalidNumber)),
897
                    _ => self.scan_number(buf),
898
                }
899
            }
900
            b'1'..=b'9' => loop {
901
                match tri!(self.peek_or_null()) {
902
                    c @ b'0'..=b'9' => {
903
                        self.eat_char();
904
                        buf.push(c as char);
905
                    }
906
                    _ => {
907
                        return self.scan_number(buf);
908
                    }
909
                }
910
            },
911
            _ => Err(self.error(ErrorCode::InvalidNumber)),
912
        }
913
    }
914
915
    #[cfg(feature = "arbitrary_precision")]
916
    fn scan_number(&mut self, buf: &mut String) -> Result<()> {
917
        match tri!(self.peek_or_null()) {
918
            b'.' => self.scan_decimal(buf),
919
            e @ b'e' | e @ b'E' => self.scan_exponent(e as char, buf),
920
            _ => Ok(()),
921
        }
922
    }
923
924
    #[cfg(feature = "arbitrary_precision")]
925
    fn scan_decimal(&mut self, buf: &mut String) -> Result<()> {
926
        self.eat_char();
927
        buf.push('.');
928
929
        let mut at_least_one_digit = false;
930
        while let c @ b'0'..=b'9' = tri!(self.peek_or_null()) {
931
            self.eat_char();
932
            buf.push(c as char);
933
            at_least_one_digit = true;
934
        }
935
936
        if !at_least_one_digit {
937
            match tri!(self.peek()) {
938
                Some(_) => return Err(self.peek_error(ErrorCode::InvalidNumber)),
939
                None => return Err(self.peek_error(ErrorCode::EofWhileParsingValue)),
940
            }
941
        }
942
943
        match tri!(self.peek_or_null()) {
944
            e @ b'e' | e @ b'E' => self.scan_exponent(e as char, buf),
945
            _ => Ok(()),
946
        }
947
    }
948
949
    #[cfg(feature = "arbitrary_precision")]
950
    fn scan_exponent(&mut self, e: char, buf: &mut String) -> Result<()> {
951
        self.eat_char();
952
        buf.push(e);
953
954
        match tri!(self.peek_or_null()) {
955
            b'+' => {
956
                self.eat_char();
957
                buf.push('+');
958
            }
959
            b'-' => {
960
                self.eat_char();
961
                buf.push('-');
962
            }
963
            _ => {}
964
        }
965
966
        // Make sure a digit follows the exponent place.
967
        match tri!(self.scan_or_eof(buf)) {
968
            b'0'..=b'9' => {}
969
            _ => {
970
                return Err(self.error(ErrorCode::InvalidNumber));
971
            }
972
        }
973
974
        while let c @ b'0'..=b'9' = tri!(self.peek_or_null()) {
975
            self.eat_char();
976
            buf.push(c as char);
977
        }
978
979
        Ok(())
980
    }
981
982
0
    fn parse_object_colon(&mut self) -> Result<()> {
983
0
        match tri!(self.parse_whitespace()) {
984
            Some(b':') => {
985
0
                self.eat_char();
986
0
                Ok(())
987
            }
988
0
            Some(_) => Err(self.peek_error(ErrorCode::ExpectedColon)),
989
0
            None => Err(self.peek_error(ErrorCode::EofWhileParsingObject)),
990
        }
991
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::parse_object_colon
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::parse_object_colon
992
993
0
    fn end_seq(&mut self) -> Result<()> {
994
0
        match tri!(self.parse_whitespace()) {
995
            Some(b']') => {
996
0
                self.eat_char();
997
0
                Ok(())
998
            }
999
            Some(b',') => {
1000
0
                self.eat_char();
1001
0
                match self.parse_whitespace() {
1002
0
                    Ok(Some(b']')) => Err(self.peek_error(ErrorCode::TrailingComma)),
1003
0
                    _ => Err(self.peek_error(ErrorCode::TrailingCharacters)),
1004
                }
1005
            }
1006
0
            Some(_) => Err(self.peek_error(ErrorCode::TrailingCharacters)),
1007
0
            None => Err(self.peek_error(ErrorCode::EofWhileParsingList)),
1008
        }
1009
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::end_seq
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::end_seq
1010
1011
0
    fn end_map(&mut self) -> Result<()> {
1012
0
        match tri!(self.parse_whitespace()) {
1013
            Some(b'}') => {
1014
0
                self.eat_char();
1015
0
                Ok(())
1016
            }
1017
0
            Some(b',') => Err(self.peek_error(ErrorCode::TrailingComma)),
1018
0
            Some(_) => Err(self.peek_error(ErrorCode::TrailingCharacters)),
1019
0
            None => Err(self.peek_error(ErrorCode::EofWhileParsingObject)),
1020
        }
1021
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::end_map
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::end_map
1022
1023
0
    fn ignore_value(&mut self) -> Result<()> {
1024
0
        self.scratch.clear();
1025
0
        let mut enclosing = None;
1026
1027
        loop {
1028
0
            let peek = match tri!(self.parse_whitespace()) {
1029
0
                Some(b) => b,
1030
                None => {
1031
0
                    return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
1032
                }
1033
            };
1034
1035
0
            let frame = match peek {
1036
                b'n' => {
1037
0
                    self.eat_char();
1038
0
                    tri!(self.parse_ident(b"ull"));
1039
0
                    None
1040
                }
1041
                b't' => {
1042
0
                    self.eat_char();
1043
0
                    tri!(self.parse_ident(b"rue"));
1044
0
                    None
1045
                }
1046
                b'f' => {
1047
0
                    self.eat_char();
1048
0
                    tri!(self.parse_ident(b"alse"));
1049
0
                    None
1050
                }
1051
                b'-' => {
1052
0
                    self.eat_char();
1053
0
                    tri!(self.ignore_integer());
1054
0
                    None
1055
                }
1056
0
                b'0'..=b'9' => {
1057
0
                    tri!(self.ignore_integer());
1058
0
                    None
1059
                }
1060
                b'"' => {
1061
0
                    self.eat_char();
1062
0
                    tri!(self.read.ignore_str());
1063
0
                    None
1064
                }
1065
0
                frame @ b'[' | frame @ b'{' => {
1066
0
                    self.scratch.extend(enclosing.take());
1067
0
                    self.eat_char();
1068
0
                    Some(frame)
1069
                }
1070
0
                _ => return Err(self.peek_error(ErrorCode::ExpectedSomeValue)),
1071
            };
1072
1073
0
            let (mut accept_comma, mut frame) = match frame {
1074
0
                Some(frame) => (false, frame),
1075
0
                None => match enclosing.take() {
1076
0
                    Some(frame) => (true, frame),
1077
0
                    None => match self.scratch.pop() {
1078
0
                        Some(frame) => (true, frame),
1079
0
                        None => return Ok(()),
1080
                    },
1081
                },
1082
            };
1083
1084
            loop {
1085
0
                match tri!(self.parse_whitespace()) {
1086
0
                    Some(b',') if accept_comma => {
1087
0
                        self.eat_char();
1088
0
                        break;
1089
                    }
1090
0
                    Some(b']') if frame == b'[' => {}
1091
0
                    Some(b'}') if frame == b'{' => {}
1092
                    Some(_) => {
1093
0
                        if accept_comma {
1094
0
                            return Err(self.peek_error(match frame {
1095
0
                                b'[' => ErrorCode::ExpectedListCommaOrEnd,
1096
0
                                b'{' => ErrorCode::ExpectedObjectCommaOrEnd,
1097
0
                                _ => unreachable!(),
1098
                            }));
1099
                        } else {
1100
0
                            break;
1101
                        }
1102
                    }
1103
                    None => {
1104
0
                        return Err(self.peek_error(match frame {
1105
0
                            b'[' => ErrorCode::EofWhileParsingList,
1106
0
                            b'{' => ErrorCode::EofWhileParsingObject,
1107
0
                            _ => unreachable!(),
1108
                        }));
1109
                    }
1110
                }
1111
1112
0
                self.eat_char();
1113
0
                frame = match self.scratch.pop() {
1114
0
                    Some(frame) => frame,
1115
0
                    None => return Ok(()),
1116
                };
1117
0
                accept_comma = true;
1118
            }
1119
1120
0
            if frame == b'{' {
1121
0
                match tri!(self.parse_whitespace()) {
1122
0
                    Some(b'"') => self.eat_char(),
1123
0
                    Some(_) => return Err(self.peek_error(ErrorCode::KeyMustBeAString)),
1124
0
                    None => return Err(self.peek_error(ErrorCode::EofWhileParsingObject)),
1125
                }
1126
0
                tri!(self.read.ignore_str());
1127
0
                match tri!(self.parse_whitespace()) {
1128
0
                    Some(b':') => self.eat_char(),
1129
0
                    Some(_) => return Err(self.peek_error(ErrorCode::ExpectedColon)),
1130
0
                    None => return Err(self.peek_error(ErrorCode::EofWhileParsingObject)),
1131
                }
1132
0
            }
1133
1134
0
            enclosing = Some(frame);
1135
        }
1136
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<_>>::ignore_value
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::ignore_value
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::ignore_value
1137
1138
0
    fn ignore_integer(&mut self) -> Result<()> {
1139
0
        match tri!(self.next_char_or_null()) {
1140
            b'0' => {
1141
                // There can be only one leading '0'.
1142
0
                if let b'0'..=b'9' = tri!(self.peek_or_null()) {
1143
0
                    return Err(self.peek_error(ErrorCode::InvalidNumber));
1144
0
                }
1145
            }
1146
0
            b'1'..=b'9' => {
1147
0
                while let b'0'..=b'9' = tri!(self.peek_or_null()) {
1148
0
                    self.eat_char();
1149
0
                }
1150
            }
1151
            _ => {
1152
0
                return Err(self.error(ErrorCode::InvalidNumber));
1153
            }
1154
        }
1155
1156
0
        match tri!(self.peek_or_null()) {
1157
0
            b'.' => self.ignore_decimal(),
1158
0
            b'e' | b'E' => self.ignore_exponent(),
1159
0
            _ => Ok(()),
1160
        }
1161
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<_>>::ignore_integer
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::ignore_integer
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::ignore_integer
1162
1163
0
    fn ignore_decimal(&mut self) -> Result<()> {
1164
0
        self.eat_char();
1165
1166
0
        let mut at_least_one_digit = false;
1167
0
        while let b'0'..=b'9' = tri!(self.peek_or_null()) {
1168
0
            self.eat_char();
1169
0
            at_least_one_digit = true;
1170
0
        }
1171
1172
0
        if !at_least_one_digit {
1173
0
            return Err(self.peek_error(ErrorCode::InvalidNumber));
1174
0
        }
1175
1176
0
        match tri!(self.peek_or_null()) {
1177
0
            b'e' | b'E' => self.ignore_exponent(),
1178
0
            _ => Ok(()),
1179
        }
1180
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<_>>::ignore_decimal
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::ignore_decimal
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::ignore_decimal
1181
1182
0
    fn ignore_exponent(&mut self) -> Result<()> {
1183
0
        self.eat_char();
1184
1185
0
        match tri!(self.peek_or_null()) {
1186
0
            b'+' | b'-' => self.eat_char(),
1187
0
            _ => {}
1188
        }
1189
1190
        // Make sure a digit follows the exponent place.
1191
0
        match tri!(self.next_char_or_null()) {
1192
0
            b'0'..=b'9' => {}
1193
            _ => {
1194
0
                return Err(self.error(ErrorCode::InvalidNumber));
1195
            }
1196
        }
1197
1198
0
        while let b'0'..=b'9' = tri!(self.peek_or_null()) {
1199
0
            self.eat_char();
1200
0
        }
1201
1202
0
        Ok(())
1203
0
    }
Unexecuted instantiation: <serde_json::de::Deserializer<_>>::ignore_exponent
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::StrRead>>::ignore_exponent
Unexecuted instantiation: <serde_json::de::Deserializer<serde_json::read::SliceRead>>::ignore_exponent
1204
1205
    #[cfg(feature = "raw_value")]
1206
    fn deserialize_raw_value<V>(&mut self, visitor: V) -> Result<V::Value>
1207
    where
1208
        V: de::Visitor<'de>,
1209
    {
1210
        self.parse_whitespace()?;
1211
        self.read.begin_raw_buffering();
1212
        self.ignore_value()?;
1213
        self.read.end_raw_buffering(visitor)
1214
    }
1215
}
1216
1217
impl FromStr for Number {
1218
    type Err = Error;
1219
1220
0
    fn from_str(s: &str) -> result::Result<Self, Self::Err> {
1221
0
        Deserializer::from_str(s)
1222
0
            .parse_any_signed_number()
1223
0
            .map(Into::into)
1224
0
    }
1225
}
1226
1227
#[cfg(not(feature = "float_roundtrip"))]
1228
static POW10: [f64; 309] = [
1229
    1e000, 1e001, 1e002, 1e003, 1e004, 1e005, 1e006, 1e007, 1e008, 1e009, //
1230
    1e010, 1e011, 1e012, 1e013, 1e014, 1e015, 1e016, 1e017, 1e018, 1e019, //
1231
    1e020, 1e021, 1e022, 1e023, 1e024, 1e025, 1e026, 1e027, 1e028, 1e029, //
1232
    1e030, 1e031, 1e032, 1e033, 1e034, 1e035, 1e036, 1e037, 1e038, 1e039, //
1233
    1e040, 1e041, 1e042, 1e043, 1e044, 1e045, 1e046, 1e047, 1e048, 1e049, //
1234
    1e050, 1e051, 1e052, 1e053, 1e054, 1e055, 1e056, 1e057, 1e058, 1e059, //
1235
    1e060, 1e061, 1e062, 1e063, 1e064, 1e065, 1e066, 1e067, 1e068, 1e069, //
1236
    1e070, 1e071, 1e072, 1e073, 1e074, 1e075, 1e076, 1e077, 1e078, 1e079, //
1237
    1e080, 1e081, 1e082, 1e083, 1e084, 1e085, 1e086, 1e087, 1e088, 1e089, //
1238
    1e090, 1e091, 1e092, 1e093, 1e094, 1e095, 1e096, 1e097, 1e098, 1e099, //
1239
    1e100, 1e101, 1e102, 1e103, 1e104, 1e105, 1e106, 1e107, 1e108, 1e109, //
1240
    1e110, 1e111, 1e112, 1e113, 1e114, 1e115, 1e116, 1e117, 1e118, 1e119, //
1241
    1e120, 1e121, 1e122, 1e123, 1e124, 1e125, 1e126, 1e127, 1e128, 1e129, //
1242
    1e130, 1e131, 1e132, 1e133, 1e134, 1e135, 1e136, 1e137, 1e138, 1e139, //
1243
    1e140, 1e141, 1e142, 1e143, 1e144, 1e145, 1e146, 1e147, 1e148, 1e149, //
1244
    1e150, 1e151, 1e152, 1e153, 1e154, 1e155, 1e156, 1e157, 1e158, 1e159, //
1245
    1e160, 1e161, 1e162, 1e163, 1e164, 1e165, 1e166, 1e167, 1e168, 1e169, //
1246
    1e170, 1e171, 1e172, 1e173, 1e174, 1e175, 1e176, 1e177, 1e178, 1e179, //
1247
    1e180, 1e181, 1e182, 1e183, 1e184, 1e185, 1e186, 1e187, 1e188, 1e189, //
1248
    1e190, 1e191, 1e192, 1e193, 1e194, 1e195, 1e196, 1e197, 1e198, 1e199, //
1249
    1e200, 1e201, 1e202, 1e203, 1e204, 1e205, 1e206, 1e207, 1e208, 1e209, //
1250
    1e210, 1e211, 1e212, 1e213, 1e214, 1e215, 1e216, 1e217, 1e218, 1e219, //
1251
    1e220, 1e221, 1e222, 1e223, 1e224, 1e225, 1e226, 1e227, 1e228, 1e229, //
1252
    1e230, 1e231, 1e232, 1e233, 1e234, 1e235, 1e236, 1e237, 1e238, 1e239, //
1253
    1e240, 1e241, 1e242, 1e243, 1e244, 1e245, 1e246, 1e247, 1e248, 1e249, //
1254
    1e250, 1e251, 1e252, 1e253, 1e254, 1e255, 1e256, 1e257, 1e258, 1e259, //
1255
    1e260, 1e261, 1e262, 1e263, 1e264, 1e265, 1e266, 1e267, 1e268, 1e269, //
1256
    1e270, 1e271, 1e272, 1e273, 1e274, 1e275, 1e276, 1e277, 1e278, 1e279, //
1257
    1e280, 1e281, 1e282, 1e283, 1e284, 1e285, 1e286, 1e287, 1e288, 1e289, //
1258
    1e290, 1e291, 1e292, 1e293, 1e294, 1e295, 1e296, 1e297, 1e298, 1e299, //
1259
    1e300, 1e301, 1e302, 1e303, 1e304, 1e305, 1e306, 1e307, 1e308,
1260
];
1261
1262
macro_rules! deserialize_number {
1263
    ($method:ident) => {
1264
0
        fn $method<V>(self, visitor: V) -> Result<V::Value>
1265
0
        where
1266
0
            V: de::Visitor<'de>,
1267
        {
1268
0
            self.deserialize_number(visitor)
1269
0
        }
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_i8::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_u8::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_f32::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_f64::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_i16::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_i32::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_i64::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_u16::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_u32::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_u64::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_u16::<<u16 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_u32::<<u32 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_u8::<<u8 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_i32::<<i32 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_u16::<<u16 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_u32::<base::descriptor_reflection::deserialize_descriptor::DescriptorVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_u32::<<u32 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_u64::<<u64 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_u64::<<usize as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
1270
    };
1271
}
1272
1273
#[cfg(not(feature = "unbounded_depth"))]
1274
macro_rules! if_checking_recursion_limit {
1275
    ($($body:tt)*) => {
1276
        $($body)*
1277
    };
1278
}
1279
1280
#[cfg(feature = "unbounded_depth")]
1281
macro_rules! if_checking_recursion_limit {
1282
    ($this:ident $($body:tt)*) => {
1283
        if !$this.disable_recursion_limit {
1284
            $this $($body)*
1285
        }
1286
    };
1287
}
1288
1289
macro_rules! check_recursion {
1290
    ($this:ident $($body:tt)*) => {
1291
        if_checking_recursion_limit! {
1292
            $this.remaining_depth -= 1;
1293
            if $this.remaining_depth == 0 {
1294
                return Err($this.peek_error(ErrorCode::RecursionLimitExceeded));
1295
            }
1296
        }
1297
1298
        $this $($body)*
1299
1300
        if_checking_recursion_limit! {
1301
            $this.remaining_depth += 1;
1302
        }
1303
    };
1304
}
1305
1306
impl<'de, 'a, R: Read<'de>> de::Deserializer<'de> for &'a mut Deserializer<R> {
1307
    type Error = Error;
1308
1309
    #[inline]
1310
0
    fn deserialize_any<V>(self, visitor: V) -> Result<V::Value>
1311
0
    where
1312
0
        V: de::Visitor<'de>,
1313
    {
1314
0
        let peek = match tri!(self.parse_whitespace()) {
1315
0
            Some(b) => b,
1316
            None => {
1317
0
                return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
1318
            }
1319
        };
1320
1321
0
        let value = match peek {
1322
            b'n' => {
1323
0
                self.eat_char();
1324
0
                tri!(self.parse_ident(b"ull"));
1325
0
                visitor.visit_unit()
1326
            }
1327
            b't' => {
1328
0
                self.eat_char();
1329
0
                tri!(self.parse_ident(b"rue"));
1330
0
                visitor.visit_bool(true)
1331
            }
1332
            b'f' => {
1333
0
                self.eat_char();
1334
0
                tri!(self.parse_ident(b"alse"));
1335
0
                visitor.visit_bool(false)
1336
            }
1337
            b'-' => {
1338
0
                self.eat_char();
1339
0
                tri!(self.parse_any_number(false)).visit(visitor)
1340
            }
1341
0
            b'0'..=b'9' => tri!(self.parse_any_number(true)).visit(visitor),
1342
            b'"' => {
1343
0
                self.eat_char();
1344
0
                self.scratch.clear();
1345
0
                match tri!(self.read.parse_str(&mut self.scratch)) {
1346
0
                    Reference::Borrowed(s) => visitor.visit_borrowed_str(s),
1347
0
                    Reference::Copied(s) => visitor.visit_str(s),
1348
                }
1349
            }
1350
            b'[' => {
1351
0
                check_recursion! {
1352
                    self.eat_char();
1353
0
                    let ret = visitor.visit_seq(SeqAccess::new(self));
1354
                }
1355
1356
0
                match (ret, self.end_seq()) {
1357
0
                    (Ok(ret), Ok(())) => Ok(ret),
1358
0
                    (Err(err), _) | (_, Err(err)) => Err(err),
1359
                }
1360
            }
1361
            b'{' => {
1362
0
                check_recursion! {
1363
                    self.eat_char();
1364
0
                    let ret = visitor.visit_map(MapAccess::new(self));
1365
                }
1366
1367
0
                match (ret, self.end_map()) {
1368
0
                    (Ok(ret), Ok(())) => Ok(ret),
1369
0
                    (Err(err), _) | (_, Err(err)) => Err(err),
1370
                }
1371
            }
1372
0
            _ => Err(self.peek_error(ErrorCode::ExpectedSomeValue)),
1373
        };
1374
1375
0
        match value {
1376
0
            Ok(value) => Ok(value),
1377
            // The de::Error impl creates errors with unknown line and column.
1378
            // Fill in the position here by looking at the current index in the
1379
            // input. There is no way to tell whether this should call `error`
1380
            // or `peek_error` so pick the one that seems correct more often.
1381
            // Worst case, the position is off by one character.
1382
0
            Err(err) => Err(self.fix_position(err)),
1383
        }
1384
0
    }
1385
1386
0
    fn deserialize_bool<V>(self, visitor: V) -> Result<V::Value>
1387
0
    where
1388
0
        V: de::Visitor<'de>,
1389
    {
1390
0
        let peek = match tri!(self.parse_whitespace()) {
1391
0
            Some(b) => b,
1392
            None => {
1393
0
                return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
1394
            }
1395
        };
1396
1397
0
        let value = match peek {
1398
            b't' => {
1399
0
                self.eat_char();
1400
0
                tri!(self.parse_ident(b"rue"));
1401
0
                visitor.visit_bool(true)
1402
            }
1403
            b'f' => {
1404
0
                self.eat_char();
1405
0
                tri!(self.parse_ident(b"alse"));
1406
0
                visitor.visit_bool(false)
1407
            }
1408
0
            _ => Err(self.peek_invalid_type(&visitor)),
1409
        };
1410
1411
0
        match value {
1412
0
            Ok(value) => Ok(value),
1413
0
            Err(err) => Err(self.fix_position(err)),
1414
        }
1415
0
    }
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_bool::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_bool::<serde_core::de::impls::BoolVisitor>
1416
1417
    deserialize_number!(deserialize_i8);
1418
    deserialize_number!(deserialize_i16);
1419
    deserialize_number!(deserialize_i32);
1420
    deserialize_number!(deserialize_i64);
1421
    deserialize_number!(deserialize_u8);
1422
    deserialize_number!(deserialize_u16);
1423
    deserialize_number!(deserialize_u32);
1424
    deserialize_number!(deserialize_u64);
1425
    #[cfg(not(feature = "float_roundtrip"))]
1426
    deserialize_number!(deserialize_f32);
1427
    deserialize_number!(deserialize_f64);
1428
1429
    #[cfg(feature = "float_roundtrip")]
1430
    fn deserialize_f32<V>(self, visitor: V) -> Result<V::Value>
1431
    where
1432
        V: de::Visitor<'de>,
1433
    {
1434
        self.single_precision = true;
1435
        let val = self.deserialize_number(visitor);
1436
        self.single_precision = false;
1437
        val
1438
    }
1439
1440
    serde_if_integer128! {
1441
0
        fn deserialize_i128<V>(self, visitor: V) -> Result<V::Value>
1442
0
        where
1443
0
            V: de::Visitor<'de>,
1444
        {
1445
0
            let mut buf = String::new();
1446
1447
0
            match tri!(self.parse_whitespace()) {
1448
0
                Some(b'-') => {
1449
0
                    self.eat_char();
1450
0
                    buf.push('-');
1451
0
                }
1452
0
                Some(_) => {}
1453
                None => {
1454
0
                    return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
1455
                }
1456
            };
1457
1458
0
            tri!(self.scan_integer128(&mut buf));
1459
1460
0
            let value = match buf.parse() {
1461
0
                Ok(int) => visitor.visit_i128(int),
1462
                Err(_) => {
1463
0
                    return Err(self.error(ErrorCode::NumberOutOfRange));
1464
                }
1465
            };
1466
1467
0
            match value {
1468
0
                Ok(value) => Ok(value),
1469
0
                Err(err) => Err(self.fix_position(err)),
1470
            }
1471
0
        }
1472
1473
0
        fn deserialize_u128<V>(self, visitor: V) -> Result<V::Value>
1474
0
        where
1475
0
            V: de::Visitor<'de>,
1476
        {
1477
0
            match tri!(self.parse_whitespace()) {
1478
                Some(b'-') => {
1479
0
                    return Err(self.peek_error(ErrorCode::NumberOutOfRange));
1480
                }
1481
0
                Some(_) => {}
1482
                None => {
1483
0
                    return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
1484
                }
1485
            }
1486
1487
0
            let mut buf = String::new();
1488
0
            tri!(self.scan_integer128(&mut buf));
1489
1490
0
            let value = match buf.parse() {
1491
0
                Ok(int) => visitor.visit_u128(int),
1492
                Err(_) => {
1493
0
                    return Err(self.error(ErrorCode::NumberOutOfRange));
1494
                }
1495
            };
1496
1497
0
            match value {
1498
0
                Ok(value) => Ok(value),
1499
0
                Err(err) => Err(self.fix_position(err)),
1500
            }
1501
0
        }
1502
    }
1503
1504
0
    fn deserialize_char<V>(self, visitor: V) -> Result<V::Value>
1505
0
    where
1506
0
        V: de::Visitor<'de>,
1507
    {
1508
0
        self.deserialize_str(visitor)
1509
0
    }
1510
1511
0
    fn deserialize_str<V>(self, visitor: V) -> Result<V::Value>
1512
0
    where
1513
0
        V: de::Visitor<'de>,
1514
    {
1515
0
        let peek = match tri!(self.parse_whitespace()) {
1516
0
            Some(b) => b,
1517
            None => {
1518
0
                return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
1519
            }
1520
        };
1521
1522
0
        let value = match peek {
1523
            b'"' => {
1524
0
                self.eat_char();
1525
0
                self.scratch.clear();
1526
0
                match tri!(self.read.parse_str(&mut self.scratch)) {
1527
0
                    Reference::Borrowed(s) => visitor.visit_borrowed_str(s),
1528
0
                    Reference::Copied(s) => visitor.visit_str(s),
1529
                }
1530
            }
1531
0
            _ => Err(self.peek_invalid_type(&visitor)),
1532
        };
1533
1534
0
        match value {
1535
0
            Ok(value) => Ok(value),
1536
0
            Err(err) => Err(self.fix_position(err)),
1537
        }
1538
0
    }
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_str::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_str::<serde_core::de::impls::StringVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<serde_core::de::impls::PathBufVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::VirtioIOMMURequest as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::FsAllowlistCommand as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::VmIrqResponse as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::BatStatus as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::BatHealth as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::BatControlCommand as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::DiskControlCommand as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::DeviceControlCommand as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<devices::bus::BusType as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<devices::proxy::CommandResult as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<devices::virtio::resource_bridge::ResourceInfo as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<devices::virtio::resource_bridge::ResourceResponse as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::sys::linux::VmMemoryMappingResponse as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<devices::virtio::iommu::ipc_memory_mapper::IommuResponse as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<devices::virtio::vhost::control_socket::VhostDevResponse as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<devices::virtio::vhost::control_socket::VhostDevRequest as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<<core::result::Result<_, _> as serde_core::de::Deserialize>::deserialize::Field as serde_core::de::Deserialize>::deserialize::FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<serde_core::de::impls::StringVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<swap::SwapState as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<hypervisor::HypervisorKind as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::DiskControlResult as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::VirtioIOMMUVfioResult as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::VirtioIOMMUResponse as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::DevicesState as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::BatControlResult as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::UsbControlResult as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::VmMemoryResponse as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_str::<<vm_control::sys::linux::gpu::UnixDisplayMode as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
1539
1540
0
    fn deserialize_string<V>(self, visitor: V) -> Result<V::Value>
1541
0
    where
1542
0
        V: de::Visitor<'de>,
1543
    {
1544
0
        self.deserialize_str(visitor)
1545
0
    }
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_string::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_string::<serde_core::de::impls::StringVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_string::<serde_core::de::impls::PathBufVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_string::<serde_core::de::impls::StringVisitor>
1546
1547
    /// Parses a JSON string as bytes. Note that this function does not check
1548
    /// whether the bytes represent a valid UTF-8 string.
1549
    ///
1550
    /// The relevant part of the JSON specification is Section 8.2 of [RFC
1551
    /// 7159]:
1552
    ///
1553
    /// > When all the strings represented in a JSON text are composed entirely
1554
    /// > of Unicode characters (however escaped), then that JSON text is
1555
    /// > interoperable in the sense that all software implementations that
1556
    /// > parse it will agree on the contents of names and of string values in
1557
    /// > objects and arrays.
1558
    /// >
1559
    /// > However, the ABNF in this specification allows member names and string
1560
    /// > values to contain bit sequences that cannot encode Unicode characters;
1561
    /// > for example, "\uDEAD" (a single unpaired UTF-16 surrogate). Instances
1562
    /// > of this have been observed, for example, when a library truncates a
1563
    /// > UTF-16 string without checking whether the truncation split a
1564
    /// > surrogate pair.  The behavior of software that receives JSON texts
1565
    /// > containing such values is unpredictable; for example, implementations
1566
    /// > might return different values for the length of a string value or even
1567
    /// > suffer fatal runtime exceptions.
1568
    ///
1569
    /// [RFC 7159]: https://tools.ietf.org/html/rfc7159
1570
    ///
1571
    /// The behavior of serde_json is specified to fail on non-UTF-8 strings
1572
    /// when deserializing into Rust UTF-8 string types such as String, and
1573
    /// succeed with non-UTF-8 bytes when deserializing using this method.
1574
    ///
1575
    /// Escape sequences are processed as usual, and for `\uXXXX` escapes it is
1576
    /// still checked if the hex number represents a valid Unicode code point.
1577
    ///
1578
    /// # Examples
1579
    ///
1580
    /// You can use this to parse JSON strings containing invalid UTF-8 bytes,
1581
    /// or unpaired surrogates.
1582
    ///
1583
    /// ```
1584
    /// use serde_bytes::ByteBuf;
1585
    ///
1586
    /// fn look_at_bytes() -> Result<(), serde_json::Error> {
1587
    ///     let json_data = b"\"some bytes: \xe5\x00\xe5\"";
1588
    ///     let bytes: ByteBuf = serde_json::from_slice(json_data)?;
1589
    ///
1590
    ///     assert_eq!(b'\xe5', bytes[12]);
1591
    ///     assert_eq!(b'\0', bytes[13]);
1592
    ///     assert_eq!(b'\xe5', bytes[14]);
1593
    ///
1594
    ///     Ok(())
1595
    /// }
1596
    /// #
1597
    /// # look_at_bytes().unwrap();
1598
    /// ```
1599
    ///
1600
    /// Backslash escape sequences like `\n` are still interpreted and required
1601
    /// to be valid. `\u` escape sequences are required to represent a valid
1602
    /// Unicode code point or lone surrogate.
1603
    ///
1604
    /// ```
1605
    /// use serde_bytes::ByteBuf;
1606
    ///
1607
    /// fn look_at_bytes() -> Result<(), serde_json::Error> {
1608
    ///     let json_data = b"\"lone surrogate: \\uD801\"";
1609
    ///     let bytes: ByteBuf = serde_json::from_slice(json_data)?;
1610
    ///     let expected = b"lone surrogate: \xED\xA0\x81";
1611
    ///     assert_eq!(expected, bytes.as_slice());
1612
    ///     Ok(())
1613
    /// }
1614
    /// #
1615
    /// # look_at_bytes();
1616
    /// ```
1617
0
    fn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value>
1618
0
    where
1619
0
        V: de::Visitor<'de>,
1620
    {
1621
0
        let peek = match tri!(self.parse_whitespace()) {
1622
0
            Some(b) => b,
1623
            None => {
1624
0
                return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
1625
            }
1626
        };
1627
1628
0
        let value = match peek {
1629
            b'"' => {
1630
0
                self.eat_char();
1631
0
                self.scratch.clear();
1632
0
                match tri!(self.read.parse_str_raw(&mut self.scratch)) {
1633
0
                    Reference::Borrowed(b) => visitor.visit_borrowed_bytes(b),
1634
0
                    Reference::Copied(b) => visitor.visit_bytes(b),
1635
                }
1636
            }
1637
0
            b'[' => self.deserialize_seq(visitor),
1638
0
            _ => Err(self.peek_invalid_type(&visitor)),
1639
        };
1640
1641
0
        match value {
1642
0
            Ok(value) => Ok(value),
1643
0
            Err(err) => Err(self.fix_position(err)),
1644
        }
1645
0
    }
1646
1647
    #[inline]
1648
0
    fn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value>
1649
0
    where
1650
0
        V: de::Visitor<'de>,
1651
    {
1652
0
        self.deserialize_bytes(visitor)
1653
0
    }
1654
1655
    /// Parses a `null` as a None, and any other values as a `Some(...)`.
1656
    #[inline]
1657
0
    fn deserialize_option<V>(self, visitor: V) -> Result<V::Value>
1658
0
    where
1659
0
        V: de::Visitor<'de>,
1660
    {
1661
0
        match tri!(self.parse_whitespace()) {
1662
            Some(b'n') => {
1663
0
                self.eat_char();
1664
0
                tri!(self.parse_ident(b"ull"));
1665
0
                visitor.visit_none()
1666
            }
1667
0
            _ => visitor.visit_some(self),
1668
        }
1669
0
    }
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_option::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_option::<serde_core::de::impls::OptionVisitor<alloc::string::String>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_option::<serde_core::de::impls::OptionVisitor<crypto_generic::CryptKey>>
1670
1671
0
    fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value>
1672
0
    where
1673
0
        V: de::Visitor<'de>,
1674
    {
1675
0
        let peek = match tri!(self.parse_whitespace()) {
1676
0
            Some(b) => b,
1677
            None => {
1678
0
                return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
1679
            }
1680
        };
1681
1682
0
        let value = match peek {
1683
            b'n' => {
1684
0
                self.eat_char();
1685
0
                tri!(self.parse_ident(b"ull"));
1686
0
                visitor.visit_unit()
1687
            }
1688
0
            _ => Err(self.peek_invalid_type(&visitor)),
1689
        };
1690
1691
0
        match value {
1692
0
            Ok(value) => Ok(value),
1693
0
            Err(err) => Err(self.fix_position(err)),
1694
        }
1695
0
    }
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_unit::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_unit::<serde_core::de::impls::UnitVisitor>
1696
1697
0
    fn deserialize_unit_struct<V>(self, _name: &'static str, visitor: V) -> Result<V::Value>
1698
0
    where
1699
0
        V: de::Visitor<'de>,
1700
    {
1701
0
        self.deserialize_unit(visitor)
1702
0
    }
1703
1704
    /// Parses a newtype struct as the underlying value.
1705
    #[inline]
1706
0
    fn deserialize_newtype_struct<V>(self, name: &str, visitor: V) -> Result<V::Value>
1707
0
    where
1708
0
        V: de::Visitor<'de>,
1709
    {
1710
        #[cfg(feature = "raw_value")]
1711
        {
1712
            if name == crate::raw::TOKEN {
1713
                return self.deserialize_raw_value(visitor);
1714
            }
1715
        }
1716
1717
0
        let _ = name;
1718
0
        visitor.visit_newtype_struct(self)
1719
0
    }
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_newtype_struct::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_newtype_struct::<<vm_control::VmMemoryRegionId as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_newtype_struct::<<vm_control::FlatVmMemoryResponseError as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_newtype_struct::<<vm_memory::guest_address::GuestAddress as serde_core::de::Deserialize>::deserialize::__Visitor>
1720
1721
0
    fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value>
1722
0
    where
1723
0
        V: de::Visitor<'de>,
1724
    {
1725
0
        let peek = match tri!(self.parse_whitespace()) {
1726
0
            Some(b) => b,
1727
            None => {
1728
0
                return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
1729
            }
1730
        };
1731
1732
0
        let value = match peek {
1733
            b'[' => {
1734
0
                check_recursion! {
1735
                    self.eat_char();
1736
0
                    let ret = visitor.visit_seq(SeqAccess::new(self));
1737
                }
1738
1739
0
                match (ret, self.end_seq()) {
1740
0
                    (Ok(ret), Ok(())) => Ok(ret),
1741
0
                    (Err(err), _) | (_, Err(err)) => Err(err),
1742
                }
1743
            }
1744
0
            _ => Err(self.peek_invalid_type(&visitor)),
1745
        };
1746
1747
0
        match value {
1748
0
            Ok(value) => Ok(value),
1749
0
            Err(err) => Err(self.fix_position(err)),
1750
        }
1751
0
    }
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_seq::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_seq::<<alloc::vec::Vec<_> as serde_core::de::Deserialize>::deserialize::VecVisitor<devices::virtio::input::InputConfigFileEvent>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_seq::<<alloc::vec::Vec<_> as serde_core::de::Deserialize>::deserialize::VecVisitor<devices::virtio::input::InputConfigFileAbsInfo>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_seq::<serde_core::de::impls::ArrayVisitor<[devices::virtio::resource_bridge::PlaneInfo; 4]>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_seq::<serde_core::de::impls::ArrayVisitor<[u8; 8]>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_seq::<<(_, _) as serde_core::de::Deserialize>::deserialize::TupleVisitor<devices::bus::BusRange, devices::bus::BusType>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_seq::<<(_, _) as serde_core::de::Deserialize>::deserialize::TupleVisitor<u64, u64>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_seq::<<alloc::vec::Vec<_> as serde_core::de::Deserialize>::deserialize::VecVisitor<devices::bus::BusRange>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_seq::<<alloc::vec::Vec<_> as serde_core::de::Deserialize>::deserialize::VecVisitor<std::path::PathBuf>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_seq::<<alloc::vec::Vec<_> as serde_core::de::Deserialize>::deserialize::VecVisitor<resources::pci_address::PciAddress>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_seq::<<alloc::vec::Vec<_> as serde_core::de::Deserialize>::deserialize::VecVisitor<devices::virtio::iommu::memory_mapper::MemRegion>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_seq::<<alloc::vec::Vec<_> as serde_core::de::Deserialize>::deserialize::VecVisitor<(devices::bus::BusRange, devices::bus::BusType)>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_seq::<<alloc::vec::Vec<_> as serde_core::de::Deserialize>::deserialize::VecVisitor<(u64, u64)>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_seq::<<alloc::vec::Vec<_> as serde_core::de::Deserialize>::deserialize::VecVisitor<u8>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_seq::<serde_core::de::impls::ArrayVisitor<[vm_control::UsbControlAttachedDevice; 16]>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_seq::<<(_, _) as serde_core::de::Deserialize>::deserialize::TupleVisitor<u32, u32>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_seq::<<alloc::vec::Vec<_> as serde_core::de::Deserialize>::deserialize::VecVisitor<vm_control::VmMemoryFileMapping>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_seq::<<alloc::vec::Vec<_> as serde_core::de::Deserialize>::deserialize::VecVisitor<alloc::string::String>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_seq::<<<vm_control::sys::linux::gpu::UnixDisplayMode as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
1752
1753
0
    fn deserialize_tuple<V>(self, _len: usize, visitor: V) -> Result<V::Value>
1754
0
    where
1755
0
        V: de::Visitor<'de>,
1756
    {
1757
0
        self.deserialize_seq(visitor)
1758
0
    }
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_tuple::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_tuple::<serde_core::de::impls::ArrayVisitor<[devices::virtio::resource_bridge::PlaneInfo; 4]>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_tuple::<serde_core::de::impls::ArrayVisitor<[u8; 8]>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_tuple::<<(_, _) as serde_core::de::Deserialize>::deserialize::TupleVisitor<devices::bus::BusRange, devices::bus::BusType>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_tuple::<<(_, _) as serde_core::de::Deserialize>::deserialize::TupleVisitor<u64, u64>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_tuple::<serde_core::de::impls::ArrayVisitor<[vm_control::UsbControlAttachedDevice; 16]>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_tuple::<<(_, _) as serde_core::de::Deserialize>::deserialize::TupleVisitor<u32, u32>>
1759
1760
0
    fn deserialize_tuple_struct<V>(
1761
0
        self,
1762
0
        _name: &'static str,
1763
0
        _len: usize,
1764
0
        visitor: V,
1765
0
    ) -> Result<V::Value>
1766
0
    where
1767
0
        V: de::Visitor<'de>,
1768
    {
1769
0
        self.deserialize_seq(visitor)
1770
0
    }
1771
1772
0
    fn deserialize_map<V>(self, visitor: V) -> Result<V::Value>
1773
0
    where
1774
0
        V: de::Visitor<'de>,
1775
    {
1776
0
        let peek = match tri!(self.parse_whitespace()) {
1777
0
            Some(b) => b,
1778
            None => {
1779
0
                return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
1780
            }
1781
        };
1782
1783
0
        let value = match peek {
1784
            b'{' => {
1785
0
                check_recursion! {
1786
                    self.eat_char();
1787
0
                    let ret = visitor.visit_map(MapAccess::new(self));
1788
                }
1789
1790
0
                match (ret, self.end_map()) {
1791
0
                    (Ok(ret), Ok(())) => Ok(ret),
1792
0
                    (Err(err), _) | (_, Err(err)) => Err(err),
1793
                }
1794
            }
1795
0
            _ => Err(self.peek_invalid_type(&visitor)),
1796
        };
1797
1798
0
        match value {
1799
0
            Ok(value) => Ok(value),
1800
0
            Err(err) => Err(self.fix_position(err)),
1801
        }
1802
0
    }
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_map::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_map::<<alloc::collections::btree::map::BTreeMap<_, _> as serde_core::de::Deserialize>::deserialize::MapVisitor<alloc::string::String, u16>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_map::<<alloc::collections::btree::map::BTreeMap<_, _> as serde_core::de::Deserialize>::deserialize::MapVisitor<usize, (u32, u32)>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_map::<<alloc::collections::btree::map::BTreeMap<_, _> as serde_core::de::Deserialize>::deserialize::MapVisitor<u32, vm_control::gpu::DisplayParameters>>
1803
1804
0
    fn deserialize_struct<V>(
1805
0
        self,
1806
0
        _name: &'static str,
1807
0
        _fields: &'static [&'static str],
1808
0
        visitor: V,
1809
0
    ) -> Result<V::Value>
1810
0
    where
1811
0
        V: de::Visitor<'de>,
1812
    {
1813
0
        let peek = match tri!(self.parse_whitespace()) {
1814
0
            Some(b) => b,
1815
            None => {
1816
0
                return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
1817
            }
1818
        };
1819
1820
0
        let value = match peek {
1821
            b'[' => {
1822
0
                check_recursion! {
1823
                    self.eat_char();
1824
0
                    let ret = visitor.visit_seq(SeqAccess::new(self));
1825
                }
1826
1827
0
                match (ret, self.end_seq()) {
1828
0
                    (Ok(ret), Ok(())) => Ok(ret),
1829
0
                    (Err(err), _) | (_, Err(err)) => Err(err),
1830
                }
1831
            }
1832
            b'{' => {
1833
0
                check_recursion! {
1834
                    self.eat_char();
1835
0
                    let ret = visitor.visit_map(MapAccess::new(self));
1836
                }
1837
1838
0
                match (ret, self.end_map()) {
1839
0
                    (Ok(ret), Ok(())) => Ok(ret),
1840
0
                    (Err(err), _) | (_, Err(err)) => Err(err),
1841
                }
1842
            }
1843
0
            _ => Err(self.peek_invalid_type(&visitor)),
1844
        };
1845
1846
0
        match value {
1847
0
            Ok(value) => Ok(value),
1848
0
            Err(err) => Err(self.fix_position(err)),
1849
        }
1850
0
    }
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_struct::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_struct::<<devices::virtio::input::InputConfigFile as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_struct::<<devices::virtio::input::InputConfigFileEvent as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_struct::<<devices::virtio::input::InputConfigFileAbsInfo as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<snapshot::SnapshotReader as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<snapshot::SnapshotWriter as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<devices::UnpinRequest as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<crypto_generic::SecureByteVec as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<crypto_generic::CryptKey as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<base::mmap::Protection as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<devices::bus::BusRange as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<devices::proxy::SnapshotFile as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<devices::virtio::resource_bridge::PlaneInfo as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<devices::virtio::resource_bridge::BufferInfo as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<devices::virtio::iommu::memory_mapper::MemRegion as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::FsAllowlistCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::FsAllowlistCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::VmIrqResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::DiskControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::DeviceControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::DeviceControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<devices::proxy::CommandResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<devices::virtio::resource_bridge::ResourceInfo as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<swap::SwapStateTransition as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<swap::SwapMetrics as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<swap::SwapStatus as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<vm_control::UsbControlAttachedDevice as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<vm_control::VmMemoryFileMapping as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<vm_control::gpu::DisplayParameters as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::UsbControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::VmMemoryResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_struct::<<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
1851
1852
    /// Parses an enum as an object like `{"$KEY":$VALUE}`, where $VALUE is either a straight
1853
    /// value, a `[..]`, or a `{..}`.
1854
    #[inline]
1855
0
    fn deserialize_enum<V>(
1856
0
        self,
1857
0
        _name: &str,
1858
0
        _variants: &'static [&'static str],
1859
0
        visitor: V,
1860
0
    ) -> Result<V::Value>
1861
0
    where
1862
0
        V: de::Visitor<'de>,
1863
    {
1864
0
        match tri!(self.parse_whitespace()) {
1865
            Some(b'{') => {
1866
0
                check_recursion! {
1867
                    self.eat_char();
1868
0
                    let value = tri!(visitor.visit_enum(VariantAccess::new(self)));
1869
                }
1870
1871
0
                match tri!(self.parse_whitespace()) {
1872
                    Some(b'}') => {
1873
0
                        self.eat_char();
1874
0
                        Ok(value)
1875
                    }
1876
0
                    Some(_) => Err(self.error(ErrorCode::ExpectedSomeValue)),
1877
0
                    None => Err(self.error(ErrorCode::EofWhileParsingObject)),
1878
                }
1879
            }
1880
0
            Some(b'"') => visitor.visit_enum(UnitVariantAccess::new(self)),
1881
0
            Some(_) => Err(self.peek_error(ErrorCode::ExpectedSomeValue)),
1882
0
            None => Err(self.peek_error(ErrorCode::EofWhileParsingValue)),
1883
        }
1884
0
    }
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_enum::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<core::result::Result<_, _> as serde_core::de::Deserialize>::deserialize::ResultVisitor<devices::proxy::SnapshotFile, alloc::string::String>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<core::result::Result<_, _> as serde_core::de::Deserialize>::deserialize::ResultVisitor<(), alloc::string::String>>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::VirtioIOMMURequest as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::FsAllowlistCommand as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::VmIrqResponse as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::BatStatus as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::BatHealth as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::BatControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::DiskControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::DeviceControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<devices::bus::BusType as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<devices::proxy::CommandResult as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<devices::virtio::resource_bridge::ResourceInfo as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<devices::virtio::resource_bridge::ResourceResponse as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::sys::linux::VmMemoryMappingResponse as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<devices::virtio::iommu::ipc_memory_mapper::IommuResponse as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<devices::virtio::vhost::control_socket::VhostDevResponse as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<devices::virtio::vhost::control_socket::VhostDevRequest as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<swap::SwapState as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<hypervisor::HypervisorKind as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::DiskControlResult as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::VirtioIOMMUVfioResult as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::VirtioIOMMUResponse as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::DevicesState as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::BatControlResult as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::UsbControlResult as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::VmMemoryResponse as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Visitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_enum::<<vm_control::sys::linux::gpu::UnixDisplayMode as serde_core::de::Deserialize>::deserialize::__Visitor>
1885
1886
0
    fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value>
1887
0
    where
1888
0
        V: de::Visitor<'de>,
1889
    {
1890
0
        self.deserialize_str(visitor)
1891
0
    }
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_identifier::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::VirtioIOMMURequest as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::FsAllowlistCommand as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::VmIrqResponse as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::BatStatus as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::BatHealth as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::BatControlCommand as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::DiskControlCommand as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::DeviceControlCommand as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<devices::bus::BusType as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<devices::proxy::CommandResult as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<devices::virtio::resource_bridge::ResourceInfo as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<devices::virtio::resource_bridge::ResourceResponse as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::sys::linux::VmMemoryMappingResponse as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<devices::virtio::iommu::ipc_memory_mapper::IommuResponse as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<devices::virtio::vhost::control_socket::VhostDevResponse as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<devices::virtio::vhost::control_socket::VhostDevRequest as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<<core::result::Result<_, _> as serde_core::de::Deserialize>::deserialize::Field as serde_core::de::Deserialize>::deserialize::FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<swap::SwapState as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<hypervisor::HypervisorKind as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::DiskControlResult as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::VirtioIOMMUVfioResult as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::VirtioIOMMUResponse as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::DevicesState as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::BatControlResult as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::UsbControlResult as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::VmMemoryResponse as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_identifier::<<vm_control::sys::linux::gpu::UnixDisplayMode as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
1892
1893
0
    fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value>
1894
0
    where
1895
0
        V: de::Visitor<'de>,
1896
    {
1897
0
        tri!(self.ignore_value());
1898
0
        visitor.visit_unit()
1899
0
    }
Unexecuted instantiation: <&mut serde_json::de::Deserializer<_> as serde_core::de::Deserializer>::deserialize_ignored_any::<_>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_ignored_any::<serde_core::de::ignored_any::IgnoredAny>
Unexecuted instantiation: <&mut serde_json::de::Deserializer<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_ignored_any::<serde_core::de::ignored_any::IgnoredAny>
1900
}
1901
1902
struct SeqAccess<'a, R: 'a> {
1903
    de: &'a mut Deserializer<R>,
1904
    first: bool,
1905
}
1906
1907
impl<'a, R: 'a> SeqAccess<'a, R> {
1908
0
    fn new(de: &'a mut Deserializer<R>) -> Self {
1909
0
        SeqAccess { de, first: true }
1910
0
    }
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::StrRead>>::new
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead>>::new
1911
}
1912
1913
impl<'de, 'a, R: Read<'de> + 'a> de::SeqAccess<'de> for SeqAccess<'a, R> {
1914
    type Error = Error;
1915
1916
0
    fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>>
1917
0
    where
1918
0
        T: de::DeserializeSeed<'de>,
1919
    {
1920
0
        let peek = match tri!(self.de.parse_whitespace()) {
1921
            Some(b']') => {
1922
0
                return Ok(None);
1923
            }
1924
0
            Some(b',') if !self.first => {
1925
0
                self.de.eat_char();
1926
0
                tri!(self.de.parse_whitespace())
1927
            }
1928
0
            Some(b) => {
1929
0
                if self.first {
1930
0
                    self.first = false;
1931
0
                    Some(b)
1932
                } else {
1933
0
                    return Err(self.de.peek_error(ErrorCode::ExpectedListCommaOrEnd));
1934
                }
1935
            }
1936
            None => {
1937
0
                return Err(self.de.peek_error(ErrorCode::EofWhileParsingList));
1938
            }
1939
        };
1940
1941
0
        match peek {
1942
0
            Some(b']') => Err(self.de.peek_error(ErrorCode::TrailingComma)),
1943
0
            Some(_) => Ok(Some(tri!(seed.deserialize(&mut *self.de)))),
1944
0
            None => Err(self.de.peek_error(ErrorCode::EofWhileParsingValue)),
1945
        }
1946
0
    }
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::StrRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<serde_json::value::Value>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::StrRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<core::option::Option<alloc::string::String>>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::StrRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<alloc::vec::Vec<devices::virtio::input::InputConfigFileEvent>>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::StrRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<alloc::vec::Vec<devices::virtio::input::InputConfigFileAbsInfo>>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::StrRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<alloc::collections::btree::map::BTreeMap<alloc::string::String, u16>>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::StrRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<alloc::string::String>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::StrRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<devices::virtio::input::InputConfigFileEvent>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::StrRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<devices::virtio::input::InputConfigFileAbsInfo>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::StrRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<u32>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::StrRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<u16>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<[devices::virtio::resource_bridge::PlaneInfo; 4]>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<core::option::Option<crypto_generic::CryptKey>>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<alloc::vec::Vec<devices::bus::BusRange>>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<alloc::vec::Vec<std::path::PathBuf>>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<alloc::vec::Vec<resources::pci_address::PciAddress>>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<alloc::vec::Vec<(u64, u64)>>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<alloc::vec::Vec<u8>>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<snapshot::SnapshotReader>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<snapshot::SnapshotWriter>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<crypto_generic::SecureByteVec>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<base::mmap::Protection>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<devices::bus::BusType>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<devices::bus::BusRange>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<vm_memory::guest_address::GuestAddress>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<std::path::PathBuf>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<resources::pci_address::PciAddress>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<devices::virtio::resource_bridge::PlaneInfo>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<devices::virtio::iommu::memory_mapper::MemRegion>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<<<devices::proxy::SnapshotFile as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_seq::__DeserializeWith>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<<<devices::virtio::resource_bridge::BufferInfo as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_seq::__DeserializeWith>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor as serde_core::de::Visitor>::visit_seq::__DeserializeWith>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<<<<devices::virtio::resource_bridge::ResourceInfo as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor as serde_core::de::Visitor>::visit_seq::__DeserializeWith>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<(devices::bus::BusRange, devices::bus::BusType)>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<(u64, u64)>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<alloc::collections::btree::map::BTreeMap<usize, (u32, u32)>>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<alloc::collections::btree::map::BTreeMap<u32, vm_control::gpu::DisplayParameters>>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<swap::SwapMetrics>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<swap::SwapStateTransition>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<swap::SwapState>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<hypervisor::HypervisorKind>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<vm_control::VmMemoryRegionId>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<vm_control::VmMemoryFileMapping>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<vm_control::UsbControlAttachedDevice>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<base::descriptor::SafeDescriptor>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<alloc::string::String>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<vm_control::sys::linux::gpu::UnixDisplayMode>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<<<vm_control::VmMemoryFileMapping as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_seq::__DeserializeWith>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<(u32, u32)>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<bool>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<u8>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<usize>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<u32>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<u16>>
Unexecuted instantiation: <serde_json::de::SeqAccess<serde_json::read::SliceRead> as serde_core::de::SeqAccess>::next_element_seed::<core::marker::PhantomData<u64>>
1947
}
1948
1949
struct MapAccess<'a, R: 'a> {
1950
    de: &'a mut Deserializer<R>,
1951
    first: bool,
1952
}
1953
1954
impl<'a, R: 'a> MapAccess<'a, R> {
1955
0
    fn new(de: &'a mut Deserializer<R>) -> Self {
1956
0
        MapAccess { de, first: true }
1957
0
    }
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::StrRead>>::new
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead>>::new
1958
}
1959
1960
impl<'de, 'a, R: Read<'de> + 'a> de::MapAccess<'de> for MapAccess<'a, R> {
1961
    type Error = Error;
1962
1963
0
    fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>>
1964
0
    where
1965
0
        K: de::DeserializeSeed<'de>,
1966
    {
1967
0
        let peek = match tri!(self.de.parse_whitespace()) {
1968
            Some(b'}') => {
1969
0
                return Ok(None);
1970
            }
1971
0
            Some(b',') if !self.first => {
1972
0
                self.de.eat_char();
1973
0
                tri!(self.de.parse_whitespace())
1974
            }
1975
0
            Some(b) => {
1976
0
                if self.first {
1977
0
                    self.first = false;
1978
0
                    Some(b)
1979
                } else {
1980
0
                    return Err(self.de.peek_error(ErrorCode::ExpectedObjectCommaOrEnd));
1981
                }
1982
            }
1983
            None => {
1984
0
                return Err(self.de.peek_error(ErrorCode::EofWhileParsingObject));
1985
            }
1986
        };
1987
1988
0
        match peek {
1989
0
            Some(b'"') => seed.deserialize(MapKey { de: &mut *self.de }).map(Some),
1990
0
            Some(b'}') => Err(self.de.peek_error(ErrorCode::TrailingComma)),
1991
0
            Some(_) => Err(self.de.peek_error(ErrorCode::KeyMustBeAString)),
1992
0
            None => Err(self.de.peek_error(ErrorCode::EofWhileParsingValue)),
1993
        }
1994
0
    }
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::StrRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<alloc::string::String>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::StrRead> as serde_core::de::MapAccess>::next_key_seed::<serde_json::value::de::KeyClassifier>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::StrRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<devices::virtio::input::InputConfigFile as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::StrRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<devices::virtio::input::InputConfigFileEvent as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::StrRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<devices::virtio::input::InputConfigFileAbsInfo as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<snapshot::SnapshotReader as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<snapshot::SnapshotWriter as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<devices::UnpinRequest as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<crypto_generic::SecureByteVec as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<crypto_generic::CryptKey as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<base::mmap::Protection as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<devices::bus::BusRange as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<devices::proxy::SnapshotFile as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<devices::virtio::resource_bridge::PlaneInfo as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<devices::virtio::resource_bridge::BufferInfo as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<devices::virtio::iommu::memory_mapper::MemRegion as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::FsAllowlistCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::FsAllowlistCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::VmIrqResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::DiskControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::DeviceControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::DeviceControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<devices::proxy::CommandResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<devices::virtio::resource_bridge::ResourceInfo as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<swap::SwapStateTransition as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<swap::SwapMetrics as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<swap::SwapStatus as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<vm_control::UsbControlAttachedDevice as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<vm_control::VmMemoryFileMapping as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<vm_control::gpu::DisplayParameters as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::UsbControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::VmMemoryResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Field>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<usize>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_key_seed::<core::marker::PhantomData<u32>>
1995
1996
0
    fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value>
1997
0
    where
1998
0
        V: de::DeserializeSeed<'de>,
1999
    {
2000
0
        tri!(self.de.parse_object_colon());
2001
2002
0
        seed.deserialize(&mut *self.de)
2003
0
    }
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::StrRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<serde_json::value::Value>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::StrRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<core::option::Option<alloc::string::String>>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::StrRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<alloc::vec::Vec<devices::virtio::input::InputConfigFileEvent>>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::StrRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<alloc::vec::Vec<devices::virtio::input::InputConfigFileAbsInfo>>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::StrRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<alloc::collections::btree::map::BTreeMap<alloc::string::String, u16>>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::StrRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<serde_core::de::ignored_any::IgnoredAny>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::StrRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<alloc::string::String>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::StrRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<u32>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::StrRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<u16>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<[devices::virtio::resource_bridge::PlaneInfo; 4]>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<core::option::Option<crypto_generic::CryptKey>>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<alloc::vec::Vec<devices::bus::BusRange>>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<alloc::vec::Vec<std::path::PathBuf>>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<alloc::vec::Vec<resources::pci_address::PciAddress>>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<alloc::vec::Vec<(u64, u64)>>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<alloc::vec::Vec<u8>>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<snapshot::SnapshotReader>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<snapshot::SnapshotWriter>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<crypto_generic::SecureByteVec>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<base::mmap::Protection>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<vm_memory::guest_address::GuestAddress>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<std::path::PathBuf>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<<<devices::proxy::SnapshotFile as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_map::__DeserializeWith>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<<<devices::virtio::resource_bridge::BufferInfo as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_map::__DeserializeWith>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor as serde_core::de::Visitor>::visit_map::__DeserializeWith>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<<<<devices::virtio::resource_bridge::ResourceInfo as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor as serde_core::de::Visitor>::visit_map::__DeserializeWith>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<alloc::collections::btree::map::BTreeMap<usize, (u32, u32)>>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<alloc::collections::btree::map::BTreeMap<u32, vm_control::gpu::DisplayParameters>>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<swap::SwapMetrics>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<swap::SwapStateTransition>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<swap::SwapState>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<hypervisor::HypervisorKind>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<vm_control::VmMemoryRegionId>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<serde_core::de::ignored_any::IgnoredAny>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<base::descriptor::SafeDescriptor>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<vm_control::gpu::DisplayParameters>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<vm_control::sys::linux::gpu::UnixDisplayMode>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<<<vm_control::VmMemoryFileMapping as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_map::__DeserializeWith>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<(u32, u32)>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<bool>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<u8>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<usize>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<u32>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<u16>>
Unexecuted instantiation: <serde_json::de::MapAccess<serde_json::read::SliceRead> as serde_core::de::MapAccess>::next_value_seed::<core::marker::PhantomData<u64>>
2004
}
2005
2006
struct VariantAccess<'a, R: 'a> {
2007
    de: &'a mut Deserializer<R>,
2008
}
2009
2010
impl<'a, R: 'a> VariantAccess<'a, R> {
2011
0
    fn new(de: &'a mut Deserializer<R>) -> Self {
2012
0
        VariantAccess { de }
2013
0
    }
Unexecuted instantiation: <serde_json::de::VariantAccess<_>>::new
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead>>::new
2014
}
2015
2016
impl<'de, 'a, R: Read<'de> + 'a> de::EnumAccess<'de> for VariantAccess<'a, R> {
2017
    type Error = Error;
2018
    type Variant = Self;
2019
2020
0
    fn variant_seed<V>(self, seed: V) -> Result<(V::Value, Self)>
2021
0
    where
2022
0
        V: de::DeserializeSeed<'de>,
2023
    {
2024
0
        let val = tri!(seed.deserialize(&mut *self.de));
2025
0
        tri!(self.de.parse_object_colon());
2026
0
        Ok((val, self))
2027
0
    }
Unexecuted instantiation: <serde_json::de::VariantAccess<_> as serde_core::de::EnumAccess>::variant_seed::<_>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::VirtioIOMMURequest as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::FsAllowlistCommand as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::VmIrqResponse as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::BatStatus as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::BatHealth as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::BatControlCommand as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::DiskControlCommand as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::DeviceControlCommand as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<devices::bus::BusType as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<devices::proxy::CommandResult as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<devices::virtio::resource_bridge::ResourceInfo as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<devices::virtio::resource_bridge::ResourceResponse as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::sys::linux::VmMemoryMappingResponse as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<devices::virtio::iommu::ipc_memory_mapper::IommuResponse as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<devices::virtio::vhost::control_socket::VhostDevResponse as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<devices::virtio::vhost::control_socket::VhostDevRequest as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<core::result::Result<_, _> as serde_core::de::Deserialize>::deserialize::Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<swap::SwapState as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<hypervisor::HypervisorKind as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::DiskControlResult as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::VirtioIOMMUVfioResult as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::VirtioIOMMUResponse as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::DevicesState as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::BatControlResult as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::UsbControlResult as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::VmMemoryResponse as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::sys::linux::gpu::UnixDisplayMode as serde_core::de::Deserialize>::deserialize::__Field>>
2028
}
2029
2030
impl<'de, 'a, R: Read<'de> + 'a> de::VariantAccess<'de> for VariantAccess<'a, R> {
2031
    type Error = Error;
2032
2033
0
    fn unit_variant(self) -> Result<()> {
2034
0
        de::Deserialize::deserialize(self.de)
2035
0
    }
Unexecuted instantiation: <serde_json::de::VariantAccess<_> as serde_core::de::VariantAccess>::unit_variant
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::unit_variant
2036
2037
0
    fn newtype_variant_seed<T>(self, seed: T) -> Result<T::Value>
2038
0
    where
2039
0
        T: de::DeserializeSeed<'de>,
2040
    {
2041
0
        seed.deserialize(self.de)
2042
0
    }
Unexecuted instantiation: <serde_json::de::VariantAccess<_> as serde_core::de::VariantAccess>::newtype_variant_seed::<_>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<[u8; 8]>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<core::result::Result<devices::proxy::SnapshotFile, alloc::string::String>>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<core::result::Result<(), alloc::string::String>>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<alloc::vec::Vec<devices::virtio::iommu::memory_mapper::MemRegion>>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<alloc::vec::Vec<(devices::bus::BusRange, devices::bus::BusType)>>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::VmMemoryRegionId>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::VirtioIOMMUVfioCommand>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::BatHealth>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::BatStatus>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<base::event::Event>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<devices::proxy::SnapshotFile>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<devices::virtio::resource_bridge::BufferInfo>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<devices::virtio::resource_bridge::ResourceInfo>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<bool>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<usize>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<u32>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<()>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<[vm_control::UsbControlAttachedDevice; 16]>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<swap::SwapStatus>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::DevicesState>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::BatControlResult>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::UsbControlResult>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::VirtioIOMMUVfioResult>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::VmMemoryResponseError>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<base::errno::Error>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<alloc::string::String>>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::gpu::GpuControlResult>>
2043
2044
0
    fn tuple_variant<V>(self, _len: usize, visitor: V) -> Result<V::Value>
2045
0
    where
2046
0
        V: de::Visitor<'de>,
2047
    {
2048
0
        de::Deserializer::deserialize_seq(self.de, visitor)
2049
0
    }
Unexecuted instantiation: <serde_json::de::VariantAccess<_> as serde_core::de::VariantAccess>::tuple_variant::<_>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::tuple_variant::<<<vm_control::sys::linux::gpu::UnixDisplayMode as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
2050
2051
0
    fn struct_variant<V>(self, fields: &'static [&'static str], visitor: V) -> Result<V::Value>
2052
0
    where
2053
0
        V: de::Visitor<'de>,
2054
    {
2055
0
        de::Deserializer::deserialize_struct(self.de, "", fields, visitor)
2056
0
    }
Unexecuted instantiation: <serde_json::de::VariantAccess<_> as serde_core::de::VariantAccess>::struct_variant::<_>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::FsAllowlistCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::FsAllowlistCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VmIrqResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::DiskControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::DeviceControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::DeviceControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<devices::proxy::CommandResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<devices::virtio::resource_bridge::ResourceInfo as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::UsbControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VmMemoryResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::VariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
2057
}
2058
2059
struct UnitVariantAccess<'a, R: 'a> {
2060
    de: &'a mut Deserializer<R>,
2061
}
2062
2063
impl<'a, R: 'a> UnitVariantAccess<'a, R> {
2064
0
    fn new(de: &'a mut Deserializer<R>) -> Self {
2065
0
        UnitVariantAccess { de }
2066
0
    }
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<_>>::new
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead>>::new
2067
}
2068
2069
impl<'de, 'a, R: Read<'de> + 'a> de::EnumAccess<'de> for UnitVariantAccess<'a, R> {
2070
    type Error = Error;
2071
    type Variant = Self;
2072
2073
0
    fn variant_seed<V>(self, seed: V) -> Result<(V::Value, Self)>
2074
0
    where
2075
0
        V: de::DeserializeSeed<'de>,
2076
    {
2077
0
        let variant = tri!(seed.deserialize(&mut *self.de));
2078
0
        Ok((variant, self))
2079
0
    }
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<_> as serde_core::de::EnumAccess>::variant_seed::<_>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::VirtioIOMMURequest as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::FsAllowlistCommand as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::VmIrqResponse as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::BatStatus as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::BatHealth as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::BatControlCommand as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::DiskControlCommand as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::DeviceControlCommand as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<devices::bus::BusType as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<devices::proxy::CommandResult as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<devices::virtio::resource_bridge::ResourceInfo as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<devices::virtio::resource_bridge::ResourceResponse as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::sys::linux::VmMemoryMappingResponse as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<devices::virtio::iommu::ipc_memory_mapper::IommuResponse as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<devices::virtio::vhost::control_socket::VhostDevResponse as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<devices::virtio::vhost::control_socket::VhostDevRequest as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<core::result::Result<_, _> as serde_core::de::Deserialize>::deserialize::Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<swap::SwapState as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<hypervisor::HypervisorKind as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::DiskControlResult as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::VirtioIOMMUVfioResult as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::VirtioIOMMUResponse as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::DevicesState as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::BatControlResult as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::UsbControlResult as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::VmMemoryResponse as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Field>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::EnumAccess>::variant_seed::<core::marker::PhantomData<<vm_control::sys::linux::gpu::UnixDisplayMode as serde_core::de::Deserialize>::deserialize::__Field>>
2080
}
2081
2082
impl<'de, 'a, R: Read<'de> + 'a> de::VariantAccess<'de> for UnitVariantAccess<'a, R> {
2083
    type Error = Error;
2084
2085
0
    fn unit_variant(self) -> Result<()> {
2086
0
        Ok(())
2087
0
    }
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<_> as serde_core::de::VariantAccess>::unit_variant
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::unit_variant
2088
2089
0
    fn newtype_variant_seed<T>(self, _seed: T) -> Result<T::Value>
2090
0
    where
2091
0
        T: de::DeserializeSeed<'de>,
2092
    {
2093
0
        Err(de::Error::invalid_type(
2094
0
            Unexpected::UnitVariant,
2095
0
            &"newtype variant",
2096
0
        ))
2097
0
    }
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<_> as serde_core::de::VariantAccess>::newtype_variant_seed::<_>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<[u8; 8]>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<core::result::Result<devices::proxy::SnapshotFile, alloc::string::String>>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<core::result::Result<(), alloc::string::String>>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<alloc::vec::Vec<devices::virtio::iommu::memory_mapper::MemRegion>>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<alloc::vec::Vec<(devices::bus::BusRange, devices::bus::BusType)>>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::VmMemoryRegionId>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::VirtioIOMMUVfioCommand>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::BatHealth>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::BatStatus>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<base::event::Event>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<devices::proxy::SnapshotFile>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<devices::virtio::resource_bridge::BufferInfo>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<devices::virtio::resource_bridge::ResourceInfo>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<bool>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<usize>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<u32>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<()>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<[vm_control::UsbControlAttachedDevice; 16]>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<swap::SwapStatus>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::DevicesState>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::BatControlResult>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::UsbControlResult>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::VirtioIOMMUVfioResult>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::VmMemoryResponseError>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<base::errno::Error>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<alloc::string::String>>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::newtype_variant_seed::<core::marker::PhantomData<vm_control::gpu::GpuControlResult>>
2098
2099
0
    fn tuple_variant<V>(self, _len: usize, _visitor: V) -> Result<V::Value>
2100
0
    where
2101
0
        V: de::Visitor<'de>,
2102
    {
2103
0
        Err(de::Error::invalid_type(
2104
0
            Unexpected::UnitVariant,
2105
0
            &"tuple variant",
2106
0
        ))
2107
0
    }
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<_> as serde_core::de::VariantAccess>::tuple_variant::<_>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::tuple_variant::<<<vm_control::sys::linux::gpu::UnixDisplayMode as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
2108
2109
0
    fn struct_variant<V>(self, _fields: &'static [&'static str], _visitor: V) -> Result<V::Value>
2110
0
    where
2111
0
        V: de::Visitor<'de>,
2112
    {
2113
0
        Err(de::Error::invalid_type(
2114
0
            Unexpected::UnitVariant,
2115
0
            &"struct variant",
2116
0
        ))
2117
0
    }
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<_> as serde_core::de::VariantAccess>::struct_variant::<_>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::FsAllowlistCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::FsAllowlistCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VmIrqResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::DiskControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::DeviceControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::DeviceControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<devices::proxy::CommandResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<devices::virtio::resource_bridge::ResourceInfo as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::UsbControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::VmMemoryResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
Unexecuted instantiation: <serde_json::de::UnitVariantAccess<serde_json::read::SliceRead> as serde_core::de::VariantAccess>::struct_variant::<<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__Visitor>
2118
}
2119
2120
/// Only deserialize from this after peeking a '"' byte! Otherwise it may
2121
/// deserialize invalid JSON successfully.
2122
struct MapKey<'a, R: 'a> {
2123
    de: &'a mut Deserializer<R>,
2124
}
2125
2126
macro_rules! deserialize_integer_key {
2127
    ($method:ident => $visit:ident) => {
2128
0
        fn $method<V>(self, visitor: V) -> Result<V::Value>
2129
0
        where
2130
0
            V: de::Visitor<'de>,
2131
        {
2132
0
            self.de.eat_char();
2133
0
            self.de.scratch.clear();
2134
0
            let string = tri!(self.de.read.parse_str(&mut self.de.scratch));
2135
0
            match (string.parse(), string) {
2136
0
                (Ok(integer), _) => visitor.$visit(integer),
2137
0
                (Err(_), Reference::Borrowed(s)) => visitor.visit_borrowed_str(s),
2138
0
                (Err(_), Reference::Copied(s)) => visitor.visit_str(s),
2139
            }
2140
0
        }
Unexecuted instantiation: <serde_json::de::MapKey<_> as serde_core::de::Deserializer>::deserialize_i8::<_>
Unexecuted instantiation: <serde_json::de::MapKey<_> as serde_core::de::Deserializer>::deserialize_u8::<_>
Unexecuted instantiation: <serde_json::de::MapKey<_> as serde_core::de::Deserializer>::deserialize_i16::<_>
Unexecuted instantiation: <serde_json::de::MapKey<_> as serde_core::de::Deserializer>::deserialize_i32::<_>
Unexecuted instantiation: <serde_json::de::MapKey<_> as serde_core::de::Deserializer>::deserialize_i64::<_>
Unexecuted instantiation: <serde_json::de::MapKey<_> as serde_core::de::Deserializer>::deserialize_u16::<_>
Unexecuted instantiation: <serde_json::de::MapKey<_> as serde_core::de::Deserializer>::deserialize_u32::<_>
Unexecuted instantiation: <serde_json::de::MapKey<_> as serde_core::de::Deserializer>::deserialize_u64::<_>
Unexecuted instantiation: <serde_json::de::MapKey<_> as serde_core::de::Deserializer>::deserialize_i128::<_>
Unexecuted instantiation: <serde_json::de::MapKey<_> as serde_core::de::Deserializer>::deserialize_u128::<_>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_u32::<<u32 as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_u64::<<usize as serde_core::de::Deserialize>::deserialize::PrimitiveVisitor>
2141
    };
2142
}
2143
2144
impl<'de, 'a, R> de::Deserializer<'de> for MapKey<'a, R>
2145
where
2146
    R: Read<'de>,
2147
{
2148
    type Error = Error;
2149
2150
    #[inline]
2151
0
    fn deserialize_any<V>(self, visitor: V) -> Result<V::Value>
2152
0
    where
2153
0
        V: de::Visitor<'de>,
2154
    {
2155
0
        self.de.eat_char();
2156
0
        self.de.scratch.clear();
2157
0
        match tri!(self.de.read.parse_str(&mut self.de.scratch)) {
2158
0
            Reference::Borrowed(s) => visitor.visit_borrowed_str(s),
2159
0
            Reference::Copied(s) => visitor.visit_str(s),
2160
        }
2161
0
    }
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_any::<serde_core::de::impls::StringVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_any::<serde_json::value::de::KeyClassifier>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_any::<<devices::virtio::input::InputConfigFile as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_any::<<devices::virtio::input::InputConfigFileEvent as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::StrRead> as serde_core::de::Deserializer>::deserialize_any::<<devices::virtio::input::InputConfigFileAbsInfo as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<snapshot::SnapshotReader as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<snapshot::SnapshotWriter as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<devices::UnpinRequest as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<crypto_generic::SecureByteVec as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<crypto_generic::CryptKey as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<base::mmap::Protection as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<devices::bus::BusRange as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<devices::proxy::SnapshotFile as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<devices::virtio::resource_bridge::PlaneInfo as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<devices::virtio::resource_bridge::BufferInfo as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<devices::virtio::iommu::memory_mapper::MemRegion as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::VirtioIOMMUVfioCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::FsAllowlistCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::FsAllowlistCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::VmIrqResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::DiskControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::DeviceControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::DeviceControlCommand as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<devices::proxy::CommandResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<devices::virtio::resource_bridge::ResourceInfo as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<devices::virtio::iommu::ipc_memory_mapper::IommuRequest as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<swap::SwapStateTransition as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<swap::SwapMetrics as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<swap::SwapStatus as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<vm_control::UsbControlAttachedDevice as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<vm_control::VmMemoryFileMapping as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<vm_control::gpu::DisplayParameters as serde_core::de::Deserialize>::deserialize::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::VmResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::UsbControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::VmMemoryResponse as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
Unexecuted instantiation: <serde_json::de::MapKey<serde_json::read::SliceRead> as serde_core::de::Deserializer>::deserialize_any::<<<vm_control::gpu::GpuControlResult as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_enum::__FieldVisitor>
2162
2163
    deserialize_integer_key!(deserialize_i8 => visit_i8);
2164
    deserialize_integer_key!(deserialize_i16 => visit_i16);
2165
    deserialize_integer_key!(deserialize_i32 => visit_i32);
2166
    deserialize_integer_key!(deserialize_i64 => visit_i64);
2167
    deserialize_integer_key!(deserialize_u8 => visit_u8);
2168
    deserialize_integer_key!(deserialize_u16 => visit_u16);
2169
    deserialize_integer_key!(deserialize_u32 => visit_u32);
2170
    deserialize_integer_key!(deserialize_u64 => visit_u64);
2171
2172
    serde_if_integer128! {
2173
        deserialize_integer_key!(deserialize_i128 => visit_i128);
2174
        deserialize_integer_key!(deserialize_u128 => visit_u128);
2175
    }
2176
2177
    #[inline]
2178
0
    fn deserialize_option<V>(self, visitor: V) -> Result<V::Value>
2179
0
    where
2180
0
        V: de::Visitor<'de>,
2181
    {
2182
        // Map keys cannot be null.
2183
0
        visitor.visit_some(self)
2184
0
    }
2185
2186
    #[inline]
2187
0
    fn deserialize_newtype_struct<V>(self, name: &'static str, visitor: V) -> Result<V::Value>
2188
0
    where
2189
0
        V: de::Visitor<'de>,
2190
    {
2191
        #[cfg(feature = "raw_value")]
2192
        {
2193
            if name == crate::raw::TOKEN {
2194
                return self.de.deserialize_raw_value(visitor);
2195
            }
2196
        }
2197
2198
0
        let _ = name;
2199
0
        visitor.visit_newtype_struct(self)
2200
0
    }
2201
2202
    #[inline]
2203
0
    fn deserialize_enum<V>(
2204
0
        self,
2205
0
        name: &'static str,
2206
0
        variants: &'static [&'static str],
2207
0
        visitor: V,
2208
0
    ) -> Result<V::Value>
2209
0
    where
2210
0
        V: de::Visitor<'de>,
2211
    {
2212
0
        self.de.deserialize_enum(name, variants, visitor)
2213
0
    }
2214
2215
    #[inline]
2216
0
    fn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value>
2217
0
    where
2218
0
        V: de::Visitor<'de>,
2219
    {
2220
0
        self.de.deserialize_bytes(visitor)
2221
0
    }
2222
2223
    #[inline]
2224
0
    fn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value>
2225
0
    where
2226
0
        V: de::Visitor<'de>,
2227
    {
2228
0
        self.de.deserialize_bytes(visitor)
2229
0
    }
2230
2231
    forward_to_deserialize_any! {
2232
        bool f32 f64 char str string unit unit_struct seq tuple tuple_struct map
2233
        struct identifier ignored_any
2234
    }
2235
}
2236
2237
//////////////////////////////////////////////////////////////////////////////
2238
2239
/// Iterator that deserializes a stream into multiple JSON values.
2240
///
2241
/// A stream deserializer can be created from any JSON deserializer using the
2242
/// `Deserializer::into_iter` method.
2243
///
2244
/// The data can consist of any JSON value. Values need to be a self-delineating value e.g.
2245
/// arrays, objects, or strings, or be followed by whitespace or a self-delineating value.
2246
///
2247
/// ```
2248
/// use serde_json::{Deserializer, Value};
2249
///
2250
/// fn main() {
2251
///     let data = "{\"k\": 3}1\"cool\"\"stuff\" 3{}  [0, 1, 2]";
2252
///
2253
///     let stream = Deserializer::from_str(data).into_iter::<Value>();
2254
///
2255
///     for value in stream {
2256
///         println!("{}", value.unwrap());
2257
///     }
2258
/// }
2259
/// ```
2260
pub struct StreamDeserializer<'de, R, T> {
2261
    de: Deserializer<R>,
2262
    offset: usize,
2263
    failed: bool,
2264
    output: PhantomData<T>,
2265
    lifetime: PhantomData<&'de ()>,
2266
}
2267
2268
impl<'de, R, T> StreamDeserializer<'de, R, T>
2269
where
2270
    R: read::Read<'de>,
2271
    T: de::Deserialize<'de>,
2272
{
2273
    /// Create a JSON stream deserializer from one of the possible serde_json
2274
    /// input sources.
2275
    ///
2276
    /// Typically it is more convenient to use one of these methods instead:
2277
    ///
2278
    ///   - Deserializer::from_str(...).into_iter()
2279
    ///   - Deserializer::from_slice(...).into_iter()
2280
    ///   - Deserializer::from_reader(...).into_iter()
2281
0
    pub fn new(read: R) -> Self {
2282
0
        let offset = read.byte_offset();
2283
0
        StreamDeserializer {
2284
0
            de: Deserializer::new(read),
2285
0
            offset,
2286
0
            failed: false,
2287
0
            output: PhantomData,
2288
0
            lifetime: PhantomData,
2289
0
        }
2290
0
    }
2291
2292
    /// Returns the number of bytes so far deserialized into a successful `T`.
2293
    ///
2294
    /// If a stream deserializer returns an EOF error, new data can be joined to
2295
    /// `old_data[stream.byte_offset()..]` to try again.
2296
    ///
2297
    /// ```
2298
    /// let data = b"[0] [1] [";
2299
    ///
2300
    /// let de = serde_json::Deserializer::from_slice(data);
2301
    /// let mut stream = de.into_iter::<Vec<i32>>();
2302
    /// assert_eq!(0, stream.byte_offset());
2303
    ///
2304
    /// println!("{:?}", stream.next()); // [0]
2305
    /// assert_eq!(3, stream.byte_offset());
2306
    ///
2307
    /// println!("{:?}", stream.next()); // [1]
2308
    /// assert_eq!(7, stream.byte_offset());
2309
    ///
2310
    /// println!("{:?}", stream.next()); // error
2311
    /// assert_eq!(8, stream.byte_offset());
2312
    ///
2313
    /// // If err.is_eof(), can join the remaining data to new data and continue.
2314
    /// let remaining = &data[stream.byte_offset()..];
2315
    /// ```
2316
    ///
2317
    /// *Note:* In the future this method may be changed to return the number of
2318
    /// bytes so far deserialized into a successful T *or* syntactically valid
2319
    /// JSON skipped over due to a type error. See [serde-rs/json#70] for an
2320
    /// example illustrating this.
2321
    ///
2322
    /// [serde-rs/json#70]: https://github.com/serde-rs/json/issues/70
2323
0
    pub fn byte_offset(&self) -> usize {
2324
0
        self.offset
2325
0
    }
2326
2327
0
    fn peek_end_of_value(&mut self) -> Result<()> {
2328
0
        match tri!(self.de.peek()) {
2329
            Some(b' ') | Some(b'\n') | Some(b'\t') | Some(b'\r') | Some(b'"') | Some(b'[')
2330
0
            | Some(b']') | Some(b'{') | Some(b'}') | Some(b',') | Some(b':') | None => Ok(()),
2331
            Some(_) => {
2332
0
                let position = self.de.read.peek_position();
2333
0
                Err(Error::syntax(
2334
0
                    ErrorCode::TrailingCharacters,
2335
0
                    position.line,
2336
0
                    position.column,
2337
0
                ))
2338
            }
2339
        }
2340
0
    }
2341
}
2342
2343
impl<'de, R, T> Iterator for StreamDeserializer<'de, R, T>
2344
where
2345
    R: Read<'de>,
2346
    T: de::Deserialize<'de>,
2347
{
2348
    type Item = Result<T>;
2349
2350
0
    fn next(&mut self) -> Option<Result<T>> {
2351
0
        if R::should_early_return_if_failed && self.failed {
2352
0
            return None;
2353
0
        }
2354
2355
        // skip whitespaces, if any
2356
        // this helps with trailing whitespaces, since whitespaces between
2357
        // values are handled for us.
2358
0
        match self.de.parse_whitespace() {
2359
            Ok(None) => {
2360
0
                self.offset = self.de.read.byte_offset();
2361
0
                None
2362
            }
2363
0
            Ok(Some(b)) => {
2364
                // If the value does not have a clear way to show the end of the value
2365
                // (like numbers, null, true etc.) we have to look for whitespace or
2366
                // the beginning of a self-delineated value.
2367
0
                let self_delineated_value = match b {
2368
0
                    b'[' | b'"' | b'{' => true,
2369
0
                    _ => false,
2370
                };
2371
0
                self.offset = self.de.read.byte_offset();
2372
0
                let result = de::Deserialize::deserialize(&mut self.de);
2373
2374
0
                Some(match result {
2375
0
                    Ok(value) => {
2376
0
                        self.offset = self.de.read.byte_offset();
2377
0
                        if self_delineated_value {
2378
0
                            Ok(value)
2379
                        } else {
2380
0
                            self.peek_end_of_value().map(|_| value)
2381
                        }
2382
                    }
2383
0
                    Err(e) => {
2384
0
                        self.de.read.set_failed(&mut self.failed);
2385
0
                        Err(e)
2386
                    }
2387
                })
2388
            }
2389
0
            Err(e) => {
2390
0
                self.de.read.set_failed(&mut self.failed);
2391
0
                Some(Err(e))
2392
            }
2393
        }
2394
0
    }
2395
}
2396
2397
impl<'de, R, T> FusedIterator for StreamDeserializer<'de, R, T>
2398
where
2399
    R: Read<'de> + Fused,
2400
    T: de::Deserialize<'de>,
2401
{
2402
}
2403
2404
//////////////////////////////////////////////////////////////////////////////
2405
2406
0
fn from_trait<'de, R, T>(read: R) -> Result<T>
2407
0
where
2408
0
    R: Read<'de>,
2409
0
    T: de::Deserialize<'de>,
2410
{
2411
0
    let mut de = Deserializer::new(read);
2412
0
    let value = tri!(de::Deserialize::deserialize(&mut de));
2413
2414
    // Make sure the whole stream has been consumed.
2415
0
    tri!(de.end());
2416
0
    Ok(value)
2417
0
}
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::StrRead, serde_json::value::Value>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::StrRead, devices::virtio::input::InputConfigFile>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, devices::UnpinRequest>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, vm_control::VmIrqResponse>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, vm_control::BatControlCommand>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, vm_control::DiskControlCommand>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, vm_control::FsAllowlistCommand>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, vm_control::VirtioIOMMURequest>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, vm_control::DeviceControlCommand>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, devices::proxy::CommandResult>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, devices::virtio::resource_bridge::ResourceResponse>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, vm_control::sys::linux::VmMemoryMappingResponse>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, devices::virtio::iommu::ipc_memory_mapper::IommuRequest>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, devices::virtio::iommu::ipc_memory_mapper::IommuResponse>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, devices::virtio::vhost::control_socket::VhostDevRequest>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, devices::virtio::vhost::control_socket::VhostDevResponse>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, u32>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, ()>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, alloc::vec::Vec<vm_control::VmMemoryFileMapping>>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, vm_control::VmResponse>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, vm_control::VmMemoryResponse>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, vm_control::DiskControlResult>
Unexecuted instantiation: serde_json::de::from_trait::<serde_json::read::SliceRead, vm_control::VirtioIOMMUResponse>
2418
2419
/// Deserialize an instance of type `T` from an IO stream of JSON.
2420
///
2421
/// The content of the IO stream is deserialized directly from the stream
2422
/// without being buffered in memory by serde_json.
2423
///
2424
/// When reading from a source against which short reads are not efficient, such
2425
/// as a [`File`], you will want to apply your own buffering because serde_json
2426
/// will not buffer the input. See [`std::io::BufReader`].
2427
///
2428
/// It is expected that the input stream ends after the deserialized object.
2429
/// If the stream does not end, such as in the case of a persistent socket connection,
2430
/// this function will not return. It is possible instead to deserialize from a prefix of an input
2431
/// stream without looking for EOF by managing your own [`Deserializer`].
2432
///
2433
/// Note that counter to intuition, this function is usually slower than
2434
/// reading a file completely into memory and then applying [`from_str`]
2435
/// or [`from_slice`] on it. See [issue #160].
2436
///
2437
/// [`File`]: https://doc.rust-lang.org/std/fs/struct.File.html
2438
/// [`std::io::BufReader`]: https://doc.rust-lang.org/std/io/struct.BufReader.html
2439
/// [`from_str`]: ./fn.from_str.html
2440
/// [`from_slice`]: ./fn.from_slice.html
2441
/// [issue #160]: https://github.com/serde-rs/json/issues/160
2442
///
2443
/// # Example
2444
///
2445
/// Reading the contents of a file.
2446
///
2447
/// ```
2448
/// use serde::Deserialize;
2449
///
2450
/// use std::error::Error;
2451
/// use std::fs::File;
2452
/// use std::io::BufReader;
2453
/// use std::path::Path;
2454
///
2455
/// #[derive(Deserialize, Debug)]
2456
/// struct User {
2457
///     fingerprint: String,
2458
///     location: String,
2459
/// }
2460
///
2461
/// fn read_user_from_file<P: AsRef<Path>>(path: P) -> Result<User, Box<dyn Error>> {
2462
///     // Open the file in read-only mode with buffer.
2463
///     let file = File::open(path)?;
2464
///     let reader = BufReader::new(file);
2465
///
2466
///     // Read the JSON contents of the file as an instance of `User`.
2467
///     let u = serde_json::from_reader(reader)?;
2468
///
2469
///     // Return the `User`.
2470
///     Ok(u)
2471
/// }
2472
///
2473
/// fn main() {
2474
/// # }
2475
/// # fn fake_main() {
2476
///     let u = read_user_from_file("test.json").unwrap();
2477
///     println!("{:#?}", u);
2478
/// }
2479
/// ```
2480
///
2481
/// Reading from a persistent socket connection.
2482
///
2483
/// ```
2484
/// use serde::Deserialize;
2485
///
2486
/// use std::error::Error;
2487
/// use std::net::{TcpListener, TcpStream};
2488
///
2489
/// #[derive(Deserialize, Debug)]
2490
/// struct User {
2491
///     fingerprint: String,
2492
///     location: String,
2493
/// }
2494
///
2495
/// fn read_user_from_stream(tcp_stream: TcpStream) -> Result<User, Box<dyn Error>> {
2496
///     let mut de = serde_json::Deserializer::from_reader(tcp_stream);
2497
///     let u = User::deserialize(&mut de)?;
2498
///
2499
///     Ok(u)
2500
/// }
2501
///
2502
/// fn main() {
2503
/// # }
2504
/// # fn fake_main() {
2505
///     let listener = TcpListener::bind("127.0.0.1:4000").unwrap();
2506
///
2507
///     for stream in listener.incoming() {
2508
///         println!("{:#?}", read_user_from_stream(stream.unwrap()));
2509
///     }
2510
/// }
2511
/// ```
2512
///
2513
/// # Errors
2514
///
2515
/// This conversion can fail if the structure of the input does not match the
2516
/// structure expected by `T`, for example if `T` is a struct type but the input
2517
/// contains something other than a JSON map. It can also fail if the structure
2518
/// is correct but `T`'s implementation of `Deserialize` decides that something
2519
/// is wrong with the data, for example required struct fields are missing from
2520
/// the JSON map or some number is too big to fit in the expected primitive
2521
/// type.
2522
#[cfg(feature = "std")]
2523
#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
2524
0
pub fn from_reader<R, T>(rdr: R) -> Result<T>
2525
0
where
2526
0
    R: crate::io::Read,
2527
0
    T: de::DeserializeOwned,
2528
{
2529
0
    from_trait(read::IoRead::new(rdr))
2530
0
}
2531
2532
/// Deserialize an instance of type `T` from bytes of JSON text.
2533
///
2534
/// # Example
2535
///
2536
/// ```
2537
/// use serde::Deserialize;
2538
///
2539
/// #[derive(Deserialize, Debug)]
2540
/// struct User {
2541
///     fingerprint: String,
2542
///     location: String,
2543
/// }
2544
///
2545
/// fn main() {
2546
///     // The type of `j` is `&[u8]`
2547
///     let j = b"
2548
///         {
2549
///             \"fingerprint\": \"0xF9BA143B95FF6D82\",
2550
///             \"location\": \"Menlo Park, CA\"
2551
///         }";
2552
///
2553
///     let u: User = serde_json::from_slice(j).unwrap();
2554
///     println!("{:#?}", u);
2555
/// }
2556
/// ```
2557
///
2558
/// # Errors
2559
///
2560
/// This conversion can fail if the structure of the input does not match the
2561
/// structure expected by `T`, for example if `T` is a struct type but the input
2562
/// contains something other than a JSON map. It can also fail if the structure
2563
/// is correct but `T`'s implementation of `Deserialize` decides that something
2564
/// is wrong with the data, for example required struct fields are missing from
2565
/// the JSON map or some number is too big to fit in the expected primitive
2566
/// type.
2567
0
pub fn from_slice<'a, T>(v: &'a [u8]) -> Result<T>
2568
0
where
2569
0
    T: de::Deserialize<'a>,
2570
{
2571
0
    from_trait(read::SliceRead::new(v))
2572
0
}
Unexecuted instantiation: serde_json::de::from_slice::<_>
Unexecuted instantiation: serde_json::de::from_slice::<devices::UnpinRequest>
Unexecuted instantiation: serde_json::de::from_slice::<vm_control::VmIrqResponse>
Unexecuted instantiation: serde_json::de::from_slice::<vm_control::BatControlCommand>
Unexecuted instantiation: serde_json::de::from_slice::<vm_control::DiskControlCommand>
Unexecuted instantiation: serde_json::de::from_slice::<vm_control::FsAllowlistCommand>
Unexecuted instantiation: serde_json::de::from_slice::<vm_control::VirtioIOMMURequest>
Unexecuted instantiation: serde_json::de::from_slice::<vm_control::DeviceControlCommand>
Unexecuted instantiation: serde_json::de::from_slice::<devices::proxy::CommandResult>
Unexecuted instantiation: serde_json::de::from_slice::<devices::virtio::resource_bridge::ResourceResponse>
Unexecuted instantiation: serde_json::de::from_slice::<vm_control::sys::linux::VmMemoryMappingResponse>
Unexecuted instantiation: serde_json::de::from_slice::<devices::virtio::iommu::ipc_memory_mapper::IommuRequest>
Unexecuted instantiation: serde_json::de::from_slice::<devices::virtio::iommu::ipc_memory_mapper::IommuResponse>
Unexecuted instantiation: serde_json::de::from_slice::<devices::virtio::vhost::control_socket::VhostDevRequest>
Unexecuted instantiation: serde_json::de::from_slice::<devices::virtio::vhost::control_socket::VhostDevResponse>
Unexecuted instantiation: serde_json::de::from_slice::<u32>
Unexecuted instantiation: serde_json::de::from_slice::<()>
Unexecuted instantiation: serde_json::de::from_slice::<alloc::vec::Vec<vm_control::VmMemoryFileMapping>>
Unexecuted instantiation: serde_json::de::from_slice::<vm_control::VmResponse>
Unexecuted instantiation: serde_json::de::from_slice::<vm_control::VmMemoryResponse>
Unexecuted instantiation: serde_json::de::from_slice::<vm_control::DiskControlResult>
Unexecuted instantiation: serde_json::de::from_slice::<vm_control::VirtioIOMMUResponse>
2573
2574
/// Deserialize an instance of type `T` from a string of JSON text.
2575
///
2576
/// # Example
2577
///
2578
/// ```
2579
/// use serde::Deserialize;
2580
///
2581
/// #[derive(Deserialize, Debug)]
2582
/// struct User {
2583
///     fingerprint: String,
2584
///     location: String,
2585
/// }
2586
///
2587
/// fn main() {
2588
///     // The type of `j` is `&str`
2589
///     let j = "
2590
///         {
2591
///             \"fingerprint\": \"0xF9BA143B95FF6D82\",
2592
///             \"location\": \"Menlo Park, CA\"
2593
///         }";
2594
///
2595
///     let u: User = serde_json::from_str(j).unwrap();
2596
///     println!("{:#?}", u);
2597
/// }
2598
/// ```
2599
///
2600
/// # Errors
2601
///
2602
/// This conversion can fail if the structure of the input does not match the
2603
/// structure expected by `T`, for example if `T` is a struct type but the input
2604
/// contains something other than a JSON map. It can also fail if the structure
2605
/// is correct but `T`'s implementation of `Deserialize` decides that something
2606
/// is wrong with the data, for example required struct fields are missing from
2607
/// the JSON map or some number is too big to fit in the expected primitive
2608
/// type.
2609
0
pub fn from_str<'a, T>(s: &'a str) -> Result<T>
2610
0
where
2611
0
    T: de::Deserialize<'a>,
2612
{
2613
0
    from_trait(read::StrRead::new(s))
2614
0
}
Unexecuted instantiation: serde_json::de::from_str::<serde_json::value::Value>
Unexecuted instantiation: serde_json::de::from_str::<devices::virtio::input::InputConfigFile>