scout_rs 0.95.95

A Rust client for the synchornizing state with the Scout database
Documentation
use serde::{Deserialize, Serialize};

/// Classification of a session incident (`public.session_incident_type`).
#[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,
        }
    }
}

/// A notable event captured during a device session, with the operator and
/// device telemetry snapshot at the time of the incident (`public.session_incidents`).
#[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>,
}