Skip to main content

squib_api/schemas/
vm.rs

1//! `PATCH /vm` body — pause / resume.
2
3use serde::{Deserialize, Serialize};
4
5/// State change requested through `PATCH /vm`.
6#[derive(Debug, Clone, Copy, Eq, PartialEq, Serialize, Deserialize)]
7pub enum VmStateChange {
8    /// Pause vCPUs.
9    Paused,
10    /// Resume vCPUs.
11    Resumed,
12}
13
14/// Raw `PATCH /vm` body off the wire.
15#[derive(Debug, Clone, Deserialize)]
16#[serde(deny_unknown_fields)]
17pub struct RawVmPatch {
18    /// Target state.
19    pub state: VmStateChange,
20}
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25
26    #[test]
27    fn test_should_deserialize_paused() {
28        let raw: RawVmPatch = serde_json::from_str(r#"{"state":"Paused"}"#).unwrap();
29        assert_eq!(raw.state, VmStateChange::Paused);
30    }
31
32    #[test]
33    fn test_should_deserialize_resumed() {
34        let raw: RawVmPatch = serde_json::from_str(r#"{"state":"Resumed"}"#).unwrap();
35        assert_eq!(raw.state, VmStateChange::Resumed);
36    }
37
38    #[test]
39    fn test_should_reject_unknown_state() {
40        assert!(serde_json::from_str::<RawVmPatch>(r#"{"state":"Halted"}"#).is_err());
41    }
42}