twizzler_queue/
lib.rs

1//! Provides a duplex send/completion queue, where each direction is
2//! multiple-producer/single-consumer.
3//!
4//! The core queue abstraction is built around two subqueues, each providing an MPSC
5//! interface. These subqueues are stored in a single object, and so the verbs to interact with the
6//! two subqueues are different.
7//!
8//! Generally a queue is thought of as providing a connection between a sender and a receiver, where
9//! the sender sends requests to the receiver, and the receiver indications completion of requests.
10//! Hence, one subqueue is the sending queue and the other is the completion queue. The subqueue
11//! implementation is provided by the twizzler-queue-raw crate. This crate connects that crate to
12//! the object system of Twizzler.
13//!
14//! The queues also provide hooks for asynchrony, allowing a given call to be non-blocking, and
15//! methods to hook into for async executors to wait on events on a queue.
16//!
17//! Each subqueue sends a type T across the queue via byte-level copy. Internally, these objects are
18//! held in a circular buffer with a maximum length specified on queue creation.
19
20mod callback_queue;
21mod queue;
22mod sender_queue;
23
24pub use callback_queue::CallbackQueueReceiver;
25pub use queue::{Queue, QueueBase, QueueError, ReceiveFlags, SubmissionFlags};
26pub use sender_queue::QueueSender;