#![allow(missing_docs)]
use super::spinner::{spinner, Spinner};
type TaskFn = Box<dyn FnOnce(&Spinner) -> Option<String> + Send + 'static>;
pub struct Task {
title: String,
body: TaskFn,
enabled: bool,
}
impl Task {
pub fn new<F>(title: impl Into<String>, body: F) -> Self
where
F: FnOnce(&Spinner) -> Option<String> + Send + 'static,
{
Self {
title: title.into(),
body: Box::new(body),
enabled: true,
}
}
pub fn enabled(mut self, v: bool) -> Self {
self.enabled = v;
self
}
}
pub fn tasks(items: Vec<Task>) {
for t in items {
if !t.enabled {
continue;
}
let s = spinner();
s.start(&t.title);
let result = (t.body)(&s);
s.stop(result.unwrap_or(t.title));
}
}