userd 0.2.0

A user daemon, managing services and regular running of jobs, in user space.
use futures::future::BoxFuture;

use crate::prelude::*;

pub(crate) mod file_watcher;
pub(crate) mod time;

pub(crate) trait Trigger {
    fn wait_for(&self) -> BoxFuture<'static, Result<()>>;
}

pub(crate) type TriggerBox = Box<dyn Trigger + Send + Sync>;

fn build_trigger(trigger: config::Trigger) -> Result<TriggerBox> {
    match trigger {
        config::Trigger::Every { duration } => Ok(Box::new(triggers::time::Every::new(duration))),
    }
}

pub(crate) fn build_triggers(triggers: Vec<config::Trigger>) -> Result<Vec<TriggerBox>> {
    triggers
        .into_iter()
        .map(|trigger| build_trigger(trigger))
        .collect()
}