Trait miniconf::Postcard

source ·
pub trait Postcard<'de, const Y: usize = 1>: TreeSerialize<Y> + TreeDeserialize<'de, Y> {
    // Required methods
    fn set_postcard_by_key<K: IntoKeys, F: Flavor<'de>>(
        &mut self,
        keys: K,
        flavor: F
    ) -> Result<F::Remainder, Error<Error>>;
    fn get_postcard_by_key<K: IntoKeys, F: Flavor>(
        &self,
        keys: K,
        flavor: F
    ) -> Result<F::Output, Error<Error>>;
}
Expand description

TreeSerialize/TreeDeserialize with postcard.

use miniconf::{Tree, TreeKey, Postcard, Packed};
use postcard::{ser_flavors::AllocVec, de_flavors::Slice};

#[derive(Tree, Default, PartialEq, Debug)]
struct S {
    foo: u32,
    #[tree(depth=1)]
    bar: [u16; 2],
};

let source = S { foo: 9, bar: [7, 11] };
let kv: Vec<_> = S::iter_packed().map(|p| {
    let p = p.unwrap();
    let v = source.get_postcard_by_key(p, AllocVec::new()).unwrap();
    (p.into_lsb().get(), v)
}).collect();
assert_eq!(kv, [(2, vec![9]), (6, vec![7]), (7, vec![11])]);

let mut target = S::default();
for (k, v) in kv {
    let p = Packed::from_lsb(k.try_into().unwrap());
    target.set_postcard_by_key(p, Slice::new(&v[..])).unwrap();
}
assert_eq!(source, target);

Required Methods§

source

fn set_postcard_by_key<K: IntoKeys, F: Flavor<'de>>( &mut self, keys: K, flavor: F ) -> Result<F::Remainder, Error<Error>>

Deserialize and set a node value from a postcard flavor.

source

fn get_postcard_by_key<K: IntoKeys, F: Flavor>( &self, keys: K, flavor: F ) -> Result<F::Output, Error<Error>>

Get and serialize a node value into a postcard flavor.

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<'de, T: TreeSerialize<Y> + TreeDeserialize<'de, Y> + ?Sized, const Y: usize> Postcard<'de, Y> for T