1 |
yuzu |
17 |
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 |
|
|
} |