assemblyline_models/messages/
changes.rs

1//! Messages about configuration changes internal to assemblyline.
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, strum::FromRepr, strum::EnumIs, PartialEq, Eq, Clone, Copy)]
6#[repr(u8)]
7pub enum Operation {
8    Added = 1,
9    Removed = 2,
10    Modified = 3,
11    Incompatible = 4
12}
13
14impl Serialize for Operation {
15    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
16    where
17        S: serde::Serializer {
18        (*self as u8).serialize(serializer)
19    }
20}
21
22impl<'de> Deserialize<'de> for Operation {
23    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
24    where
25        D: serde::Deserializer<'de> {
26        let value = u8::deserialize(deserializer)?;
27        Self::from_repr(value).ok_or(serde::de::Error::custom("could not read service change operation"))
28    }
29}
30
31#[derive(Debug, Serialize, Deserialize)]
32pub struct ServiceChange {
33    pub name: String,
34    pub operation: Operation,
35}
36
37#[derive(Debug, Serialize, Deserialize)]
38pub struct HeuristicChange {
39    pub service_name: String,
40    pub operation: Operation,
41}
42
43
44// @dataclass
45// class SignatureChange:
46//     signature_id: str
47//     signature_type: str
48//     source: str
49//     operation: Operation
50
51//     @staticmethod
52//     def serialize(obj: SignatureChange) -> str:
53//         return json.dumps(asdict(obj))
54
55//     @staticmethod
56//     def deserialize(data: str) -> SignatureChange:
57//         return SignatureChange(**json.loads(data))