Struct OwnedPermit

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

Owned permit to send one value into the channel.

This is identical to the Permit type, except that it moves the sender rather than borrowing it.

OwnedPermit values are returned by Sender::reserve_owned() and Sender::try_reserve_owned() and are used to guarantee channel capacity before generating a message to send.

Implementations§

Source§

impl<T> OwnedPermit<T>

Source

pub fn send(self, value: T) -> Sender<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.

Unlike Permit::send, this method returns the Sender from which the OwnedPermit was reserved.

§Examples
use tokio::sync::mpsc;

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

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

    // Send a message on the permit, returning the sender.
    let tx = permit.send(456);

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

    // We may now reuse `tx` to send another message.
    tx.send(789).await.unwrap();
}
Source

pub fn release(self) -> Sender<T>

Releases the reserved capacity without sending a message, returning the Sender.

§Examples
use tokio::sync::mpsc;

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

    // Clone the sender and reserve capacity
    let permit = tx.clone().reserve_owned().await.unwrap();

    // Trying to send on the original `tx` will fail, since the `permit`
    // has reserved all the available capacity.
    assert!(tx.try_send(123).is_err());

    // Release the permit without sending a message, returning the clone
    // of the sender.
    let tx2 = permit.release();

    // We may now reuse `tx` to send another message.
    tx.send(789).await.unwrap();
}
Source

pub fn same_channel(&self, other: &OwnedPermit<T>) -> bool

Returns true if permits belong to the same channel.

§Examples
use tokio::sync::mpsc;

#[tokio::main]
async fn main() {
    let (tx, rx) = mpsc::channel::<()>(2);

    let permit1 = tx.clone().reserve_owned().await.unwrap();
    let permit2 = tx.clone().reserve_owned().await.unwrap();
    assert!(permit1.same_channel(&permit2));

    let (tx2, rx2) = mpsc::channel::<()>(1);

    let permit3 = tx2.clone().reserve_owned().await.unwrap();
    assert!(!permit3.same_channel(&permit2));
}
Source

pub fn same_channel_as_sender(&self, sender: &Sender<T>) -> bool

Returns true if this permit belongs to the same channel as the given Sender.

§Examples
use tokio::sync::mpsc;

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

    let permit = tx.clone().reserve_owned().await.unwrap();
    assert!(permit.same_channel_as_sender(&tx));

    let (tx2, rx2) = mpsc::channel::<()>(1);
    assert!(!permit.same_channel_as_sender(&tx2));
}

Trait Implementations§

Source§

impl<T> Debug for OwnedPermit<T>

Source§

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

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

impl<T> Drop for OwnedPermit<T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<T> Freeze for OwnedPermit<T>

§

impl<T> RefUnwindSafe for OwnedPermit<T>

§

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

§

impl<T> Sync for OwnedPermit<T>
where T: Send,

§

impl<T> Unpin for OwnedPermit<T>

§

impl<T> UnwindSafe for OwnedPermit<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> 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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. 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.
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
Source§

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