d3_core/channel/
receiver.rs1use self::connection::*;
2use super::*;
3use crossbeam::channel::{RecvError, RecvTimeoutError, TryRecvError};
4
5pub struct Receiver<T>
9where
10 T: MachineImpl,
11{
12 channel_id: usize,
13 connection: ThreadSafeConnection,
14 pub receiver: crossbeam::channel::Receiver<T>,
15}
16
17impl<T> Receiver<T>
18where
19 T: MachineImpl,
20{
21 pub fn get_id(&self) -> usize { self.channel_id }
22 pub fn clone_receiver(&self) -> crossbeam::channel::Receiver<T> { self.receiver.clone() }
23 pub fn receiver(&self) -> &crossbeam::channel::Receiver<T> { &self.receiver }
24 pub fn try_recv(&self) -> Result<T, TryRecvError> { self.receiver.try_recv() }
25 pub fn recv(&self) -> Result<T, RecvError> { self.receiver.recv() }
26 pub fn recv_timeout(&self, timeout: std::time::Duration) -> Result<T, RecvTimeoutError> { self.receiver.recv_timeout(timeout) }
27 pub fn is_empty(&self) -> bool { self.receiver.is_empty() }
28 pub fn is_full(&self) -> bool { self.receiver.is_full() }
29 pub fn len(&self) -> usize { self.receiver.len() }
30 pub fn capacity(&self) -> Option<usize> { self.receiver.capacity() }
31 pub fn iter(&self) -> crossbeam::channel::Iter<'_, T> { self.receiver.iter() }
32 pub fn try_iter(&self) -> crossbeam::channel::TryIter<'_, T> { self.receiver.try_iter() }
33}
34
35impl<T> Clone for Receiver<T>
36where
37 T: MachineImpl,
38{
39 fn clone(&self) -> Self {
40 Self {
41 channel_id: self.channel_id,
42 connection: Arc::clone(&self.connection),
43 receiver: self.receiver.clone(),
44 }
45 }
46}
47
48impl<T> fmt::Debug for Receiver<T>
49where
50 T: MachineImpl,
51{
52 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { self.receiver.fmt(f) }
53}
54
55impl<T> PartialEq for Receiver<T>
56where
57 T: MachineImpl,
58{
59 fn eq(&self, other: &Self) -> bool { self.channel_id == other.channel_id && self.receiver.same_channel(&other.receiver) }
60}
61
62impl<T> Eq for Receiver<T> where T: MachineImpl {}
63
64pub fn wrap_receiver<T>(receiver: crossbeam::channel::Receiver<T>, channel_id: usize, connection: ThreadSafeConnection) -> Receiver<T>
65where
66 T: MachineImpl,
67{
68 Receiver::<T> {
69 channel_id,
70 connection,
71 receiver,
72 }
73}