pub enum AsyncQueueState<T: 'static> {
    Stopped(T),
    Running((TaskHandle<T>, Executor, AbortHandle)),
    Broken,
}
Expand description

A queue for which processing can be started on an async executor.

T is the resource type of the queue, i.e. the device-specific data it needs in order to run. For instance, a block device will likely need a file to provide its data.

Variants§

§

Stopped(T)

Queue is currently stopped.

§

Running((TaskHandle<T>, Executor, AbortHandle))

Queue is being processed as a Task on an Executor, and can be stopped by aborting the AbortHandle.

§

Broken

Something terrible happened and this queue is in a non-recoverable state.

Implementations§

source§

impl<T: 'static> AsyncQueueState<T>

source

pub fn start<U: Future<Output = T> + 'static, F: FnOnce(T, Abortable<Pending<()>>) -> Result<U>>( &mut self, ex: &Executor, fut_provider: F ) -> Result<()>

Start processing of the queue on ex, or stop and restart it with the new parameters if it was already running.

fut_provider is a closure that is passed the resource of the queue, as well as a Abortable future. It must return a Future that takes ownership of the device’s resource and processes the queue for as long as possible, but immediately quits and returns the device resource when the Abortable is signaled.

If fut_provider or the Future it returns end with an error, the queue is considered broken and cannot be used anymore.

The task is only scheduled and no processing actually starts in this method. The task is scheduled locally, which implies that ex must be run on the current thread.

source

pub fn stop(&mut self) -> AsyncResult<bool>

Stops a previously started queue.

The executor on which the task has been started will be run if needed in order to retrieve the queue’s resource.

Returns true if the queue was running, false if it wasn’t.

source

pub async fn stop_async(&mut self) -> AsyncResult<bool>

Stops a previously started queue.

The executor on which the task has been started will be run if needed in order to retrieve the queue’s resource.

Returns true if the queue was running, false if it wasn’t.

Auto Trait Implementations§

§

impl<T> !RefUnwindSafe for AsyncQueueState<T>

§

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

§

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

§

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

§

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

impl<T> Downcast for T
where T: Any,

§

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.
§

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.
§

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.
§

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.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
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, 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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V