pub struct Lazy<'de, F: ?Sized> { /* private fields */ }Expand description
Wrapper for lazy deserialization.
Lazy<F> deserializes data from formula F.
It can be used to deserialize value from formula F on demand.
Also allows to deserialize that one value in place.
If generic parameter is slice (Lazy<[F]>) a lazy iterator can be
obtained with Lazy::iter and
Lazy::sized_iter(requires sized formula) methods.
If value is never needed, consider using Skip instead.
Implementations§
source§impl<'de, F> Lazy<'de, F>where
F: BareFormula + ?Sized,
impl<'de, F> Lazy<'de, F>where F: BareFormula + ?Sized,
sourcepub fn get<T>(&self) -> Result<T, DeserializeError>where
T: Deserialize<'de, F>,
pub fn get<T>(&self) -> Result<T, DeserializeError>where T: Deserialize<'de, F>,
sourcepub fn get_in_place<T>(&self, place: &mut T) -> Result<(), DeserializeError>where
T: Deserialize<'de, F> + ?Sized,
pub fn get_in_place<T>(&self, place: &mut T) -> Result<(), DeserializeError>where T: Deserialize<'de, F> + ?Sized,
source§impl<'de, F> Lazy<'de, [F]>where
F: Formula,
impl<'de, F> Lazy<'de, [F]>where F: Formula,
sourcepub fn sized_iter<T>(&self) -> DeIter<'de, F, T, IterSized> ⓘwhere
T: Deserialize<'de, F>,
pub fn sized_iter<T>(&self) -> DeIter<'de, F, T, IterSized> ⓘwhere T: Deserialize<'de, F>,
Produce iterator over lazy deserialized values.
Example
let mut buffer = [0u8; 1024];
serialize::<[u32], _>([1u8, 2, 3], &mut buffer).unwrap();
let (lazy, _) = deserialize::<[u32], Lazy<[u32]>>(&buffer).unwrap();
let mut iter = lazy.sized_iter::<u32>();
assert_eq!(iter.next().unwrap().unwrap(), 1);
assert_eq!(iter.next().unwrap().unwrap(), 2);
assert_eq!(iter.next().unwrap().unwrap(), 3);
assert!(iter.next().is_none());sized_iter cannot be used to deserialize slice of unsized formulas.
Attempt to use unsized formula will result in compile error.
ⓘ
let mut buffer = [0u8; 1024];
serialize::<[As<str>], _>(["qwe", "rty"], &mut buffer).unwrap();
let (lazy, _) = deserialize::<[As<str>], Lazy<[As<str>]>>(&buffer).unwrap();
let mut iter = lazy.sized_iter::<&str>();
assert_eq!(iter.next().unwrap().unwrap(), "qwe");
assert_eq!(iter.next().unwrap().unwrap(), "rty");
assert!(iter.next().is_none());sourcepub fn iter<T>(&self) -> DeIter<'de, F, T> ⓘwhere
T: Deserialize<'de, F>,
pub fn iter<T>(&self) -> DeIter<'de, F, T> ⓘwhere T: Deserialize<'de, F>,
Produce iterator over lazy deserialized values.
Example
let mut buffer = [0u8; 1024];
serialize::<[u32], _>([1u8, 2, 3], &mut buffer).unwrap();
let (lazy, _) = deserialize::<[u32], Lazy<[u32]>>(&buffer).unwrap();
let mut iter = lazy.iter::<u32>();
assert_eq!(iter.next().unwrap().unwrap(), 1);
assert_eq!(iter.next().unwrap().unwrap(), 2);
assert_eq!(iter.next().unwrap().unwrap(), 3);
assert!(iter.next().is_none());iter may be used to deserialize slice of unsized formulas.
let mut buffer = [0u8; 1024];
serialize::<[As<str>], _>(["qwe", "rty"], &mut buffer).unwrap();
let (seq, _) = deserialize::<[As<str>], Lazy<[As<str>]>>(&buffer).unwrap();
let mut iter = seq.iter::<&str>();
assert_eq!(iter.next().unwrap().unwrap(), "qwe");
assert_eq!(iter.next().unwrap().unwrap(), "rty");
assert!(iter.next().is_none());Trait Implementations§
source§impl<'de, 'fe: 'de, F> Deserialize<'fe, F> for Lazy<'de, F>where
F: BareFormula + ?Sized,
impl<'de, 'fe: 'de, F> Deserialize<'fe, F> for Lazy<'de, F>where F: BareFormula + ?Sized,
source§fn deserialize(de: Deserializer<'fe>) -> Result<Self, DeserializeError>
fn deserialize(de: Deserializer<'fe>) -> Result<Self, DeserializeError>
Deserializes value provided deserializer.
Returns deserialized value and the number of bytes consumed from
the and of input. Read more
source§fn deserialize_in_place(
&mut self,
de: Deserializer<'fe>
) -> Result<(), DeserializeError>
fn deserialize_in_place( &mut self, de: Deserializer<'fe> ) -> Result<(), DeserializeError>
Deserializes value in-place provided deserializer.
Overwrites
self with data from the input. Read more