Add back support for cloning sender/receiver

* Remove level of import indirection for Channel and Signal.
This commit is contained in:
Ulf Lilleengen 2022-04-07 15:15:44 +02:00
parent fee0aef076
commit 9206584aa9
2 changed files with 37 additions and 2 deletions

View file

@ -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();

View file

@ -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::*;