pub trait TreeDeserialize<'de>: TreeSchema {
// Required methods
fn deserialize_by_key<D: Deserializer<'de>>(
&mut self,
keys: impl Keys,
de: D,
) -> Result<(), SerdeError<D::Error>>;
fn probe_by_key<D: Deserializer<'de>>(
keys: impl Keys,
de: D,
) -> Result<(), SerdeError<D::Error>>;
}
Expand description
Deserialize a leaf node by its keys.
See also crate::json_core
or crate::postcard
for convenient wrappers using this trait.
§Derive macro
See crate::TreeDeserialize
.
The derive macro attributes are described in the TreeSchema
trait.
Required Methods§
Sourcefn deserialize_by_key<D: Deserializer<'de>>(
&mut self,
keys: impl Keys,
de: D,
) -> Result<(), SerdeError<D::Error>>
fn deserialize_by_key<D: Deserializer<'de>>( &mut self, keys: impl Keys, de: D, ) -> Result<(), SerdeError<D::Error>>
Deserialize a leaf node by its keys.
use miniconf::{IntoKeys, TreeDeserialize, TreeSchema};
#[derive(Default, TreeSchema, TreeDeserialize)]
struct S {
foo: u32,
bar: [u16; 2],
};
let mut s = S::default();
let mut de = serde_json::de::Deserializer::from_slice(b"7");
s.deserialize_by_key(["bar", "0"].into_keys(), &mut de).unwrap();
de.end().unwrap();
assert_eq!(s.bar[0], 7);
§Args
keys
: AKeys
identifying the node.de
: ADeserializer
to deserialize the value.
Sourcefn probe_by_key<D: Deserializer<'de>>(
keys: impl Keys,
de: D,
) -> Result<(), SerdeError<D::Error>>
fn probe_by_key<D: Deserializer<'de>>( keys: impl Keys, de: D, ) -> Result<(), SerdeError<D::Error>>
Blind deserialize a leaf node by its keys.
This method should succeed at least in those cases where
deserialize_by_key()
succeeds.
use miniconf::{IntoKeys, TreeDeserialize, TreeSchema};
#[derive(Default, TreeSchema, TreeDeserialize)]
struct S {
foo: u32,
bar: [u16; 2],
};
let mut de = serde_json::de::Deserializer::from_slice(b"7");
S::probe_by_key(["bar", "0"].into_keys(), &mut de)
.unwrap();
de.end().unwrap();
§Args
keys
: AKeys
identifying the node.de
: ADeserializer
to deserialize the value.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.