Struct crossbeam_channel::SelectedOperation

source ·
pub struct SelectedOperation<'a> { /* private fields */ }
Expand description

A selected operation that needs to be completed.

To complete the operation, call send or recv.

§Panics

Forgetting to complete the operation is an error and might lead to deadlocks. If a SelectedOperation is dropped without completion, a panic occurs.

Implementations§

source§

impl SelectedOperation<'_>

source

pub fn index(&self) -> usize

Returns the index of the selected operation.

§Examples
use crossbeam_channel::{bounded, Select};

let (s1, r1) = bounded::<()>(0);
let (s2, r2) = bounded::<()>(0);
let (s3, r3) = bounded::<()>(1);

let mut sel = Select::new();
let oper1 = sel.send(&s1);
let oper2 = sel.recv(&r2);
let oper3 = sel.send(&s3);

// Only the last operation is ready.
let oper = sel.select();
assert_eq!(oper.index(), 2);
assert_eq!(oper.index(), oper3);

// Complete the operation.
oper.send(&s3, ()).unwrap();
source

pub fn send<T>(self, s: &Sender<T>, msg: T) -> Result<(), SendError<T>>

Completes the send operation.

The passed Sender reference must be the same one that was used in Select::send when the operation was added.

§Panics

Panics if an incorrect Sender reference is passed.

§Examples
use crossbeam_channel::{bounded, Select, SendError};

let (s, r) = bounded::<i32>(0);
drop(r);

let mut sel = Select::new();
let oper1 = sel.send(&s);

let oper = sel.select();
assert_eq!(oper.index(), oper1);
assert_eq!(oper.send(&s, 10), Err(SendError(10)));
source

pub fn recv<T>(self, r: &Receiver<T>) -> Result<T, RecvError>

Completes the receive operation.

The passed Receiver reference must be the same one that was used in Select::recv when the operation was added.

§Panics

Panics if an incorrect Receiver reference is passed.

§Examples
use crossbeam_channel::{bounded, Select, RecvError};

let (s, r) = bounded::<i32>(0);
drop(s);

let mut sel = Select::new();
let oper1 = sel.recv(&r);

let oper = sel.select();
assert_eq!(oper.index(), oper1);
assert_eq!(oper.recv(&r), Err(RecvError));

Trait Implementations§

source§

impl Debug for SelectedOperation<'_>

source§

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

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

impl Drop for SelectedOperation<'_>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for SelectedOperation<'a>

§

impl<'a> RefUnwindSafe for SelectedOperation<'a>

§

impl<'a> !Send for SelectedOperation<'a>

§

impl<'a> !Sync for SelectedOperation<'a>

§

impl<'a> Unpin for SelectedOperation<'a>

§

impl<'a> UnwindSafe for SelectedOperation<'a>

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.

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 88 bytes