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
18impl 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}