Skip to main content

Receiver

Struct Receiver 

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

Receiving end of a oneshot channel.

Created and returned from the channel function.

Can be used to receive a message from the corresponding Sender. How the message can be received depends on what features are enabled.

This type implements IntoFuture when the async feature is enabled. This allows awaiting it directly in an async context.

Implementations§

Source§

impl<T> Receiver<T>

Source

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

Checks if there is a message in the channel without blocking. Returns:

  • Ok(message) if there was a message in the channel.
  • Err(Empty) if the Sender is alive, but has not yet sent a message.
  • Err(Disconnected) if the Sender was dropped before sending anything or if the message has already been extracted by a previous receive call.

If a message is returned, the channel is disconnected and any subsequent receive operation using this receiver will return an error.

This method is completely lock-free and wait-free. The only thing it does is an atomic integer load of the channel state. And if there is a message in the channel it additionally performs one atomic integer store and copies the message from the heap to the stack for returning it.

Source

pub fn recv(self) -> Result<T, RecvError>

Attempts to wait for a message from the Sender, returning an error if the channel is disconnected.

This method will always block the current thread if there is no data available and it is still possible for the message to be sent. Once the message is sent to the corresponding Sender, then this receiver will wake up and return that message.

If the corresponding Sender has disconnected (been dropped), or it disconnects while this call is blocking, this call will wake up and return Err to indicate that the message can never be received on this channel.

If a sent message has already been extracted from this channel this method will return an error.

Source

pub fn recv_ref(&self) -> Result<T, RecvError>

Attempts to wait for a message from the Sender, returning an error if the channel is disconnected. This is a non consuming version of Receiver::recv, but with a bit worse performance. Prefer [Receiver::recv] if your code allows consuming the receiver.

If a message is returned, the channel is disconnected and any subsequent receive operation using this receiver will return an error.

Source

pub fn recv_timeout(&self, timeout: Duration) -> Result<T, RecvTimeoutError>

Like Receiver::recv, but will not block longer than timeout. Returns:

  • Ok(message) if there was a message in the channel before the timeout was reached.
  • Err(Timeout) if no message arrived on the channel before the timeout was reached.
  • Err(Disconnected) if the sender was dropped before sending anything or if the message has already been extracted by a previous receive call.

If a message is returned, the channel is disconnected and any subsequent receive operation using this receiver will return an error.

If the supplied timeout is so large that Rust’s Instant type can’t represent this point in the future this falls back to an indefinitely blocking receive operation.

Source

pub fn recv_deadline(&self, deadline: Instant) -> Result<T, RecvTimeoutError>

Like Receiver::recv, but will not block longer than until deadline. Returns:

  • Ok(message) if there was a message in the channel before the deadline was reached.
  • Err(Timeout) if no message arrived on the channel before the deadline was reached.
  • Err(Disconnected) if the sender was dropped before sending anything or if the message has already been extracted by a previous receive call.

If a message is returned, the channel is disconnected and any subsequent receive operation using this receiver will return an error.

Source

pub fn is_closed(&self) -> bool

Returns true if the associated Sender was dropped before sending a message. Or if the message has already been received.

If true is returned, all future calls to receive methods are guaranteed to return a disconnected error. And future calls to this method is guaranteed to also return true.

Source

pub fn has_message(&self) -> bool

Returns true if there is a message in the channel, ready to be received.

If true is returned, the next call to a receive method is guaranteed to return a message.

Source

pub fn into_raw(self) -> *mut ()

Consumes the Receiver, returning a raw pointer to the channel on the heap.

This is intended to simplify using oneshot channels with some FFI code. The only safe thing to do with the returned pointer is to later reconstruct the Receiver with Receiver::from_raw. Memory will leak if the Receiver is never reconstructed.

Source

pub unsafe fn from_raw(raw: *mut ()) -> Receiver<T>

Consumes a raw pointer from Receiver::into_raw, recreating the Receiver.

§Safety

This pointer must have come from Receiver<T>::into_raw with the same message type, T. At most one Receiver must exist for a channel at any point in time. Constructing multiple Receivers from the same raw pointer leads to undefined behavior.

Trait Implementations§

Source§

impl<T> Debug for Receiver<T>
where T: Debug,

Source§

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

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

impl<T> Drop for Receiver<T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more
Source§

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

Source§

impl<T> Unpin for Receiver<T>

Auto Trait Implementations§

§

impl<T> !RefUnwindSafe for Receiver<T>

§

impl<T> !Sync for Receiver<T>

§

impl<T> !UnwindSafe for Receiver<T>

§

impl<T> Freeze for Receiver<T>
where NonNull<Channel<T>>: Freeze,

§

impl<T> UnsafeUnpin for Receiver<T>
where NonNull<Channel<T>>: UnsafeUnpin,

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

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

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

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

Converts &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

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

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> ErasedDestructor for T
where T: 'static,

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> IntoComptime for T

Source§

fn comptime(self) -> Self

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

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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 = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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