dji_log_parser/record/
deform.rs

1use binrw::binread;
2use serde::Serialize;
3#[cfg(target_arch = "wasm32")]
4use tsify_next::Tsify;
5
6use crate::utils::sub_byte_field;
7
8#[binread]
9#[derive(Serialize, Debug)]
10#[serde(rename_all = "camelCase")]
11#[br(little)]
12#[cfg_attr(target_arch = "wasm32", derive(Tsify))]
13pub struct Deform {
14    #[br(temp)]
15    _bitpack1: u8,
16    #[br(calc(sub_byte_field(_bitpack1, 0x01) == 1))]
17    pub is_deform_protected: bool,
18    #[br(calc(DeformStatus::from(sub_byte_field(_bitpack1, 0x0E))))]
19    pub deform_status: DeformStatus,
20    #[br(calc(DeformMode::from(sub_byte_field(_bitpack1, 0x30))))]
21    pub deform_mode: DeformMode,
22}
23
24#[derive(Serialize, Debug)]
25#[cfg_attr(target_arch = "wasm32", derive(Tsify))]
26pub enum DeformMode {
27    Pack,
28    Protect,
29    Normal,
30    #[serde(untagged)]
31    Unknown(u8),
32}
33
34impl From<u8> for DeformMode {
35    fn from(value: u8) -> Self {
36        match value {
37            0 => DeformMode::Pack,
38            1 => DeformMode::Protect,
39            2 => DeformMode::Normal,
40            _ => DeformMode::Unknown(value),
41        }
42    }
43}
44
45#[derive(Serialize, Debug)]
46#[cfg_attr(target_arch = "wasm32", derive(Tsify))]
47pub enum DeformStatus {
48    FoldComplete,
49    Folding,
50    StretchComplete,
51    Stretching,
52    StopDeformation,
53    #[serde(untagged)]
54    Unknown(u8),
55}
56
57impl From<u8> for DeformStatus {
58    fn from(value: u8) -> Self {
59        match value {
60            1 => DeformStatus::FoldComplete,
61            2 => DeformStatus::Folding,
62            3 => DeformStatus::StretchComplete,
63            4 => DeformStatus::Stretching,
64            5 => DeformStatus::StopDeformation,
65            _ => DeformStatus::Unknown(value),
66        }
67    }
68}