Add back support for cloning sender/receiver
* Remove level of import indirection for Channel and Signal.
This commit is contained in:
parent
fee0aef076
commit
9206584aa9
2 changed files with 37 additions and 2 deletions
|
@ -28,7 +28,7 @@ use crate::blocking_mutex::Mutex;
|
||||||
use crate::waitqueue::WakerRegistration;
|
use crate::waitqueue::WakerRegistration;
|
||||||
|
|
||||||
/// Send-only access to a [`Channel`].
|
/// Send-only access to a [`Channel`].
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy)]
|
||||||
pub struct Sender<'ch, M, T, const N: usize>
|
pub struct Sender<'ch, M, T, const N: usize>
|
||||||
where
|
where
|
||||||
M: RawMutex,
|
M: RawMutex,
|
||||||
|
@ -36,6 +36,17 @@ where
|
||||||
channel: &'ch Channel<M, T, N>,
|
channel: &'ch Channel<M, T, N>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'ch, M, T, const N: usize> Clone for Sender<'ch, M, T, N>
|
||||||
|
where
|
||||||
|
M: RawMutex,
|
||||||
|
{
|
||||||
|
fn clone(&self) -> Self {
|
||||||
|
Sender {
|
||||||
|
channel: self.channel,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<'ch, M, T, const N: usize> Sender<'ch, M, T, N>
|
impl<'ch, M, T, const N: usize> Sender<'ch, M, T, N>
|
||||||
where
|
where
|
||||||
M: RawMutex,
|
M: RawMutex,
|
||||||
|
@ -56,7 +67,7 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Receive-only access to a [`Channel`].
|
/// Receive-only access to a [`Channel`].
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy)]
|
||||||
pub struct Receiver<'ch, M, T, const N: usize>
|
pub struct Receiver<'ch, M, T, const N: usize>
|
||||||
where
|
where
|
||||||
M: RawMutex,
|
M: RawMutex,
|
||||||
|
@ -64,6 +75,17 @@ where
|
||||||
channel: &'ch Channel<M, T, N>,
|
channel: &'ch Channel<M, T, N>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'ch, M, T, const N: usize> Clone for Receiver<'ch, M, T, N>
|
||||||
|
where
|
||||||
|
M: RawMutex,
|
||||||
|
{
|
||||||
|
fn clone(&self) -> Self {
|
||||||
|
Receiver {
|
||||||
|
channel: self.channel,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<'ch, M, T, const N: usize> Receiver<'ch, M, T, N>
|
impl<'ch, M, T, const N: usize> Receiver<'ch, M, T, N>
|
||||||
where
|
where
|
||||||
M: RawMutex,
|
M: RawMutex,
|
||||||
|
@ -379,6 +401,16 @@ mod tests {
|
||||||
assert_eq!(c.try_recv().unwrap(), 1);
|
assert_eq!(c.try_recv().unwrap(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn cloning() {
|
||||||
|
let c = Channel::<NoopRawMutex, u32, 3>::new();
|
||||||
|
let r1 = c.receiver();
|
||||||
|
let s1 = c.sender();
|
||||||
|
|
||||||
|
let _ = r1.clone();
|
||||||
|
let _ = s1.clone();
|
||||||
|
}
|
||||||
|
|
||||||
#[futures_test::test]
|
#[futures_test::test]
|
||||||
async fn receiver_receives_given_try_send_async() {
|
async fn receiver_receives_given_try_send_async() {
|
||||||
let executor = ThreadPool::new().unwrap();
|
let executor = ThreadPool::new().unwrap();
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
//! Async channels
|
//! Async channels
|
||||||
|
|
||||||
pub mod channel;
|
pub mod channel;
|
||||||
|
pub use channel::*;
|
||||||
|
|
||||||
pub mod signal;
|
pub mod signal;
|
||||||
|
pub use signal::*;
|
||||||
|
|
Loading…
Reference in a new issue