flowstdlib 0.142.0

The standard library of functions and flows for 'flow' programs
Documentation
use serde_json::Value;

use flowcore::{RUN_AGAIN, RunAgain};
use flowcore::errors::*;
use flowmacro::flow_function;

#[flow_function]
fn _tap(inputs: &[Value]) -> Result<(Option<Value>, RunAgain)> {
    let mut value = None;
    let data = &inputs[0];
    let control = &inputs[1].as_bool().ok_or("Could not get boolean")?;

    if *control {
        value = Some(data.clone());
    }

    Ok((value, RUN_AGAIN))
}

#[cfg(test)]
mod test {
    use serde_json::json;

    use flowcore::RUN_AGAIN;

    use super::_tap;

    #[test]
    fn test_tap_go() {
        let inputs = vec![json!("A"), json!(true)];
        let (output, run_again) = _tap(&inputs).expect("_tap() failed");
        assert_eq!(run_again, RUN_AGAIN);

        assert!(output.is_some());
        let value = output.expect("Could not get output value");
        assert_eq!(value, json!("A"));
    }

    #[test]
    fn test_tap_no_go() {
        let inputs = vec![json!("A"), json!(false)];
        let (output, run_again) = _tap(&inputs).expect("_tap() failed");
        assert_eq!(run_again, RUN_AGAIN);
        assert!(output.is_none());
    }
}