use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum AgentTelemetry {
Heartbeat(Heartbeat),
RobotAck(RobotAck),
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Heartbeat {
pub seq: u64,
pub sent_time_ms: i64,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct HeartbeatAck {
pub seq: u64,
pub robot_sent_time_ms: i64,
pub server_recv_time_ms: i64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum AckStatus {
Sent,
AgentReceived,
AgentRejected,
RobotReceived,
RobotRejected,
RobotStateConfirmed,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RobotAck {
pub command_id: Uuid,
pub status: AckStatus, pub reason: Option<String>,
pub received_at_ms: i64,
}