[][src]Struct abi_stable::external_types::crossbeam_channel::RSender

#[repr(C)]pub struct RSender<T> { /* fields omitted */ }

The sender end of a channel, which can be either bounded or unbounded.

Example

use abi_stable::external_types::crossbeam_channel as mpmc;

let (tx,rx)=mpmc::bounded::<&'static str>(1024);

std::thread::spawn(move||{
    for _ in 0..4{
        tx.send("Are we there yet.").unwrap();
    }
});

assert_eq!(rx.recv().unwrap(),"Are we there yet.");
assert_eq!(rx.recv().unwrap(),"Are we there yet.");
assert_eq!(rx.recv().unwrap(),"Are we there yet.");
assert_eq!(rx.recv().unwrap(),"Are we there yet.");
assert!( rx.recv().is_err() );

Implementations

impl<T> RSender<T>[src]

pub fn send(&self, value: T) -> Result<(), SendError<T>>[src]

Blocks until value is either sent,or the the other end is disconnected.

If the channel queue is full,this will block to send value.

If the channel is disconnected,this will return an error with value.

Example

use abi_stable::external_types::crossbeam_channel as mpmc;

let (tx,rx)=mpmc::bounded::<u32>(3);

tx.send(1057).unwrap();

drop(rx);
assert!( tx.send(0).is_err() );

pub fn try_send(&self, value: T) -> Result<(), TrySendError<T>>[src]

Immediately sends value,or returns with an error.

An error will be returned in these 2 conditions:

  • the channel is full.

  • the channel has been disconnected.

If the channel has a capacity of 0,it will only send value if the other end is calling recv.

Example

use abi_stable::external_types::crossbeam_channel as mpmc;

let (tx,rx)=mpmc::bounded::<bool>(1);

tx.try_send(true).unwrap();
assert!( tx.try_send(true).unwrap_err().is_full() );

drop(rx);
assert!( tx.try_send(false).unwrap_err().is_disconnected() );

pub fn send_timeout(
    &self,
    value: T,
    timeout: Duration
) -> Result<(), SendTimeoutError<T>>
[src]

Blocks until a timeout to send value.

An error will be returned in these 2 conditions:

  • the value could not be sent before the timeout.

  • the channel has been disconnected.

If the channel has a capacity of 0,it will only send value if the other end calls recv before the timeout.

Example

use abi_stable::external_types::crossbeam_channel as mpmc;

use std::time::Duration;

let (tx,rx)=mpmc::bounded::<()>(1);

let timeout=Duration::from_millis(1);

tx.send_timeout((),timeout).unwrap();
assert!( tx.send_timeout((),timeout).unwrap_err().is_timeout() );

drop(rx);
assert!( tx.send_timeout((),timeout).unwrap_err().is_disconnected() );

pub fn is_empty(&self) -> bool[src]

Returns true if there are no values in the channel queue.

Example

use abi_stable::external_types::crossbeam_channel as mpmc;

let (tx,rx)=mpmc::bounded::<()>(1);

assert!( tx.is_empty() );

tx.send(()).unwrap();
assert!( !tx.is_empty() );

rx.recv().unwrap();
assert!( tx.is_empty() );

pub fn is_full(&self) -> bool[src]

Returns true if the channel queue is full.

This always returns true for channels constructed with bounded(0).

Example

use abi_stable::external_types::crossbeam_channel as mpmc;

let (tx,rx)=mpmc::bounded::<()>(2);

assert!( !tx.is_full() );

tx.send(()).unwrap();
assert!( !tx.is_full() );

tx.send(()).unwrap();
assert!( tx.is_full() );

rx.recv().unwrap();
assert!( !tx.is_full() );

pub fn len(&self) -> usize[src]

Returns the amount of values in the channel queue.

Example

use abi_stable::external_types::crossbeam_channel as mpmc;

let (tx,rx)=mpmc::bounded::<()>(2);

assert_eq!(tx.len(),0);

tx.send(()).unwrap();
assert_eq!(tx.len(),1);

tx.send(()).unwrap();
assert_eq!(tx.len(),2);

rx.recv().unwrap();
assert_eq!(tx.len(),1);

pub fn capacity(&self) -> Option<usize>[src]

Returns the amount of values the channel queue can hold.

This returns None if the channel is unbounded.

Example

use abi_stable::external_types::crossbeam_channel as mpmc;

{
    let (tx,rx)=mpmc::bounded::<()>(2);
    assert_eq!(tx.capacity(),Some(2));
}
{
    let (tx,rx)=mpmc::unbounded::<()>();
    assert_eq!(tx.capacity(),None);
}

Trait Implementations

impl<T> Clone for RSender<T>[src]

pub fn clone(&self) -> Self[src]

Clones this channel end,getting another handle into the channel.

Note that this allocates an RBox<_>.

impl<T> Debug for RSender<T>[src]

impl<T> From<Sender<T>> for RSender<T>[src]

impl<T> GetStaticEquivalent_ for RSender<T> where
    T: __StableAbi
[src]

type StaticEquivalent = _static_RSender<__GetStaticEquivalent<T>>

impl<T: Send> Send for RSender<T>[src]

impl<T> StableAbi for RSender<T> where
    T: __StableAbi
[src]

type IsNonZeroType = False

Whether this type has a single invalid bit-pattern. Read more

impl<T: Send> Sync for RSender<T>[src]

Auto Trait Implementations

impl<T> RefUnwindSafe for RSender<T> where
    T: RefUnwindSafe

impl<T> Unpin for RSender<T>

impl<T> UnwindSafe for RSender<T> where
    T: RefUnwindSafe + UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<'a, T> BorrowOwned<'a> for T where
    T: 'a + Clone
[src]

type ROwned = T

The owned type, stored in RCow::Owned

type RBorrowed = &'a T

The borrowed type, stored in RCow::Borrowed

impl<T> From<T> for T[src]

impl<T> GetWithMetadata for T[src]

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> SelfOps for T where
    T: ?Sized
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<This> TransmuteElement for This where
    This: ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The error type returned when the conversion fails.

impl<T> TypeIdentity for T where
    T: ?Sized
[src]

type Type = T

The same type as Self. Read more