squib_api/schemas/
actions.rs1use serde::{Deserialize, Serialize};
11
12#[derive(Debug, Clone, Copy, Eq, PartialEq, Serialize, Deserialize)]
14pub enum InstanceAction {
15 InstanceStart,
17 FlushMetrics,
19 SendCtrlAltDel,
21}
22
23#[derive(Debug, Clone, Deserialize)]
25#[serde(deny_unknown_fields)]
26pub struct RawInstanceActionInfo {
27 pub action_type: InstanceAction,
29}
30
31#[derive(Debug, Clone, Serialize)]
35#[non_exhaustive]
36pub struct InstanceActionInfo {
37 pub action_type: InstanceAction,
39}
40
41impl From<RawInstanceActionInfo> for InstanceActionInfo {
42 fn from(raw: RawInstanceActionInfo) -> Self {
43 Self {
44 action_type: raw.action_type,
45 }
46 }
47}
48
49#[cfg(test)]
50mod tests {
51 use super::*;
52
53 #[test]
54 fn test_should_deserialize_instance_start_pascal_case() {
55 let json = r#"{"action_type":"InstanceStart"}"#;
56 let raw: RawInstanceActionInfo = serde_json::from_str(json).unwrap();
57 assert_eq!(raw.action_type, InstanceAction::InstanceStart);
58 }
59
60 #[test]
61 fn test_should_deserialize_send_ctrl_alt_del_for_arch_rejection_downstream() {
62 let json = r#"{"action_type":"SendCtrlAltDel"}"#;
63 let raw: RawInstanceActionInfo = serde_json::from_str(json).unwrap();
64 assert_eq!(raw.action_type, InstanceAction::SendCtrlAltDel);
65 }
66
67 #[test]
68 fn test_should_reject_unknown_action() {
69 let json = r#"{"action_type":"Frobnicate"}"#;
70 assert!(serde_json::from_str::<RawInstanceActionInfo>(json).is_err());
71 }
72}