summaryrefslogtreecommitdiff
path: root/src/tasks.rs
blob: 64d97ad97787adae3688e3f3e84cb83cde5f9c6d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use serde::Deserialize;

pub type TaskOutput = Result<String, String>;
pub mod client;
pub mod server;

#[derive(Clone, Copy)]
pub struct Task<N: PartialEq, T = ()> {
    pub name: N,
    pub exec: fn(&[&str], &T) -> TaskOutput,
}

#[derive(Deserialize)]
pub struct CompletedTask<N> {
    pub name: N,
    pub output: Option<TaskOutput>,
}

impl<N> From<(N, TaskOutput)> for CompletedTask<N> {
    fn from((name, output): (N, TaskOutput)) -> Self {
        CompletedTask {
            name,
            output: Some(output),
        }
    }
}

#[derive(Debug)]
pub enum IntoTaskErr {
    NotFound(String),
}