Rename ValueDeserializer trait to IntoDeserializer
This commit is contained in:
parent
aed5a77540
commit
0d82bbf74f
@ -1658,6 +1658,17 @@ pub trait VariantVisitor<'de>: Sized {
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/// This trait converts primitive types into a deserializer.
|
||||||
|
pub trait IntoDeserializer<'de, E: Error = value::Error> {
|
||||||
|
/// The actual deserializer type.
|
||||||
|
type Deserializer: Deserializer<'de, Error = E>;
|
||||||
|
|
||||||
|
/// Convert this value into a deserializer.
|
||||||
|
fn into_deserializer(self) -> Self::Deserializer;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
/// Used in error messages.
|
/// Used in error messages.
|
||||||
///
|
///
|
||||||
/// - expected `a`
|
/// - expected `a`
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
use lib::*;
|
use lib::*;
|
||||||
|
|
||||||
use de::{self, Expected, SeqVisitor};
|
use de::{self, IntoDeserializer, Expected, SeqVisitor};
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@ -50,18 +50,7 @@ impl error::Error for Error {
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
/// This trait converts primitive types into a deserializer.
|
impl<'de, E> IntoDeserializer<'de, E> for ()
|
||||||
pub trait ValueDeserializer<'de, E: de::Error = Error> {
|
|
||||||
/// The actual deserializer type.
|
|
||||||
type Deserializer: de::Deserializer<'de, Error = E>;
|
|
||||||
|
|
||||||
/// Convert this value into a deserializer.
|
|
||||||
fn into_deserializer(self) -> Self::Deserializer;
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
impl<'de, E> ValueDeserializer<'de, E> for ()
|
|
||||||
where E: de::Error
|
where E: de::Error
|
||||||
{
|
{
|
||||||
type Deserializer = UnitDeserializer<E>;
|
type Deserializer = UnitDeserializer<E>;
|
||||||
@ -110,7 +99,7 @@ macro_rules! primitive_deserializer {
|
|||||||
marker: PhantomData<E>
|
marker: PhantomData<E>
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'de, E> ValueDeserializer<'de, E> for $ty
|
impl<'de, E> IntoDeserializer<'de, E> for $ty
|
||||||
where E: de::Error,
|
where E: de::Error,
|
||||||
{
|
{
|
||||||
type Deserializer = $name<E>;
|
type Deserializer = $name<E>;
|
||||||
@ -163,7 +152,7 @@ pub struct U32Deserializer<E> {
|
|||||||
marker: PhantomData<E>,
|
marker: PhantomData<E>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'de, E> ValueDeserializer<'de, E> for u32
|
impl<'de, E> IntoDeserializer<'de, E> for u32
|
||||||
where E: de::Error
|
where E: de::Error
|
||||||
{
|
{
|
||||||
type Deserializer = U32Deserializer<E>;
|
type Deserializer = U32Deserializer<E>;
|
||||||
@ -225,7 +214,7 @@ pub struct StrDeserializer<'a, E> {
|
|||||||
marker: PhantomData<E>,
|
marker: PhantomData<E>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'de, 'a, E> ValueDeserializer<'de, E> for &'a str
|
impl<'de, 'a, E> IntoDeserializer<'de, E> for &'a str
|
||||||
where E: de::Error
|
where E: de::Error
|
||||||
{
|
{
|
||||||
type Deserializer = StrDeserializer<'a, E>;
|
type Deserializer = StrDeserializer<'a, E>;
|
||||||
@ -289,7 +278,7 @@ pub struct StringDeserializer<E> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(any(feature = "std", feature = "collections"))]
|
#[cfg(any(feature = "std", feature = "collections"))]
|
||||||
impl<'de, E> ValueDeserializer<'de, E> for String
|
impl<'de, E> IntoDeserializer<'de, E> for String
|
||||||
where E: de::Error
|
where E: de::Error
|
||||||
{
|
{
|
||||||
type Deserializer = StringDeserializer<E>;
|
type Deserializer = StringDeserializer<E>;
|
||||||
@ -355,7 +344,7 @@ pub struct CowStrDeserializer<'a, E> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(any(feature = "std", feature = "collections"))]
|
#[cfg(any(feature = "std", feature = "collections"))]
|
||||||
impl<'de, 'a, E> ValueDeserializer<'de, E> for Cow<'a, str>
|
impl<'de, 'a, E> IntoDeserializer<'de, E> for Cow<'a, str>
|
||||||
where E: de::Error
|
where E: de::Error
|
||||||
{
|
{
|
||||||
type Deserializer = CowStrDeserializer<'a, E>;
|
type Deserializer = CowStrDeserializer<'a, E>;
|
||||||
@ -455,7 +444,7 @@ impl<I, E> SeqDeserializer<I, E>
|
|||||||
|
|
||||||
impl<'de, I, T, E> de::Deserializer<'de> for SeqDeserializer<I, E>
|
impl<'de, I, T, E> de::Deserializer<'de> for SeqDeserializer<I, E>
|
||||||
where I: Iterator<Item = T>,
|
where I: Iterator<Item = T>,
|
||||||
T: ValueDeserializer<'de, E>,
|
T: IntoDeserializer<'de, E>,
|
||||||
E: de::Error
|
E: de::Error
|
||||||
{
|
{
|
||||||
type Error = E;
|
type Error = E;
|
||||||
@ -477,7 +466,7 @@ impl<'de, I, T, E> de::Deserializer<'de> for SeqDeserializer<I, E>
|
|||||||
|
|
||||||
impl<'de, I, T, E> de::SeqVisitor<'de> for SeqDeserializer<I, E>
|
impl<'de, I, T, E> de::SeqVisitor<'de> for SeqDeserializer<I, E>
|
||||||
where I: Iterator<Item = T>,
|
where I: Iterator<Item = T>,
|
||||||
T: ValueDeserializer<'de, E>,
|
T: IntoDeserializer<'de, E>,
|
||||||
E: de::Error
|
E: de::Error
|
||||||
{
|
{
|
||||||
type Error = E;
|
type Error = E;
|
||||||
@ -514,8 +503,8 @@ impl Expected for ExpectedInSeq {
|
|||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#[cfg(any(feature = "std", feature = "collections"))]
|
#[cfg(any(feature = "std", feature = "collections"))]
|
||||||
impl<'de, T, E> ValueDeserializer<'de, E> for Vec<T>
|
impl<'de, T, E> IntoDeserializer<'de, E> for Vec<T>
|
||||||
where T: ValueDeserializer<'de, E>,
|
where T: IntoDeserializer<'de, E>,
|
||||||
E: de::Error
|
E: de::Error
|
||||||
{
|
{
|
||||||
type Deserializer = SeqDeserializer<<Vec<T> as IntoIterator>::IntoIter, E>;
|
type Deserializer = SeqDeserializer<<Vec<T> as IntoIterator>::IntoIter, E>;
|
||||||
@ -526,8 +515,8 @@ impl<'de, T, E> ValueDeserializer<'de, E> for Vec<T>
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(any(feature = "std", feature = "collections"))]
|
#[cfg(any(feature = "std", feature = "collections"))]
|
||||||
impl<'de, T, E> ValueDeserializer<'de, E> for BTreeSet<T>
|
impl<'de, T, E> IntoDeserializer<'de, E> for BTreeSet<T>
|
||||||
where T: ValueDeserializer<'de, E> + Eq + Ord,
|
where T: IntoDeserializer<'de, E> + Eq + Ord,
|
||||||
E: de::Error
|
E: de::Error
|
||||||
{
|
{
|
||||||
type Deserializer = SeqDeserializer<<BTreeSet<T> as IntoIterator>::IntoIter, E>;
|
type Deserializer = SeqDeserializer<<BTreeSet<T> as IntoIterator>::IntoIter, E>;
|
||||||
@ -538,8 +527,8 @@ impl<'de, T, E> ValueDeserializer<'de, E> for BTreeSet<T>
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
impl<'de, T, E> ValueDeserializer<'de, E> for HashSet<T>
|
impl<'de, T, E> IntoDeserializer<'de, E> for HashSet<T>
|
||||||
where T: ValueDeserializer<'de, E> + Eq + Hash,
|
where T: IntoDeserializer<'de, E> + Eq + Hash,
|
||||||
E: de::Error
|
E: de::Error
|
||||||
{
|
{
|
||||||
type Deserializer = SeqDeserializer<<HashSet<T> as IntoIterator>::IntoIter, E>;
|
type Deserializer = SeqDeserializer<<HashSet<T> as IntoIterator>::IntoIter, E>;
|
||||||
@ -589,8 +578,8 @@ impl<'de, V_> de::Deserializer<'de> for SeqVisitorDeserializer<V_>
|
|||||||
pub struct MapDeserializer<'de, I, E>
|
pub struct MapDeserializer<'de, I, E>
|
||||||
where I: Iterator,
|
where I: Iterator,
|
||||||
I::Item: private::Pair,
|
I::Item: private::Pair,
|
||||||
<I::Item as private::Pair>::First: ValueDeserializer<'de, E>,
|
<I::Item as private::Pair>::First: IntoDeserializer<'de, E>,
|
||||||
<I::Item as private::Pair>::Second: ValueDeserializer<'de, E>,
|
<I::Item as private::Pair>::Second: IntoDeserializer<'de, E>,
|
||||||
E: de::Error
|
E: de::Error
|
||||||
{
|
{
|
||||||
iter: iter::Fuse<I>,
|
iter: iter::Fuse<I>,
|
||||||
@ -603,8 +592,8 @@ pub struct MapDeserializer<'de, I, E>
|
|||||||
impl<'de, I, E> MapDeserializer<'de, I, E>
|
impl<'de, I, E> MapDeserializer<'de, I, E>
|
||||||
where I: Iterator,
|
where I: Iterator,
|
||||||
I::Item: private::Pair,
|
I::Item: private::Pair,
|
||||||
<I::Item as private::Pair>::First: ValueDeserializer<'de, E>,
|
<I::Item as private::Pair>::First: IntoDeserializer<'de, E>,
|
||||||
<I::Item as private::Pair>::Second: ValueDeserializer<'de, E>,
|
<I::Item as private::Pair>::Second: IntoDeserializer<'de, E>,
|
||||||
E: de::Error
|
E: de::Error
|
||||||
{
|
{
|
||||||
/// Construct a new `MapDeserializer<I, K, V, E>`.
|
/// Construct a new `MapDeserializer<I, K, V, E>`.
|
||||||
@ -650,8 +639,8 @@ impl<'de, I, E> MapDeserializer<'de, I, E>
|
|||||||
impl<'de, I, E> de::Deserializer<'de> for MapDeserializer<'de, I, E>
|
impl<'de, I, E> de::Deserializer<'de> for MapDeserializer<'de, I, E>
|
||||||
where I: Iterator,
|
where I: Iterator,
|
||||||
I::Item: private::Pair,
|
I::Item: private::Pair,
|
||||||
<I::Item as private::Pair>::First: ValueDeserializer<'de, E>,
|
<I::Item as private::Pair>::First: IntoDeserializer<'de, E>,
|
||||||
<I::Item as private::Pair>::Second: ValueDeserializer<'de, E>,
|
<I::Item as private::Pair>::Second: IntoDeserializer<'de, E>,
|
||||||
E: de::Error
|
E: de::Error
|
||||||
{
|
{
|
||||||
type Error = E;
|
type Error = E;
|
||||||
@ -691,8 +680,8 @@ impl<'de, I, E> de::Deserializer<'de> for MapDeserializer<'de, I, E>
|
|||||||
impl<'de, I, E> de::MapVisitor<'de> for MapDeserializer<'de, I, E>
|
impl<'de, I, E> de::MapVisitor<'de> for MapDeserializer<'de, I, E>
|
||||||
where I: Iterator,
|
where I: Iterator,
|
||||||
I::Item: private::Pair,
|
I::Item: private::Pair,
|
||||||
<I::Item as private::Pair>::First: ValueDeserializer<'de, E>,
|
<I::Item as private::Pair>::First: IntoDeserializer<'de, E>,
|
||||||
<I::Item as private::Pair>::Second: ValueDeserializer<'de, E>,
|
<I::Item as private::Pair>::Second: IntoDeserializer<'de, E>,
|
||||||
E: de::Error
|
E: de::Error
|
||||||
{
|
{
|
||||||
type Error = E;
|
type Error = E;
|
||||||
@ -744,8 +733,8 @@ impl<'de, I, E> de::MapVisitor<'de> for MapDeserializer<'de, I, E>
|
|||||||
impl<'de, I, E> de::SeqVisitor<'de> for MapDeserializer<'de, I, E>
|
impl<'de, I, E> de::SeqVisitor<'de> for MapDeserializer<'de, I, E>
|
||||||
where I: Iterator,
|
where I: Iterator,
|
||||||
I::Item: private::Pair,
|
I::Item: private::Pair,
|
||||||
<I::Item as private::Pair>::First: ValueDeserializer<'de, E>,
|
<I::Item as private::Pair>::First: IntoDeserializer<'de, E>,
|
||||||
<I::Item as private::Pair>::Second: ValueDeserializer<'de, E>,
|
<I::Item as private::Pair>::Second: IntoDeserializer<'de, E>,
|
||||||
E: de::Error
|
E: de::Error
|
||||||
{
|
{
|
||||||
type Error = E;
|
type Error = E;
|
||||||
@ -772,8 +761,8 @@ impl<'de, I, E> de::SeqVisitor<'de> for MapDeserializer<'de, I, E>
|
|||||||
struct PairDeserializer<A, B, E>(A, B, PhantomData<E>);
|
struct PairDeserializer<A, B, E>(A, B, PhantomData<E>);
|
||||||
|
|
||||||
impl<'de, A, B, E> de::Deserializer<'de> for PairDeserializer<A, B, E>
|
impl<'de, A, B, E> de::Deserializer<'de> for PairDeserializer<A, B, E>
|
||||||
where A: ValueDeserializer<'de, E>,
|
where A: IntoDeserializer<'de, E>,
|
||||||
B: ValueDeserializer<'de, E>,
|
B: IntoDeserializer<'de, E>,
|
||||||
E: de::Error
|
E: de::Error
|
||||||
{
|
{
|
||||||
type Error = E;
|
type Error = E;
|
||||||
@ -821,8 +810,8 @@ impl<'de, A, B, E> de::Deserializer<'de> for PairDeserializer<A, B, E>
|
|||||||
struct PairVisitor<A, B, E>(Option<A>, Option<B>, PhantomData<E>);
|
struct PairVisitor<A, B, E>(Option<A>, Option<B>, PhantomData<E>);
|
||||||
|
|
||||||
impl<'de, A, B, E> de::SeqVisitor<'de> for PairVisitor<A, B, E>
|
impl<'de, A, B, E> de::SeqVisitor<'de> for PairVisitor<A, B, E>
|
||||||
where A: ValueDeserializer<'de, E>,
|
where A: IntoDeserializer<'de, E>,
|
||||||
B: ValueDeserializer<'de, E>,
|
B: IntoDeserializer<'de, E>,
|
||||||
E: de::Error
|
E: de::Error
|
||||||
{
|
{
|
||||||
type Error = E;
|
type Error = E;
|
||||||
@ -866,9 +855,9 @@ impl Expected for ExpectedInMap {
|
|||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#[cfg(any(feature = "std", feature = "collections"))]
|
#[cfg(any(feature = "std", feature = "collections"))]
|
||||||
impl<'de, K, V, E> ValueDeserializer<'de, E> for BTreeMap<K, V>
|
impl<'de, K, V, E> IntoDeserializer<'de, E> for BTreeMap<K, V>
|
||||||
where K: ValueDeserializer<'de, E> + Eq + Ord,
|
where K: IntoDeserializer<'de, E> + Eq + Ord,
|
||||||
V: ValueDeserializer<'de, E>,
|
V: IntoDeserializer<'de, E>,
|
||||||
E: de::Error
|
E: de::Error
|
||||||
{
|
{
|
||||||
type Deserializer = MapDeserializer<'de, <BTreeMap<K, V> as IntoIterator>::IntoIter, E>;
|
type Deserializer = MapDeserializer<'de, <BTreeMap<K, V> as IntoIterator>::IntoIter, E>;
|
||||||
@ -879,9 +868,9 @@ impl<'de, K, V, E> ValueDeserializer<'de, E> for BTreeMap<K, V>
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
impl<'de, K, V, E> ValueDeserializer<'de, E> for HashMap<K, V>
|
impl<'de, K, V, E> IntoDeserializer<'de, E> for HashMap<K, V>
|
||||||
where K: ValueDeserializer<'de, E> + Eq + Hash,
|
where K: IntoDeserializer<'de, E> + Eq + Hash,
|
||||||
V: ValueDeserializer<'de, E>,
|
V: IntoDeserializer<'de, E>,
|
||||||
E: de::Error
|
E: de::Error
|
||||||
{
|
{
|
||||||
type Deserializer = MapDeserializer<'de, <HashMap<K, V> as IntoIterator>::IntoIter, E>;
|
type Deserializer = MapDeserializer<'de, <HashMap<K, V> as IntoIterator>::IntoIter, E>;
|
||||||
|
@ -1410,7 +1410,7 @@ mod content {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'de, E> de::value::ValueDeserializer<'de, E> for ContentDeserializer<E>
|
impl<'de, E> de::IntoDeserializer<'de, E> for ContentDeserializer<E>
|
||||||
where E: de::Error
|
where E: de::Error
|
||||||
{
|
{
|
||||||
type Deserializer = Self;
|
type Deserializer = Self;
|
||||||
@ -1420,7 +1420,7 @@ mod content {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'de, 'a, E> de::value::ValueDeserializer<'de, E> for ContentRefDeserializer<'a, E>
|
impl<'de, 'a, E> de::IntoDeserializer<'de, E> for ContentRefDeserializer<'a, E>
|
||||||
where E: de::Error
|
where E: de::Error
|
||||||
{
|
{
|
||||||
type Deserializer = Self;
|
type Deserializer = Self;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use serde::de::{self, Deserialize, DeserializeSeed, EnumVisitor, MapVisitor, SeqVisitor,
|
use serde::de::{self, Deserialize, DeserializeSeed, EnumVisitor, IntoDeserializer,
|
||||||
VariantVisitor, Visitor};
|
MapVisitor, SeqVisitor, VariantVisitor, Visitor};
|
||||||
use serde::de::value::{ValueDeserializer, MapVisitorDeserializer, SeqVisitorDeserializer};
|
use serde::de::value::{MapVisitorDeserializer, SeqVisitorDeserializer};
|
||||||
|
|
||||||
use error::Error;
|
use error::Error;
|
||||||
use token::Token;
|
use token::Token;
|
||||||
|
@ -3,7 +3,7 @@ extern crate serde_derive;
|
|||||||
|
|
||||||
extern crate serde;
|
extern crate serde;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::de::value::{self, ValueDeserializer};
|
use serde::de::{value, IntoDeserializer};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_u32_to_enum() {
|
fn test_u32_to_enum() {
|
||||||
@ -13,7 +13,7 @@ fn test_u32_to_enum() {
|
|||||||
B,
|
B,
|
||||||
}
|
}
|
||||||
|
|
||||||
let deserializer = ValueDeserializer::<value::Error>::into_deserializer(1u32);
|
let deserializer = IntoDeserializer::<value::Error>::into_deserializer(1u32);
|
||||||
let e: E = E::deserialize(deserializer).unwrap();
|
let e: E = E::deserialize(deserializer).unwrap();
|
||||||
assert_eq!(E::B, e);
|
assert_eq!(E::B, e);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user