summaryrefslogtreecommitdiff
path: root/src/tasks.rs
blob: 9475d60d0bf4fc77cb17e354e71bd610a0f530dd (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
32
33
34
35
36
37
38
39
40
41
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),
}