rtd 0.3.3

Manage your todo in command line
Documentation
pub trait MultiProcessor<T> {
    fn process_single(&self, task_id: u32) -> Result<T, String>;

    fn process(&self, inputs: Vec<&str>, outputter: Box<dyn Fn(T) -> ()>) -> Result<(), String> {
        let results = inputs.iter().map(|input| {
            input
                .parse()
                .map_err(|_| format!("Invalid task id: {}", input))
                .and_then(|task_id| self.process_single(task_id))
        });

        let mut captured_error = None;
        results.for_each(|result| match result {
            Ok(value) => outputter(value),
            Err(err) => captured_error = Some(err),
        });

        match captured_error {
            None => Ok(()),
            Some(err) => Err(err),
        }
    }
}