Function cov::deserializer::with_interner[][src]

pub fn with_interner<'de, D: Deserializer<'de>>(
    deserializer: D,
    interner: &RefCell<Interner>
) -> WithInterner<D>

Adorns a deserializer with a string interner.

The resulting deserializer will parse a string whenever a Symbol is expected.

Examples

extern crate cov;
extern crate serde;
extern crate serde_json;
use cov::{Interner, Symbol, deserializer_with_interner};
use serde::Deserialize;
use std::cell::RefCell;

// Prepare the JSON input.
let input = r#"["hello", "world", "hello", "everyone"]"#;
let mut json_de = serde_json::de::Deserializer::from_str(input);

// Include a string interner.
let interner = RefCell::new(Interner::new());
let de = deserializer_with_interner(&mut json_de, &interner);

// Deserialize the JSON into a vector of Symbols
let result = Vec::<Symbol>::deserialize(de)?;

// Compare with expected output.
let mut interner = interner.borrow_mut();
let hello = interner.intern("hello");
let world = interner.intern("world");
let everyone = interner.intern("everyone");
assert_eq!(result, vec![hello, world, hello, everyone]);