MaybeAsync

Struct MaybeAsync 

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

Represents a result that may be computed synchronously or asynchronously by user code.

Rust does not currently allow async fn in trait methods, so we need a workaround. There are crates such as async_trait which provide proc_macros that do this, but they don’t provide an optimization to avoid the heap allocation if the underlying implementation is synchronous.

This allows us to use async operations in Rust if desired, but just have synchronous callbacks in the FFI without paying always allocating.

Implementations§

Source§

impl<T> MaybeAsync<T>

Source

pub async fn get(self) -> T

Retrieve the value, which might be available immediately or require awaiting

Source

pub fn ready(result: T) -> Self

Construct a new MaybeAsync from an already available result

Source

pub fn asynchronous<F>(result: F) -> Self
where F: Future<Output = T> + Send + 'static,

Construct a new MaybeAsync from a future which yields the value eventually

Auto Trait Implementations§

§

impl<T> Freeze for MaybeAsync<T>
where T: Freeze,

§

impl<T> !RefUnwindSafe for MaybeAsync<T>

§

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

§

impl<T> !Sync for MaybeAsync<T>

§

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

§

impl<T> !UnwindSafe for MaybeAsync<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> 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<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