Trait cov::intern::SerializeWithInterner
[−]
[src]
pub trait SerializeWithInterner { fn serialize_with_interner<S: Serializer>(
&self,
serializer: S,
interner: &Interner
) -> Result<S::Ok, S::Error>; fn with_interner<'si>(
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self> { ... } }
A data structure that may contain Symbol
s, which should be serialized as strings.
Required Methods
fn serialize_with_interner<S: Serializer>(
&self,
serializer: S,
interner: &Interner
) -> Result<S::Ok, S::Error>
&self,
serializer: S,
interner: &Interner
) -> Result<S::Ok, S::Error>
Serializes this value with help from an Interner
that writes Symbol
s as strings.
If any member of this type is expected to contain a Symbol
, they should be wrapped using with_interner()
,
so that deeply nested Symbol
s can be recursively found and transformed.
Examples
extern crate cov; extern crate serde; extern crate serde_json; use cov::{Symbol, Interner, SerializeWithInterner}; use serde::ser::{Serializer, SerializeStruct}; struct SymbolCounters { symbols: Vec<Symbol>, counters: Vec<u32>, } impl SerializeWithInterner for SymbolCounters { fn serialize_with_interner<S: Serializer>( &self, serializer: S, interner: &Interner ) -> Result<S::Ok, S::Error> { let mut state = serializer.serialize_struct("SymbolCounters", 2)?; state.serialize_field("symbols", &self.symbols.with_interner(interner))?; // ^ note the use of `with_interner()`, since a Vec<Symbol> contains Symbol. state.serialize_field("counters", &self.counters)?; // ^ no need to call `with_interner()` for irrelevant types. state.end() } } // ... let mut interner = Interner::new(); let s1 = interner.intern("one"); let s2 = interner.intern("two"); let symbol_counters = SymbolCounters { symbols: vec![s1, s2], counters: vec![45, 67], }; let serialized = serde_json::to_string(&symbol_counters.with_interner(&interner))?; assert_eq!(&serialized, r#"{"symbols":["one","two"],"counters":[45,67]}"#);
Provided Methods
fn with_interner<'si>(
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
Adorns this object with a string interner.
Returns a serializable object which writes out Symbol
s as strings instead of numbers.
Implementations on Foreign Types
impl<K: SerializeWithInterner + Ord, V: SerializeWithInterner> SerializeWithInterner for BTreeMap<K, V>
[src]
fn serialize_with_interner<S: Serializer>(
&self,
serializer: S,
interner: &Interner
) -> Result<S::Ok, S::Error>
[src]
&self,
serializer: S,
interner: &Interner
) -> Result<S::Ok, S::Error>
fn with_interner<'si>(
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
[src]
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
impl<K: SerializeWithInterner + Eq + Hash, V: SerializeWithInterner> SerializeWithInterner for HashMap<K, V>
[src]
fn serialize_with_interner<S: Serializer>(
&self,
serializer: S,
interner: &Interner
) -> Result<S::Ok, S::Error>
[src]
&self,
serializer: S,
interner: &Interner
) -> Result<S::Ok, S::Error>
fn with_interner<'si>(
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
[src]
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
impl<T: SerializeWithInterner> SerializeWithInterner for Vec<T>
[src]
fn serialize_with_interner<S: Serializer>(
&self,
serializer: S,
interner: &Interner
) -> Result<S::Ok, S::Error>
[src]
&self,
serializer: S,
interner: &Interner
) -> Result<S::Ok, S::Error>
fn with_interner<'si>(
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
[src]
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
impl<T: SerializeWithInterner> SerializeWithInterner for Option<T>
[src]
fn serialize_with_interner<S: Serializer>(
&self,
serializer: S,
interner: &Interner
) -> Result<S::Ok, S::Error>
[src]
&self,
serializer: S,
interner: &Interner
) -> Result<S::Ok, S::Error>
fn with_interner<'si>(
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
[src]
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
impl<'a, T: 'a + SerializeWithInterner + ?Sized> SerializeWithInterner for &'a T
[src]
fn serialize_with_interner<S: Serializer>(
&self,
serializer: S,
interner: &Interner
) -> Result<S::Ok, S::Error>
[src]
&self,
serializer: S,
interner: &Interner
) -> Result<S::Ok, S::Error>
fn with_interner<'si>(
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
[src]
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
impl SerializeWithInterner for u32
[src]
fn serialize_with_interner<S: Serializer>(
&self,
serializer: S,
_: &Interner
) -> Result<S::Ok, S::Error>
[src]
&self,
serializer: S,
_: &Interner
) -> Result<S::Ok, S::Error>
fn with_interner<'si>(
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
[src]
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
impl SerializeWithInterner for u64
[src]
fn serialize_with_interner<S: Serializer>(
&self,
serializer: S,
_: &Interner
) -> Result<S::Ok, S::Error>
[src]
&self,
serializer: S,
_: &Interner
) -> Result<S::Ok, S::Error>
fn with_interner<'si>(
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
[src]
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
impl SerializeWithInterner for usize
[src]
fn serialize_with_interner<S: Serializer>(
&self,
serializer: S,
_: &Interner
) -> Result<S::Ok, S::Error>
[src]
&self,
serializer: S,
_: &Interner
) -> Result<S::Ok, S::Error>
fn with_interner<'si>(
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
[src]
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
impl SerializeWithInterner for PathBuf
[src]
fn serialize_with_interner<S: Serializer>(
&self,
serializer: S,
_: &Interner
) -> Result<S::Ok, S::Error>
[src]
&self,
serializer: S,
_: &Interner
) -> Result<S::Ok, S::Error>
fn with_interner<'si>(
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
[src]
&self,
interner: &'si Interner
) -> WithInterner<'si, &Self>
Implementors
impl SerializeWithInterner for Symbol
impl SerializeWithInterner for Gcov
impl SerializeWithInterner for Record
impl SerializeWithInterner for cov::raw::Function
impl SerializeWithInterner for Source
impl SerializeWithInterner for Lines
impl SerializeWithInterner for cov::raw::Line
impl SerializeWithInterner for Type
impl SerializeWithInterner for Tag
impl SerializeWithInterner for Version
impl SerializeWithInterner for Ident
impl SerializeWithInterner for BlockAttr
impl SerializeWithInterner for ArcAttr
impl SerializeWithInterner for Blocks
impl SerializeWithInterner for BlockIndex
impl SerializeWithInterner for Arcs
impl SerializeWithInterner for ArcCounts
impl SerializeWithInterner for Summary
impl SerializeWithInterner for Report
impl SerializeWithInterner for File
impl SerializeWithInterner for cov::report::Line
impl SerializeWithInterner for Branch
impl SerializeWithInterner for cov::report::Function
impl SerializeWithInterner for FunctionSummary
impl SerializeWithInterner for FileSummary