Fetcher

Struct Fetcher 

Source
pub struct Fetcher<I: Send + 'static, O> { /* private fields */ }
Expand description

A value factory that uses the result of an asynchronous task to compute an output value.

The fetcher takes a task and a factory function. It produces an output value O by taking an Option of an input value I.

If the inner Task is not ready yet, the factory will be called with None. Once the inner Task is ready, the factory will be called with Some(I).

This is similar to the FutureBuilder from Flutter.

Implementations§

Source§

impl<I: Send + 'static, O> Fetcher<I, O>

Source

pub const fn new( task: Box<dyn Task<I>>, factory: Box<dyn Fn(Option<I>) -> O + 'static>, ) -> Self

Create a new task fetcher with the given task and factory function.

Source

pub fn spawn( future: impl Future<Output = I> + Send + 'static, factory: impl Fn(Option<I>) -> O + 'static, ) -> Self

Spawn a future using the TaskRunner and create a new Fetcher with the resulting task and the given factory function.

If you want to spawn a blocking task, use Fetcher::spawn_blocking instead.

Source

pub fn spawn_blocking( func: impl Fn() -> I + Send + 'static, factory: impl Fn(Option<I>) -> O + 'static, ) -> Self

Spawn a blocking function using the TaskRunner and create a new Fetcher with the resulting task and the given factory function.

If your task is non-blocking (a simple future), use Fetcher::spawn instead.

Source

pub const fn value_mut(&mut self) -> Option<&mut O>

Returns a mutable reference to the possible output value.

This is mostly used internally and will return the cached output value.

Source

pub const fn value_ref(&self) -> Option<&O>

Returns a reference to the possible output value.

This is mostly used internally and will return the cached output value.

Source

pub fn is_ready(&self) -> bool

Returns whether the inner task is ready.

NOTE: This will only return true, if the inner task has finished, but the value has not been consumed yet.

Source

pub const fn is_fetched(&self) -> bool

Returns whether the inner task has finished and the value has been computed.

Source

pub fn compute(&mut self)

Computes the output value from the inner task.

If the inner task is not ready, the factory function will be called with None. Otherwise, it will be called with Some(I).

Source

pub fn fetch(&mut self) -> &mut O

Fetches the output value and returns a mutable reference.

This will only actually compute the value, if the task is not fully finished yet, so it’s safe to call, even if the task is already done.

Auto Trait Implementations§

§

impl<I, O> Freeze for Fetcher<I, O>
where O: Freeze,

§

impl<I, O> !RefUnwindSafe for Fetcher<I, O>

§

impl<I, O> !Send for Fetcher<I, O>

§

impl<I, O> !Sync for Fetcher<I, O>

§

impl<I, O> Unpin for Fetcher<I, O>
where O: Unpin,

§

impl<I, O> !UnwindSafe for Fetcher<I, O>

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> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more