Module miniserde::ser[][src]

Serialization traits.

Serialization in miniserde works by traversing an input object and decomposing it iteratively into a stream of fragments.

Serializing a primitive

use miniserde::ser::{Fragment, Serialize};

// The data structure that we want to serialize as a primitive.
struct MyBoolean(bool);

impl Serialize for MyBoolean {
    fn begin(&self) -> Fragment {
        Fragment::Bool(self.0)
    }
}

Serializing a sequence

use miniserde::ser::{Fragment, Seq, Serialize};

// Some custom sequence type that we want to serialize.
struct MyVec<T>(Vec<T>);

impl<T: Serialize> Serialize for MyVec<T> {
    fn begin(&self) -> Fragment {
        Fragment::Seq(Box::new(SliceStream { iter: self.0.iter() }))
    }
}

struct SliceStream<'a, T: 'a> {
    iter: std::slice::Iter<'a, T>,
}

impl<'a, T: Serialize> Seq for SliceStream<'a, T> {
    fn next(&mut self) -> Option<&Serialize> {
        let element = self.iter.next()?;
        Some(element)
    }
}

Serializing a map or struct

This code demonstrates what is generated for structs by #[derive(MiniSerialize)].

use miniserde::ser::{Fragment, Map, Serialize};
use std::borrow::Cow;

// The struct that we would like to serialize.
struct Demo {
    code: u32,
    message: String,
}

impl Serialize for Demo {
    fn begin(&self) -> Fragment {
        Fragment::Map(Box::new(DemoStream {
            data: self,
            state: 0,
        }))
    }
}

struct DemoStream<'a> {
    data: &'a Demo,
    state: usize,
}

impl<'a> Map for DemoStream<'a> {
    fn next(&mut self) -> Option<(Cow<str>, &Serialize)> {
        let state = self.state;
        self.state += 1;
        match state {
            0 => Some((Cow::Borrowed("code"), &self.data.code)),
            1 => Some((Cow::Borrowed("message"), &self.data.message)),
            _ => None,
        }
    }
}

Enums

Fragment

One unit of output produced during serialization.

Traits

Map

Trait that can iterate key-value entries of a map or struct.

Seq

Trait that can iterate elements of a sequence.

Serialize

Trait for data structures that can be serialized to a JSON string.