hydro2_basic_operators/
single_channel_passthrough_op.rs1crate::ix!();
3
4#[derive(NamedItem, Operator, Debug)]
8#[operator(
9 execute="pass_through",
10 opcode="BasicOpCode::SingleChannelPassthrough",
11 input0="T",
12 output0="T"
13)]
14pub struct SingleChannelPassthroughOperator<T>
15where
16 T: Copy + Debug + Send + Sync
17{
18 name: String,
19 _0: PhantomData<T>,
20}
21
22impl<T> SingleChannelPassthroughOperator<T>
23where
24 T: Copy + Debug + Send + Sync
25{
26 pub fn with_name(x: impl AsRef<str>) -> Self {
27 Self {
28 name: x.as_ref().to_string(),
29 _0: Default::default(),
30 }
31 }
32
33 async fn pass_through(&self, val: &T) -> NetResult<T> {
34 info!("SingleChannelPassthrough => pass_through: {:?}", val);
35 Ok(*val)
36 }
37}
38
39impl<T> Default for SingleChannelPassthroughOperator<T>
40where
41 T: Copy + Debug + Send + Sync
42{
43 fn default() -> Self {
44 Self::with_name("single channel passthrough")
45 }
46}
47
48#[cfg(test)]
49mod single_channel_passthrough_operator_tests {
50 use super::*;
51
52 #[tokio::test]
53 async fn test_single_channel_passthrough_noop() -> Result<(), NetworkError> {
54 let nop = SingleChannelPassthroughOperator::<i32>::with_name("test_noop");
57 assert_eq!(nop.opcode().val(), BasicOpCode::SingleChannelPassthrough.val());
58 assert_eq!(nop.name(), "test_noop");
59 assert_eq!(nop.input_count(), 1);
60 assert_eq!(nop.output_count(), 1);
61
62 let input_val = SingleChannelPassthroughOperatorIO::<i32>::Input0(123);
64 let input = [Some(&input_val), None, None, None];
65 let mut out = [None,None,None,None];
66
67 nop.execute(input, &mut out).await?;
68 assert_eq!(out[0], Some(SingleChannelPassthroughOperatorIO::Output0(123)));
70 Ok(())
71 }
72
73 #[tokio::test]
74 async fn test_single_channel_passthrough_basic() -> Result<(), NetworkError> {
75 let op = SingleChannelPassthroughOperator::<i32>::with_name("PassX");
76 let input = [Some(&SingleChannelPassthroughOperatorIO::Input0(123)), None, None, None];
77 let mut out = [None,None,None,None];
78
79 op.execute(input, &mut out).await?;
80 assert_eq!(out[0], Some(SingleChannelPassthroughOperatorIO::Output0(123)));
81 Ok(())
82 }
83
84 #[tokio::test]
85 async fn test_single_channel_passthrough_zero() -> Result<(), NetworkError> {
86 let op = SingleChannelPassthroughOperator::<i32>::with_name("PassX");
87 let input = [Some(&SingleChannelPassthroughOperatorIO::Input0(0)), None, None, None];
88 let mut out = [None,None,None,None];
89 op.execute(input, &mut out).await?;
90 assert_eq!(out[0], Some(SingleChannelPassthroughOperatorIO::Output0(0)));
91 Ok(())
92 }
93}