use postcard::{Deserializer, Serializer, de_flavors, ser_flavors};
use crate::{IntoKeys, SerdeError, TreeDeserialize, TreeSerialize};
pub fn set_by_key<'de, F: de_flavors::Flavor<'de>>(
tree: &mut (impl TreeDeserialize<'de> + ?Sized),
keys: impl IntoKeys,
flavor: F,
) -> Result<F::Remainder, SerdeError<postcard::Error>> {
let mut de = Deserializer::from_flavor(flavor);
tree.deserialize_by_key(keys.into_keys(), &mut de)?;
de.finalize().map_err(SerdeError::Finalization)
}
pub fn get_by_key<F: ser_flavors::Flavor>(
tree: &(impl TreeSerialize + ?Sized),
keys: impl IntoKeys,
flavor: F,
) -> Result<F::Output, SerdeError<postcard::Error>> {
let mut ser = Serializer { output: flavor };
tree.serialize_by_key(keys.into_keys(), &mut ser)?;
ser.output.finalize().map_err(SerdeError::Finalization)
}