Struct Permit

struct Permit<'a, T> { ... }

Permits to send one value into the channel.

Permit values are returned by Sender::reserve() and Sender::try_reserve() and are used to guarantee channel capacity before generating a message to send.

Implementations

impl<T> Permit<'_, T>

fn send(self: Self, value: T)

Sends a value using the reserved capacity.

Capacity for the message has already been reserved. The message is sent to the receiver and the permit is consumed. The operation will succeed even if the receiver half has been closed. See Receiver::close for more details on performing a clean shutdown.

Examples

use tokio::sync::mpsc;

#[tokio::main]
async fn main() {
    let (tx, mut rx) = mpsc::channel(1);

    // Reserve capacity
    let permit = tx.reserve().await.unwrap();

    // Trying to send directly on the `tx` will fail due to no
    // available capacity.
    assert!(tx.try_send(123).is_err());

    // Send a message on the permit
    permit.send(456);

    // The value sent on the permit is received
    assert_eq!(rx.recv().await.unwrap(), 456);
}

impl<'a, T> Freeze for Permit<'a, T>

impl<'a, T> RefUnwindSafe for Permit<'a, T>

impl<'a, T> Send for Permit<'a, T>

impl<'a, T> Sync for Permit<'a, T>

impl<'a, T> Unpin for Permit<'a, T>

impl<'a, T> UnsafeUnpin for Permit<'a, T>

impl<'a, T> UnwindSafe for Permit<'a, T>

impl<T> Any for Permit<'a, T>

fn type_id(self: &Self) -> TypeId

impl<T> Borrow for Permit<'a, T>

fn borrow(self: &Self) -> &T

impl<T> BorrowMut for Permit<'a, T>

fn borrow_mut(self: &mut Self) -> &mut T

impl<T> Debug for Permit<'_, T>

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

impl<T> Drop for Permit<'_, T>

fn drop(self: &mut Self)

impl<T> From for Permit<'a, T>

fn from(t: T) -> T

Returns the argument unchanged.

impl<T, U> Into for Permit<'a, T>

fn into(self: Self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom for Permit<'a, T>

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

impl<T, U> TryInto for Permit<'a, T>

fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>