hydro2_basic_operators/
no_op.rs1crate::ix!();
3
4#[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}