hydro2_basic_operators/
no_op.rs

1// ---------------- [ File: src/no_op.rs ]
2crate::ix!();
3
4// --------------------------------------
5// NoOpOperator<T>
6// --------------------------------------
7#[derive(NamedItem, Operator, Debug)]
8#[operator(
9    execute="do_nothing",
10    opcode="BasicOpCode::NoOp"
11)]
12pub struct NoOpOperator
13{
14    name: String,
15}
16
17impl NoOpOperator
18{
19    pub fn with_name(x: impl AsRef<str>) -> Self {
20        Self {
21            name: x.as_ref().to_string(),
22        }
23    }
24
25    async fn do_nothing(&self) -> NetResult<()> {
26        info!("NoOpOperator => does nothing");
27        Ok(())
28    }
29}
30
31impl Default for NoOpOperator
32{
33    fn default() -> Self {
34        NoOpOperator::with_name("default")
35    }
36}
37
38#[cfg(test)]
39mod no_op_operator_tests {
40    use super::*;
41
42    #[tokio::test]
43    async fn test_no_op_operator_basic() -> Result<(), NetworkError> {
44        let nop = NoOpOperator::default();
45        let input: [Option<&NoOpOperatorIO>;4] = [None,None,None,None];
46        let mut out: [Option<NoOpOperatorIO>;4] = [None,None,None,None];
47
48        nop.execute(input, &mut out).await?;
49        assert_eq!(out[0], None);
50        assert_eq!(nop.name(), "default");
51        Ok(())
52    }
53
54    #[tokio::test]
55    async fn test_no_op_operator_with_name() -> Result<(), NetworkError> {
56        let nop = NoOpOperator::with_name("my-noop");
57        assert_eq!(nop.name(), "my-noop");
58        let input = [None,None,None,None];
59        let mut out = [None,None,None,None];
60        nop.execute(input, &mut out).await?;
61        assert_eq!(out, [None,None,None,None]);
62        Ok(())
63    }
64}