[][src]Trait erased_serde::Deserializer

pub trait Deserializer<'de> {
    fn erased_deserialize_any(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_bool(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_u8(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_u16(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_u32(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_u64(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_i8(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_i16(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_i32(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_i64(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_i128(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_u128(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_f32(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_f64(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_char(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_str(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_string(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_bytes(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_byte_buf(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_option(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_unit(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_unit_struct(
        &mut self,
        name: &'static str,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_newtype_struct(
        &mut self,
        name: &'static str,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_seq(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_tuple(
        &mut self,
        len: usize,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_tuple_struct(
        &mut self,
        name: &'static str,
        len: usize,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_map(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_struct(
        &mut self,
        name: &'static str,
        fields: &'static [&'static str],
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_identifier(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_enum(
        &mut self,
        name: &'static str,
        variants: &'static [&'static str],
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_deserialize_ignored_any(
        &mut self,
        _: &mut dyn Visitor<'de>
    ) -> Result<Out, Error>;
fn erased_is_human_readable(&self) -> bool; }

An object-safe equivalent of Serde's Deserializer trait.

Any implementation of Serde's Deserializer can be converted to an &erased_serde::Deserializer or Box<erased_serde::Deserializer> trait object using erased_serde::Deserializer::erase.

extern crate erased_serde;
extern crate serde_json;
extern crate serde_cbor;

use std::collections::BTreeMap as Map;

use erased_serde::Deserializer;

fn main() {
    static JSON: &'static [u8] = br#"{"A": 65, "B": 66}"#;
    static CBOR: &'static [u8] = &[162, 97, 65, 24, 65, 97, 66, 24, 66];

    // Construct some deserializers.
    let json = &mut serde_json::de::Deserializer::from_slice(JSON);
    let cbor = &mut serde_cbor::de::Deserializer::from_slice(CBOR);

    // The values in this map are boxed trait objects, which is not possible
    // with the normal serde::Deserializer because of object safety.
    let mut formats: Map<&str, Box<Deserializer>> = Map::new();
    formats.insert("json", Box::new(Deserializer::erase(json)));
    formats.insert("cbor", Box::new(Deserializer::erase(cbor)));

    // Pick a Deserializer out of the formats map.
    let format = formats.get_mut("json").unwrap();

    let data: Map<String, usize> = erased_serde::deserialize(format).unwrap();

    println!("{}", data["A"] + data["B"]);
}

Required methods

fn erased_deserialize_any(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_bool(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_u8(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_u16(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_u32(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_u64(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_i8(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_i16(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_i32(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_i64(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_i128(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_u128(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_f32(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_f64(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_char(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_str(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_string(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_bytes(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_byte_buf(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_option(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_unit(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_unit_struct(
    &mut self,
    name: &'static str,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_newtype_struct(
    &mut self,
    name: &'static str,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_seq(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_tuple(
    &mut self,
    len: usize,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_tuple_struct(
    &mut self,
    name: &'static str,
    len: usize,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_map(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_struct(
    &mut self,
    name: &'static str,
    fields: &'static [&'static str],
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_identifier(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_enum(
    &mut self,
    name: &'static str,
    variants: &'static [&'static str],
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_deserialize_ignored_any(
    &mut self,
    _: &mut dyn Visitor<'de>
) -> Result<Out, Error>

fn erased_is_human_readable(&self) -> bool

Loading content...

Methods

impl<'de> dyn Deserializer<'de>[src]

pub fn erase<D>(deserializer: D) -> Deserializer<D> where
    D: Deserializer<'de>, 
[src]

Convert any Serde Deserializer to a trait object.

extern crate erased_serde;
extern crate serde_json;
extern crate serde_cbor;

use std::collections::BTreeMap as Map;

use erased_serde::Deserializer;

fn main() {
    static JSON: &'static [u8] = br#"{"A": 65, "B": 66}"#;
    static CBOR: &'static [u8] = &[162, 97, 65, 24, 65, 97, 66, 24, 66];

    // Construct some deserializers.
    let json = &mut serde_json::de::Deserializer::from_slice(JSON);
    let cbor = &mut serde_cbor::de::Deserializer::from_slice(CBOR);

    // The values in this map are boxed trait objects, which is not possible
    // with the normal serde::Deserializer because of object safety.
    let mut formats: Map<&str, Box<Deserializer>> = Map::new();
    formats.insert("json", Box::new(Deserializer::erase(json)));
    formats.insert("cbor", Box::new(Deserializer::erase(cbor)));

    // Pick a Deserializer out of the formats map.
    let format = formats.get_mut("json").unwrap();

    let data: Map<String, usize> = erased_serde::deserialize(format).unwrap();

    println!("{}", data["A"] + data["B"]);
}

Trait Implementations

impl<'de, 'a> Deserializer<'de> for &'a mut dyn Deserializer<'de>[src]

type Error = Error

The error type that can be returned if some error occurs during deserialization. Read more

impl<'de, 'a> Deserializer<'de> for &'a mut (dyn Deserializer<'de> + Send)[src]

type Error = Error

The error type that can be returned if some error occurs during deserialization. Read more

impl<'de, 'a> Deserializer<'de> for &'a mut (dyn Deserializer<'de> + Sync)[src]

type Error = Error

The error type that can be returned if some error occurs during deserialization. Read more

impl<'de, 'a> Deserializer<'de> for &'a mut (dyn Deserializer<'de> + Send + Sync)[src]

type Error = Error

The error type that can be returned if some error occurs during deserialization. Read more

Implementations on Foreign Types

impl<'de, 'a> Deserializer<'de> for Box<dyn Deserializer<'de> + 'a>[src]

impl<'de, 'a> Deserializer<'de> for Box<dyn Deserializer<'de> + Send + 'a>[src]

impl<'de, 'a> Deserializer<'de> for Box<dyn Deserializer<'de> + Sync + 'a>[src]

impl<'de, 'a> Deserializer<'de> for Box<dyn Deserializer<'de> + Send + Sync + 'a>[src]

impl<'de, 'a, T: ?Sized + Deserializer<'de>> Deserializer<'de> for &'a mut T[src]

Loading content...

Implementors

Loading content...