Struct Lazy

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

Represents a value whose construction is delayed upon request rather than resolved from the catalog immediately. This is often useful in cases when some expensive type is used rarely, thus it’s beneficial to only construct it on-demand.

When instance is requested, this type will first attempt to resolve it using [crate::Catalog::current] and will fall back to the catalog instance used to create the Lazy<T>. This means that Lazy<T> can be used to access values that are dynamically added into a chain of catalogs and may not be present when the Lazy<T> itself is injected.

Note that this style of injection still respects the component’s control over its own lifetime via crate::Scope. So It’s recommended to use Self::get liberally and release the instances ASAP without attempting to cache them.

See also:

§Examples

#[dill::component]
struct A;

impl A {
    fn test(&self) -> String {
        "A".into()
    }
}

#[dill::component]
struct B {
    lazy_a: dill::Lazy<std::sync::Arc<A>>,
}
impl B {
    fn test(&self) -> String {
        // A is created on-demand during this call
        let a = self.lazy_a.get().unwrap();
        a.test()
    }
}

let cat = dill::Catalog::builder()
    .add::<A>()
    .add::<B>()
    .build();

Implementations§

Source§

impl<T> Lazy<T>

Source

pub fn new( f: impl Fn() -> Result<T, InjectionError> + Send + Sync + 'static, ) -> Self

Source

pub fn get(&self) -> Result<T, InjectionError>

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 for Lazy<T>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<T> Freeze for Lazy<T>

§

impl<T> !RefUnwindSafe for Lazy<T>

§

impl<T> Send for Lazy<T>

§

impl<T> Sync for Lazy<T>

§

impl<T> Unpin for Lazy<T>

§

impl<T> !UnwindSafe for Lazy<T>

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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,

Source§

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>,

Source§

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>,

Source§

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.