MessageQueue

Struct MessageQueue 

Source
pub struct MessageQueue<D: MessageData = Vec<u8>> { /* private fields */ }
Expand description

A MessageQueue stores a FIFO sequence of messages.

Implementations§

Source§

impl<D: MessageData> MessageQueue<D>

Source

pub fn new(capacity: usize) -> Self

Source

pub fn available_capacity(&self) -> usize

Returns the number of bytes that can be written to the message queue before the buffer is full.

Source

pub fn capacity(&self) -> usize

Returns the total number of bytes this message queue can store, regardless of the current amount of data in the buffer.

Source

pub fn messages(&self) -> impl Iterator<Item = &Message<D>>

Source

pub fn set_capacity(&mut self, requested_capacity: usize) -> Result<(), Errno>

Sets the capacity of the message queue to the provided number of bytes.

Reurns an error if the requested capacity could not be set (e.g., if the requested capacity was less than the current number of bytes stored).

Source

pub fn is_empty(&self) -> bool

Returns true if the message queue is empty, or it only contains empty messages.

Source

pub fn len(&self) -> usize

Returns the total length of all the messages in the message queue.

Source

pub fn read_stream( &mut self, data: &mut dyn OutputBuffer, ) -> Result<MessageReadInfo, Errno>

Reads messages until there are no more messages, a message with ancillary data is encountered, or data are full.

To read data from the queue without consuming the messages, see peek_stream.

§Parameters
  • data: The OutputBuffer to write the data to.

Returns the number of bytes that were read into the buffer, and any ancillary data that was read.

Source

pub fn peek_stream( &self, data: &mut dyn OutputBuffer, ) -> Result<MessageReadInfo, Errno>

Peeks messages until there are no more messages, a message with ancillary data is encountered, or data are full.

Unlike read_stream, this function does not remove the messages from the queue.

Used to implement MSG_PEEK.

§Parameters
  • data: The OutputBuffer to write the data to.

Returns the number of bytes that were read into the buffer, and any ancillary data that was read.

Source

pub fn read_datagram( &mut self, data: &mut dyn OutputBuffer, ) -> Result<MessageReadInfo, Errno>

Source

pub fn peek_datagram( &mut self, data: &mut dyn OutputBuffer, ) -> Result<MessageReadInfo, Errno>

Source

pub fn read_message(&mut self) -> Option<Message<D>>

Reads the next message in the buffer, if such a message exists.

Source

pub fn peek_queue(&self) -> &VecDeque<Message<D>>

Source

pub fn write_stream( &mut self, data: &mut dyn InputBuffer, address: Option<SocketAddress>, ancillary_data: &mut Vec<AncillaryData>, ) -> Result<usize, Errno>

Writes the the contents of InputBuffer into this socket. Will return EAGAIN if not enough capacity is available.

§Parameters
  • task: The task to read memory from.
  • data: The InputBuffer to read the data from.

Returns the number of bytes that were written to the socket.

Source

pub fn write_stream_with_filter( &mut self, data: &mut dyn InputBuffer, address: Option<SocketAddress>, ancillary_data: &mut Vec<AncillaryData>, filter: impl FnOnce(Message<D>) -> Option<Message<D>>, ) -> Result<usize, Errno>

Writes the the contents of InputBuffer into this socket. Will return EAGAIN if not enough capacity is available.

§Parameters
  • task: The task to read memory from.
  • data: The InputBuffer to read the data from.
  • filter: A filter to run on the message before inserting it into the queue. If it returns None, no message is enqueued.

Returns the number of bytes that were written to the socket.

Source

pub fn write_datagram( &mut self, data: &mut dyn InputBuffer, address: Option<SocketAddress>, ancillary_data: &mut Vec<AncillaryData>, ) -> Result<usize, Errno>

Writes the the contents of InputBuffer into this socket as single message. Will return EAGAIN if not enough capacity is available.

§Parameters
  • task: The task to read memory from.
  • data: The InputBuffer to read the data from.

Returns the number of bytes that were written to the socket.

Source

pub fn write_datagram_with_filter( &mut self, data: &mut dyn InputBuffer, address: Option<SocketAddress>, ancillary_data: &mut Vec<AncillaryData>, filter: impl FnOnce(Message<D>) -> Option<Message<D>>, ) -> Result<usize, Errno>

Writes the the contents of InputBuffer into this socket as single message. Will return EAGAIN if not enough capacity is available.

§Parameters
  • task: The task to read memory from.
  • data: The InputBuffer to read the data from.
  • filter: A filter to run on the message before inserting it into the queue. If it returns None, no message is enqueued.

Returns the number of bytes that were written to the socket.

Source

pub fn write_front(&mut self, message: Message<D>)

Writes a message to the front of the message queue.

Source

pub fn write_message(&mut self, message: Message<D>)

Writes a message to the back of the message queue.

Source

pub fn query_events(&self) -> FdEvents

Trait Implementations§

Source§

impl<D: Debug + MessageData> Debug for MessageQueue<D>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<D> Freeze for MessageQueue<D>

§

impl<D = Vec<u8>> !RefUnwindSafe for MessageQueue<D>

§

impl<D> Send for MessageQueue<D>
where D: Send,

§

impl<D> Sync for MessageQueue<D>
where D: Sync,

§

impl<D> Unpin for MessageQueue<D>
where D: Unpin,

§

impl<D = Vec<u8>> !UnwindSafe for MessageQueue<D>

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

Source§

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

Source§

fn type_name(&self) -> &'static str

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, D> Encode<Ambiguous1, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<T, D> Encode<Ambiguous2, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> InstanceFromServiceTransport<T> for T

§

fn from_service_transport(handle: T) -> T

Converts the given service transport handle of type T to [Self]
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> Into32<U> for T
where U: MultiArchFrom<T>,

Source§

fn into_32(self) -> U

Source§

impl<T, U> Into64<U> for T
where U: MultiArchFrom<T>,

Source§

fn into_64(self) -> U

Source§

impl<T> IntoAny for T
where T: 'static + Send + Sync,

Source§

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

Cast the given object into a dyn std::any::Any.
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T, U> IntoExt<U> for T
where U: FromExt<T>,

§

fn into_ext(self) -> U

Performs the conversion.
Source§

impl<T, U> IntoFidl<U> for T
where U: FromFidl<T>,

Source§

fn into_fidl(self) -> U

Source§

impl<T, U> MultiArchFrom<T> for U
where U: From<T>,

Source§

fn from_64(value: T) -> U

Source§

fn from_32(value: T) -> U

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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.
§

impl<T, U> TryIntoExt<U> for T
where U: TryFromExt<T>,

§

type Error = <U as TryFromExt<T>>::Error

§

fn try_into_ext(self) -> Result<U, <T as TryIntoExt<U>>::Error>

Tries to perform the conversion.
§

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

§

fn vzip(self) -> V

§

impl<St> WithTag for St

§

fn tagged<T>(self, tag: T) -> Tagged<T, St>

Produce a new stream from this one which yields item tupled with a constant tag
Source§

impl<B, A> LockBefore<B> for A
where B: LockAfter<A>,

Source§

impl<B, A> LockEqualOrBefore<B> for A
where A: LockBefore<B>,

§

impl<E> RunsTransport<Mpsc> for E

§

impl<E> RunsTransport<Mpsc> for E
where E: RunsTransport<Mpsc>,