batch-processing 0.1.17

A batch library for processing a list of items in parallel
Documentation
#[cfg(test)]
mod complex_step_test {
    use std::sync::{Arc, Mutex};

    use batch_processing::sync::step::{complex_step, Runner};
    use batch_processing::sync::step::complex_step::ComplexStepBuilderTrait;
    use batch_processing::sync::step::step_builder::StepBuilderTrait;

    #[test]
    fn test_complex_step() {
        let test: Arc<Mutex<Vec<i64>>> = Arc::new(Mutex::new(Vec::new()));
        let test_clone = test.clone();

        let step = complex_step::get::<String, i64>("complex_step".to_string())
            .throw_tolerant()
            .reader(Box::new(|| {
                Box::new(vec![String::from("1")].into_iter())
            }))
            .processor(Box::new(|| {
                Box::new(|x: String| {
                    x.parse().unwrap()
                })
            }))
            .writer(Box::new(move || {
                let test = test_clone.clone();
                Box::new(
                    move |x: &Vec<i64>| {
                        test.lock().unwrap().push(x[0]);
                    }
                )
            }))
        .build();

        let step_result = step.run();

        let binding = test.clone();
        let test_clone = binding.lock().unwrap();

        assert_eq!(test_clone.len(), 1, "The length of the vector should be 1");

        assert_eq!(test_clone[0], 1, "The first element should be 1");

        assert!(step_result.status.is_ok(), "The step should be successful")
    }
}