use arma_rs::{FromArma, FromArmaError}; pub struct UasTelemetryPayload { pub address: String, pub system_id: u8, pub component_id: u8, pub vehicle_type: u8, pub lat_deg: f64, pub lon_deg: f64, pub alt_msl_m: f32, pub rel_alt_m: f32, pub heading_deg: f32, pub groundspeed_mps: f32, pub roll_deg: f32, pub pitch_deg: f32, pub yaw_deg: f32, pub flying: bool, } #[allow(dead_code)] pub struct UasSystemPayload { pub address: String, pub entity_uuid: String, pub callsign: String, pub vehicle_type: u8, pub lat_deg: f64, pub lon_deg: f64, pub alt_msl_m: f32, pub rel_alt_m: f32, pub heading_deg: f32, pub groundspeed_mps: f32, pub roll_deg: f32, pub pitch_deg: f32, pub yaw_deg: f32, pub flying: bool, pub landed: bool, pub gimbal_roll_deg: f32, pub gimbal_pitch_deg: f32, pub gimbal_yaw_deg: f32, pub video_uri: String, pub hfov_deg: f32, pub vfov_deg: f32, pub image_lat_deg: f64, pub image_lon_deg: f64, pub image_alt_msl_m: f32, pub has_turret_camera: bool, pub battery_remaining_pct: i8, } impl FromArma for UasTelemetryPayload { fn from_arma(data: String) -> Result { let ( address, system_id, component_id, vehicle_type, lat_deg, lon_deg, alt_msl_m, rel_alt_m, heading_deg, groundspeed_mps, roll_deg, pitch_deg, yaw_deg, flying, ) = <( String, i32, i32, i32, f64, f64, f32, f32, f32, f32, f32, f32, f32, i32, )>::from_arma(data)?; Ok(Self { address, system_id: system_id.clamp(1, 255) as u8, component_id: component_id.clamp(1, 255) as u8, vehicle_type: vehicle_type.clamp(0, 255) as u8, lat_deg, lon_deg, alt_msl_m, rel_alt_m, heading_deg, groundspeed_mps, roll_deg, pitch_deg, yaw_deg, flying: flying != 0, }) } } impl FromArma for UasSystemPayload { fn from_arma(data: String) -> Result { let ( address, entity_uuid, callsign, vehicle_type, lat_deg, lon_deg, alt_msl_m, rel_alt_m, heading_deg, groundspeed_mps, roll_deg, pitch_deg, yaw_deg, flying, landed, gimbal_roll_deg, gimbal_pitch_deg, gimbal_yaw_deg, video_uri, hfov_deg, vfov_deg, image_lat_deg, image_lon_deg, image_alt_msl_m, has_turret_camera, battery_remaining_pct, ) = <( String, String, String, i32, f64, f64, f32, f32, f32, f32, f32, f32, f32, i32, i32, f32, f32, f32, String, f32, f32, f64, f64, f32, i32, i32, )>::from_arma(data)?; Ok(Self { address, entity_uuid, callsign, vehicle_type: vehicle_type.clamp(0, 255) as u8, lat_deg, lon_deg, alt_msl_m, rel_alt_m, heading_deg, groundspeed_mps, roll_deg, pitch_deg, yaw_deg, flying: flying != 0, landed: landed != 0, gimbal_roll_deg, gimbal_pitch_deg, gimbal_yaw_deg, video_uri, hfov_deg, vfov_deg, image_lat_deg, image_lon_deg, image_alt_msl_m, has_turret_camera: has_turret_camera != 0, battery_remaining_pct: battery_remaining_pct.clamp(0, 100) as i8, }) } }