use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Serialize, Deserialize)]
pub enum WidgetType {
#[serde(rename = "map")]
Map,
#[serde(rename = "bar")]
Bar,
#[serde(rename = "gyro")]
Gyro,
#[serde(rename = "accelerometer")]
Accelerometer,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum WidgetSubType {
#[serde(rename = "x")]
GyroX,
#[serde(rename = "y")]
GyroY,
#[serde(rename = "z")]
GyroZ,
#[serde(rename = "x")]
AccelX,
#[serde(rename = "y")]
AccelY,
#[serde(rename = "z")]
AccelZ,
#[serde(rename = "lat")]
Latitude,
#[serde(rename = "lon")]
Longitude,
#[serde(rename = "min")]
Minimum,
#[serde(rename = "max")]
Maximum,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DataSet {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "t")]
pub title: Option<String>,
#[serde(rename = "v")]
pub value: Value,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "u")]
pub unit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "g")]
pub graph: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "w")]
pub w_type: Option<WidgetSubType>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DataGroup {
#[serde(rename = "t")]
pub title: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "w")]
pub widget_type: Option<WidgetType>,
#[serde(rename = "d")]
pub datasets: Vec<DataSet>
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TelemetryFrame {
#[serde(rename = "t")]
pub title: String,
#[serde(rename = "g")]
pub groups: Vec<DataGroup>,
}