]>
git.proxmox.com Git - rustc.git/blob - vendor/toml_edit/src/de/spanned.rs
1 use serde
::de
::value
::BorrowedStrDeserializer
;
2 use serde
::de
::IntoDeserializer
as _
;
6 pub(crate) struct SpannedDeserializer
<'de
, T
: serde
::de
::IntoDeserializer
<'de
, Error
>> {
7 phantom_data
: std
::marker
::PhantomData
<&'
de ()>,
13 impl<'de
, T
> SpannedDeserializer
<'de
, T
>
15 T
: serde
::de
::IntoDeserializer
<'de
, Error
>,
17 pub(crate) fn new(value
: T
, span
: std
::ops
::Range
<usize>) -> Self {
19 phantom_data
: Default
::default(),
20 start
: Some(span
.start
),
27 impl<'de
, T
> serde
::de
::MapAccess
<'de
> for SpannedDeserializer
<'de
, T
>
29 T
: serde
::de
::IntoDeserializer
<'de
, Error
>,
32 fn next_key_seed
<K
>(&mut self, seed
: K
) -> Result
<Option
<K
::Value
>, Error
>
34 K
: serde
::de
::DeserializeSeed
<'de
>,
36 if self.start
.is_some() {
37 seed
.deserialize(BorrowedStrDeserializer
::new(
38 serde_spanned
::__unstable
::START_FIELD
,
41 } else if self.end
.is_some() {
42 seed
.deserialize(BorrowedStrDeserializer
::new(
43 serde_spanned
::__unstable
::END_FIELD
,
46 } else if self.value
.is_some() {
47 seed
.deserialize(BorrowedStrDeserializer
::new(
48 serde_spanned
::__unstable
::VALUE_FIELD
,
56 fn next_value_seed
<V
>(&mut self, seed
: V
) -> Result
<V
::Value
, Error
>
58 V
: serde
::de
::DeserializeSeed
<'de
>,
60 if let Some(start
) = self.start
.take() {
61 seed
.deserialize(start
.into_deserializer())
62 } else if let Some(end
) = self.end
.take() {
63 seed
.deserialize(end
.into_deserializer())
64 } else if let Some(value
) = self.value
.take() {
65 seed
.deserialize(value
.into_deserializer())
67 panic
!("next_value_seed called before next_key_seed")