#[repr(C)]pub struct RSender<T> { /* private fields */ }Expand description
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§
Source§impl<T> RSender<T>
impl<T> RSender<T>
Sourcepub fn send(&self, value: T) -> Result<(), SendError<T>>
pub fn send(&self, value: T) -> Result<(), SendError<T>>
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());
Sourcepub fn try_send(&self, value: T) -> Result<(), TrySendError<T>>
pub fn try_send(&self, value: T) -> Result<(), TrySendError<T>>
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());
Sourcepub fn send_timeout(
&self,
value: T,
timeout: Duration,
) -> Result<(), SendTimeoutError<T>>
pub fn send_timeout( &self, value: T, timeout: Duration, ) -> Result<(), SendTimeoutError<T>>
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());
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
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());Sourcepub fn is_full(&self) -> bool
pub fn is_full(&self) -> bool
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());Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
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);
Sourcepub fn capacity(&self) -> Option<usize>
pub fn capacity(&self) -> Option<usize>
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§
Source§impl<T> GetStaticEquivalent_ for RSender<T>where
T: __StableAbi,
impl<T> GetStaticEquivalent_ for RSender<T>where
T: __StableAbi,
Source§type StaticEquivalent = _static_RSender<<T as GetStaticEquivalent_>::StaticEquivalent>
type StaticEquivalent = _static_RSender<<T as GetStaticEquivalent_>::StaticEquivalent>
'static equivalent of SelfSource§impl<T> StableAbi for RSender<T>where
T: __StableAbi,
impl<T> StableAbi for RSender<T>where
T: __StableAbi,
Source§const LAYOUT: &'static TypeLayout
const LAYOUT: &'static TypeLayout
Source§type IsNonZeroType = False
type IsNonZeroType = False
Source§const ABI_CONSTS: AbiConsts = _
const ABI_CONSTS: AbiConsts = _
const-equivalents of the associated types.impl<T: Send> Send for RSender<T>
impl<T: Send> Sync for RSender<T>
Auto Trait Implementations§
impl<T> Freeze for RSender<T>
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§
Source§impl<T> AlignerFor<1> for T
impl<T> AlignerFor<1> for T
Source§impl<T> AlignerFor<1024> for T
impl<T> AlignerFor<1024> for T
Source§type Aligner = AlignTo1024<T>
type Aligner = AlignTo1024<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> AlignerFor<128> for T
impl<T> AlignerFor<128> for T
Source§type Aligner = AlignTo128<T>
type Aligner = AlignTo128<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> AlignerFor<16> for T
impl<T> AlignerFor<16> for T
Source§impl<T> AlignerFor<16384> for T
impl<T> AlignerFor<16384> for T
Source§type Aligner = AlignTo16384<T>
type Aligner = AlignTo16384<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> AlignerFor<2> for T
impl<T> AlignerFor<2> for T
Source§impl<T> AlignerFor<2048> for T
impl<T> AlignerFor<2048> for T
Source§type Aligner = AlignTo2048<T>
type Aligner = AlignTo2048<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> AlignerFor<256> for T
impl<T> AlignerFor<256> for T
Source§type Aligner = AlignTo256<T>
type Aligner = AlignTo256<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> AlignerFor<32> for T
impl<T> AlignerFor<32> for T
Source§impl<T> AlignerFor<32768> for T
impl<T> AlignerFor<32768> for T
Source§type Aligner = AlignTo32768<T>
type Aligner = AlignTo32768<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> AlignerFor<4> for T
impl<T> AlignerFor<4> for T
Source§impl<T> AlignerFor<4096> for T
impl<T> AlignerFor<4096> for T
Source§type Aligner = AlignTo4096<T>
type Aligner = AlignTo4096<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> AlignerFor<512> for T
impl<T> AlignerFor<512> for T
Source§type Aligner = AlignTo512<T>
type Aligner = AlignTo512<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> AlignerFor<64> for T
impl<T> AlignerFor<64> for T
Source§impl<T> AlignerFor<8> for T
impl<T> AlignerFor<8> for T
Source§impl<T> AlignerFor<8192> for T
impl<T> AlignerFor<8192> for T
Source§type Aligner = AlignTo8192<T>
type Aligner = AlignTo8192<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<'a, T> RCowCompatibleRef<'a> for Twhere
T: Clone + 'a,
impl<'a, T> RCowCompatibleRef<'a> for Twhere
T: Clone + 'a,
Source§fn as_c_ref(from: &'a T) -> <T as RCowCompatibleRef<'a>>::RefC
fn as_c_ref(from: &'a T) -> <T as RCowCompatibleRef<'a>>::RefC
Source§fn as_rust_ref(from: <T as RCowCompatibleRef<'a>>::RefC) -> &'a T
fn as_rust_ref(from: <T as RCowCompatibleRef<'a>>::RefC) -> &'a T
Source§impl<S> ROExtAcc for S
impl<S> ROExtAcc for S
Source§fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
offset. Read moreSource§fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
offset. Read moreSource§fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
offset. Read moreSource§fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
offset. Read moreSource§impl<S> ROExtOps<Aligned> for S
impl<S> ROExtOps<Aligned> for S
Source§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
offset) with value,
returning the previous value of the field. Read moreSource§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
Source§impl<S> ROExtOps<Unaligned> for S
impl<S> ROExtOps<Unaligned> for S
Source§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
offset) with value,
returning the previous value of the field. Read moreSource§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
Source§impl<T> SelfOps for Twhere
T: ?Sized,
impl<T> SelfOps for Twhere
T: ?Sized,
Source§fn piped<F, U>(self, f: F) -> U
fn piped<F, U>(self, f: F) -> U
Source§fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
piped except that the function takes &Self
Useful for functions that take &Self instead of Self. Read moreSource§fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
piped, except that the function takes &mut Self.
Useful for functions that take &mut Self instead of Self.Source§fn mutated<F>(self, f: F) -> Self
fn mutated<F>(self, f: F) -> Self
Source§fn observe<F>(self, f: F) -> Self
fn observe<F>(self, f: F) -> Self
Source§fn as_ref_<T>(&self) -> &T
fn as_ref_<T>(&self) -> &T
AsRef,
using the turbofish .as_ref_::<_>() syntax. Read more