use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum SessionIncidentType {
CollisionMultiDeviceOtherDirectControl,
CollisionMultiDeviceOtherRemoteControl,
CollisionSingleDeviceEnvironment,
LinkLoss,
Other,
}
impl From<&str> for SessionIncidentType {
fn from(s: &str) -> Self {
match s {
"collision_multi_device_other_direct_control" => {
SessionIncidentType::CollisionMultiDeviceOtherDirectControl
}
"collision_multi_device_other_remote_control" => {
SessionIncidentType::CollisionMultiDeviceOtherRemoteControl
}
"collision_single_device_environment" => {
SessionIncidentType::CollisionSingleDeviceEnvironment
}
"link_loss" => SessionIncidentType::LinkLoss,
_ => SessionIncidentType::Other,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SessionIncident {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<i64>,
pub session_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub operator: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device_mode: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device_altitude: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device_speed: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device_location: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub photo: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device_battery_volts: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device_battery_percentage: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device_battery_time_remaining: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub incident_type: Option<SessionIncidentType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp_observation: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub additional_details: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub additional_details_version: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_by: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_by: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
}