dji_log_parser/record/
component_serial.rs

1use binrw::binread;
2use serde::Serialize;
3#[cfg(target_arch = "wasm32")]
4use tsify_next::Tsify;
5
6#[binread]
7#[derive(Serialize, Debug)]
8#[serde(rename_all = "camelCase")]
9#[cfg_attr(target_arch = "wasm32", derive(Tsify))]
10pub struct ComponentSerial {
11    #[br(map = |x: u16| ComponentType::from(x as u8))]
12    pub component_type: ComponentType,
13    #[br(temp)]
14    length: u8,
15    #[br(count=length, map = |s: Vec<u8>| String::from_utf8_lossy(&s).trim_end_matches('\0').to_string())]
16    pub serial: String,
17}
18
19#[derive(Serialize, Debug, Clone, Copy)]
20#[cfg_attr(target_arch = "wasm32", derive(Tsify))]
21pub enum ComponentType {
22    Camera,
23    Aircraft,
24    RC,
25    Battery,
26    #[serde(untagged)]
27    Unknown(u8),
28}
29
30impl ComponentType {
31    pub fn from(value: u8) -> Self {
32        match value {
33            1 => ComponentType::Camera,
34            2 => ComponentType::Aircraft,
35            3 => ComponentType::RC,
36            4 => ComponentType::Battery,
37            _ => ComponentType::Unknown(value),
38        }
39    }
40}