use serde::{Deserialize, Serialize};
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "command", rename_all = "snake_case")]
pub enum RunControlCommand {
CancelCurrentRun {
#[serde(default)]
reason: String,
},
StopRuntimeExecutor {
#[serde(default)]
reason: String,
},
}
#[cfg(test)]
#[allow(clippy::unwrap_used)]
mod tests {
use super::*;
#[test]
fn cancel_serde_roundtrip() {
let cmd = RunControlCommand::CancelCurrentRun {
reason: "user request".into(),
};
let json = serde_json::to_value(&cmd).unwrap();
assert_eq!(json["command"], "cancel_current_run");
let parsed: RunControlCommand = serde_json::from_value(json).unwrap();
assert_eq!(cmd, parsed);
}
#[test]
fn stop_serde_roundtrip() {
let cmd = RunControlCommand::StopRuntimeExecutor {
reason: "shutdown".into(),
};
let json = serde_json::to_value(&cmd).unwrap();
assert_eq!(json["command"], "stop_runtime_executor");
let parsed: RunControlCommand = serde_json::from_value(json).unwrap();
assert_eq!(cmd, parsed);
}
}