Struct tokio::sync::mpsc::Permit

source ·
pub struct Permit<'a, T> {
    chan: &'a Tx<T, Semaphore>,
}
Expand description

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.

Fields§

§chan: &'a Tx<T, Semaphore>

Implementations§

source§

impl<T> Permit<'_, T>

source

pub fn send(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);
}

Trait Implementations§

source§

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

source§

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

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

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

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

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

§

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

§

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

§

impl<'a, T> Sync for Permit<'a, T>
where T: Send,

§

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

§

impl<'a, T> UnwindSafe for Permit<'a, 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, 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> 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.