Struct wasmbin::builtins::Lazy

source ·
pub struct Lazy<T> { /* private fields */ }
Expand description

A wrapper around a type that allows it to be lazily decoded.

This is useful for types that are expensive to decode, but allowed to be skipped over by the spec (e.g. as part of a length-prefixed Blob). During decoding, this type will store the raw bytes of the value, and only decode them when explicitly requested.

When re-encoding, it will check if the value has ever been accessed mutably, and if so, re-encode it. Otherwise it will do a cheap copy of the original raw bytes.

Implementations§

source§

impl<T> Lazy<T>

source

pub fn from_raw(raw: UnparsedBytes) -> Self

Create a new undecoded Lazy from a raw byte vector.

source

pub fn try_as_raw(&self) -> Result<&UnparsedBytes, &T>

Retrieve the raw bytes if the value has not been modified yet.

source§

impl<T: Decode> Lazy<T>

source

pub fn try_contents(&self) -> Result<&T, DecodeError>

Retrieve a reference to the inner value, decoding it if it wasn’t already.

source

pub fn try_contents_mut(&mut self) -> Result<&mut T, DecodeError>

Retrieve a mutable reference to the inner value, decoding it if it wasn’t already.

This will invalidate the original raw bytes.

source

pub fn try_into_contents(self) -> Result<T, DecodeError>

Unwrap the inner value, decoding it if it wasn’t already.

Trait Implementations§

source§

impl<T: Clone> Clone for Lazy<T>

source§

fn clone(&self) -> Lazy<T>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: Debug> Debug for Lazy<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Decode> Decode for Lazy<T>

source§

fn decode(r: &mut impl Read) -> Result<Self, DecodeError>

Decodes the value from the given reader.
source§

impl<T: Default> Default for Lazy<T>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<T: Encode> Encode for Lazy<T>

source§

fn encode(&self, w: &mut impl Write) -> Result<()>

Encodes the value into the given writer.
source§

impl<T> From<T> for Lazy<T>

source§

fn from(value: T) -> Self

Converts to this type from the input type.
source§

impl<T: Decode + Hash> Hash for Lazy<T>

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<T: Decode + PartialEq> PartialEq for Lazy<T>

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<T: Decode + Visit> Visit for Lazy<T>

source§

fn visit_children<'a, VisitT: 'static, E, F: FnMut(&'a VisitT) -> Result<(), E>>( &'a self, f: &mut F ) -> Result<(), VisitError<E>>

Traverse the children of this value with the provided callback.
source§

fn visit_children_mut<VisitT: 'static, E, F: FnMut(&mut VisitT) -> Result<(), E>>( &mut self, f: &mut F ) -> Result<(), VisitError<E>>

Traverse the children of this value mutably with the provided callback.
source§

fn visit<'a, T: 'static, R: VisitResult, F: FnMut(&'a T) -> R>( &'a self, f: F ) -> Result<(), VisitError<R::Error>>

Traverse this value with the provided callback.
source§

fn visit_mut<T: 'static, R: VisitResult, F: FnMut(&mut T) -> R>( &mut self, f: F ) -> Result<(), VisitError<R::Error>>

Traverse this value mutably with the provided callback.
source§

impl<T: Decode + Eq> Eq for Lazy<T>

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for Lazy<T>

§

impl<T> Send for Lazy<T>
where T: Send,

§

impl<T> Sync for Lazy<T>
where T: Sync + Send,

§

impl<T> Unpin for Lazy<T>
where T: Unpin,

§

impl<T> UnwindSafe for Lazy<T>
where T: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<!> for T

source§

fn from(t: !) -> T

Converts to this type from the input type.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.