use serde_json_core::{de, ser};
use crate::{IntoKeys, Path, SerdeError, TreeDeserialize, TreeSerialize};
pub fn set<'de>(
tree: &mut (impl TreeDeserialize<'de> + ?Sized),
path: &str,
data: &'de [u8],
) -> Result<usize, SerdeError<de::Error>> {
set_by_key(tree, Path::<_, '/'>(path), data)
}
pub fn get(
tree: &(impl TreeSerialize + ?Sized),
path: &str,
data: &mut [u8],
) -> Result<usize, SerdeError<ser::Error>> {
get_by_key(tree, Path::<_, '/'>(path), data)
}
pub fn set_by_key<'de>(
tree: &mut (impl TreeDeserialize<'de> + ?Sized),
keys: impl IntoKeys,
data: &'de [u8],
) -> Result<usize, SerdeError<de::Error>> {
let mut de = de::Deserializer::new(data, None);
tree.deserialize_by_key(keys.into_keys(), &mut de)?;
de.end().map_err(SerdeError::Finalization)
}
pub fn get_by_key(
tree: &(impl TreeSerialize + ?Sized),
keys: impl IntoKeys,
data: &mut [u8],
) -> Result<usize, SerdeError<ser::Error>> {
let mut ser = ser::Serializer::new(data);
tree.serialize_by_key(keys.into_keys(), &mut ser)?;
Ok(ser.end())
}