use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum PresenceState {
Online,
Offline,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceStatus {
pub state: PresenceState,
pub runner_id: Uuid,
pub started_at: u64,
pub driver_version: String,
pub pid: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RunnerStatus {
pub state: PresenceState,
pub device_uuids: Vec<Uuid>,
pub started_at: u64,
pub runner_version: String,
pub pid: u32,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn device_status_roundtrip() {
let s = DeviceStatus {
state: PresenceState::Online,
runner_id: Uuid::now_v7(),
started_at: 1_700_000_000,
driver_version: "0.4.1".into(),
pid: 1234,
};
let json = serde_json::to_string(&s).unwrap();
let back: DeviceStatus = serde_json::from_str(&json).unwrap();
assert_eq!(back.state, PresenceState::Online);
assert_eq!(back.driver_version, "0.4.1");
}
#[test]
fn runner_status_shape() {
let s = RunnerStatus {
state: PresenceState::Offline,
device_uuids: vec![Uuid::now_v7(), Uuid::now_v7()],
started_at: 1_700_000_000,
runner_version: "0.12.0".into(),
pid: 1234,
};
let json = serde_json::to_string(&s).unwrap();
assert!(json.contains(r#""state":"offline""#));
assert!(json.contains(r#""device_uuids":["#));
}
}