bsp_types/task/
kind.rs

1use serde::{
2    de::{Deserialize, Deserializer},
3    ser::{Serialize, Serializer},
4};
5
6#[derive(Debug, Clone)]
7pub enum TaskDataKind {
8    CompileTask,
9    CompileReport,
10    TestTask,
11    TestReport,
12    TestStart,
13    TestFinish,
14    Custom(String),
15    None,
16}
17
18// TODO: Test might break!
19impl Serialize for TaskDataKind {
20    fn serialize<S: Serializer>(&self, ser: S) -> Result<S::Ok, S::Error> {
21        let s = match self {
22            TaskDataKind::CompileTask => "compile-task",
23            TaskDataKind::CompileReport => "compile-report",
24            TaskDataKind::TestTask => "test-task",
25            TaskDataKind::TestReport => "test-report",
26            TaskDataKind::TestStart => "test-start",
27            TaskDataKind::TestFinish => "test-finish",
28            TaskDataKind::Custom(x) => x.as_str(),
29            TaskDataKind::None => return ser.serialize_none(),
30        };
31
32        ser.serialize_str(s)
33    }
34}
35
36impl<'de> Deserialize<'de> for TaskDataKind {
37    fn deserialize<D: Deserializer<'de>>(de: D) -> Result<Self, D::Error> {
38        let s = match <String>::deserialize(de) {
39            Ok(v) => v,
40            Err(_) => return Ok(Self::None),
41        };
42        let v = match s.as_str() {
43            "compile-task" => Self::CompileTask,
44            "compile-report" => Self::CompileReport,
45            "test-task" => Self::TestTask,
46            "test-report" => Self::TestReport,
47            "test-start" => Self::TestStart,
48            "test-finish" => Self::TestFinish,
49            x => Self::Custom(x.to_owned()),
50        };
51        Ok(v)
52    }
53}
54
55impl Default for TaskDataKind {
56    fn default() -> Self {
57        Self::None
58    }
59}
60
61impl TaskDataKind {
62    pub fn is_none(&self) -> bool {
63        matches!(self, Self::None)
64    }
65}