Struct mesh::Receiver

source ·
pub struct Receiver<T>(/* private fields */);
Expand description

The receiving half of a channel returned by channel.

Implementations§

source§

impl<T> Receiver<T>
where T: MeshField,

source

pub fn upcast<U>(self) -> Receiver<U>
where U: MeshField, Receiver<T>: Upcast<Receiver<U>>,

Upcasts this receiver to one that can receive values whose encoding is a superset of T’s.

let (send, recv) = channel::<Option<(u32, u16)>>();
let mut recv = recv.upcast::<Option<mesh_node::message::Message>>();
send.send(None);
send.send(Some((5, 4)));
assert!(block_on(recv.recv()).unwrap().is_none());
assert!(block_on(recv.recv()).unwrap().is_some());
source

pub fn force_downcast<U>(self) -> Receiver<U>
where U: MeshField, Receiver<U>: Upcast<Receiver<T>>,

Downcasts this receiver to one that can receive values whose encoding is a subset of T’s.

Although this is memory safe, it can cause decoding failures if the associated sender sends values that don’t decode to U.

source§

impl<T> Receiver<T>
where T: 'static + Send,

source

pub fn try_recv(&mut self) -> Result<T, TryRecvError>

Consumes and returns the next message, if there is one.

Otherwise, returns whether the channel is empty, closed, or failed.

let (send, mut recv) = channel();
send.send(5u32);
drop(send);
assert_eq!(recv.try_recv().unwrap(), 5);
assert!(matches!(recv.try_recv().unwrap_err(), TryRecvError::Closed));
source

pub fn recv(&mut self) -> impl Future<Output = Result<T, RecvError>> + Unpin

Consumes and returns the next message, waiting until one is available.

Returns immediately when the channel is closed or failed.

let (send, mut recv) = channel();
send.send(5u32);
drop(send);
assert_eq!(recv.recv().await.unwrap(), 5);
assert!(matches!(recv.recv().await.unwrap_err(), RecvError::Closed));
source

pub fn poll_recv(&mut self, cx: &mut Context<'_>) -> Poll<Result<T, RecvError>>

Polls for the next message.

source

pub fn bridge(self, send: Sender<T>)

Trait Implementations§

source§

impl<T> Debug for Receiver<T>

source§

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

Formats the value using the given formatter. Read more
source§

impl<T> DefaultEncoding for Receiver<T>
where T: MeshField,

source§

type Encoding = TableEncoder

The encoding to use for the serialization. Read more
source§

impl<T> From<Port> for Receiver<T>
where T: MeshField,

source§

fn from(port: Port) -> Receiver<T>

Converts to this type from the input type.
source§

impl<T> From<Receiver<T>> for Port
where T: MeshField,

source§

fn from(v: Receiver<T>) -> Port

Converts to this type from the input type.
source§

impl<T> FusedStream for Receiver<T>
where T: 'static + Send,

source§

fn is_terminated(&self) -> bool

Returns true if the stream should no longer be polled.
source§

impl<T> Stream for Receiver<T>
where T: 'static + Send,

Stream implementation for a channel.

Note that the output item from this throws away the distinction between the channel being closed and the channel failing due to a node error or decoding error. This simplifies most code that does not care about this distinction.

If you need to distinguish between these cases, use Receiver::recv or Receiver::poll_recv.

source§

type Item = T

Values yielded by the stream.
source§

fn poll_next( self: Pin<&mut Receiver<T>>, cx: &mut Context<'_>, ) -> Poll<Option<<Receiver<T> as Stream>::Item>>

Attempt to pull out the next value of this stream, registering the current task for wakeup if the value is not yet available, and returning None if the stream is exhausted. Read more
§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the stream. Read more
source§

impl<'encoding, T> StructDecodeMetadata<'encoding, Resource> for Receiver<T>
where T: MeshField,

source§

const DECODERS: &'static [ErasedDecoderEntry] = _

The list of decoder vtables.
source§

impl<T> StructEncodeMetadata<Resource> for Receiver<T>
where T: MeshField,

source§

const ENCODERS: &'static [ErasedEncoderEntry] = _

The list of encoder vtables.
source§

impl<T> StructMetadata for Receiver<T>
where T: MeshField,

source§

const NUMBERS: &'static [u32] = _

The field numbers for each field.
source§

const OFFSETS: &'static [usize] = _

The byte offset to each field within the struct.
source§

impl<T, U> Downcast<Receiver<U>> for Receiver<T>

Auto Trait Implementations§

§

impl<T> Freeze for Receiver<T>

§

impl<T> !RefUnwindSafe for Receiver<T>

§

impl<T> Send for Receiver<T>

§

impl<T> Sync for Receiver<T>

§

impl<T> Unpin for Receiver<T>

§

impl<T> !UnwindSafe for Receiver<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> SerializeMessage for T
where T: MeshPayload,

source§

type Concrete = T

The underlying concrete message type.
source§

fn compute_message_size(&mut self, sizer: MessageSizer<'_>)

Computes the message size, as in MessageEncode::compute_message_size.
source§

fn write_message(self, writer: MessageWriter<'_, '_, Resource>)

Writes the message, as in MessageEncode::write_message.
source§

fn extract(self) -> <T as SerializeMessage>::Concrete

Extract the concrete message.
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<S, T, E> TryStream for S
where S: Stream<Item = Result<T, E>> + ?Sized,

§

type Ok = T

The type of successful values yielded by this future
§

type Error = E

The type of failures yielded by this future
§

fn try_poll_next( self: Pin<&mut S>, cx: &mut Context<'_>, ) -> Poll<Option<Result<<S as TryStream>::Ok, <S as TryStream>::Error>>>

Poll this TryStream as if it were a Stream. Read more
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
source§

impl<T, U> Upcast<U> for T
where U: Downcast<T>,