1 |
use serde::{Serialize, Deserialize}; |
2 |
use uuid::Uuid; |
3 |
use super::service::ServiceConf; |
4 |
|
5 |
#[derive(Serialize, Deserialize)] |
6 |
pub enum SalarymanPacket { |
7 |
Ping, |
8 |
Pong, |
9 |
Okay, |
10 |
Create(ServiceConf), |
11 |
Delete(Uuid), |
12 |
Start(Uuid), |
13 |
Stop(Uuid), |
14 |
Restart(Uuid), |
15 |
|
16 |
Quit, |
17 |
Invalid, |
18 |
} |
19 |
impl SalarymanPacket { |
20 |
/// Used to encode the enum and any nested structs for network transmission |
21 |
pub fn serialize(&self) -> Result<Vec<u8>, bincode::error::EncodeError>{ |
22 |
bincode::serde::encode_to_vec(&self, bincode::config::standard()) |
23 |
} |
24 |
/// Used to decode the enum and any nested struct from a network transmission |
25 |
pub fn deserialize(data: &[u8]) -> Result<SalarymanPacket, bincode::error::DecodeError> { |
26 |
let (ret, _size) = bincode::serde::decode_from_slice(data, bincode::config::standard())?; |
27 |
Ok(ret) |
28 |
} |
29 |
/// Generates a response from a given SalarymanPacket invariant |
30 |
pub fn response(&self) -> Self { |
31 |
match self { |
32 |
Self::Ping => Self::Pong, |
33 |
Self::Create(_) => Self::Okay, |
34 |
Self::Delete(_) => Self::Okay, |
35 |
Self::Start(_) => Self::Okay, |
36 |
Self::Stop(_) => Self::Okay, |
37 |
Self::Restart(_) => Self::Okay, |
38 |
Self::Quit => Self::Okay, |
39 |
_ => Self::Invalid, |
40 |
} |
41 |
} |
42 |
} |