dji-log-parser 0.5.7

Library for parsing DJI txt logs
Documentation
use binrw::binread;
use serde::Serialize;
#[cfg(target_arch = "wasm32")]
use tsify_next::Tsify;

use crate::utils::sub_byte_field;

#[binread]
#[derive(Serialize, Debug)]
#[serde(rename_all = "camelCase")]
#[br(little)]
#[cfg_attr(target_arch = "wasm32", derive(Tsify))]
pub struct Deform {
    #[br(temp)]
    _bitpack1: u8,
    #[br(calc(sub_byte_field(_bitpack1, 0x01) == 1))]
    pub is_deform_protected: bool,
    #[br(calc(DeformStatus::from(sub_byte_field(_bitpack1, 0x0E))))]
    pub deform_status: DeformStatus,
    #[br(calc(DeformMode::from(sub_byte_field(_bitpack1, 0x30))))]
    pub deform_mode: DeformMode,
}

#[derive(Serialize, Debug)]
#[cfg_attr(target_arch = "wasm32", derive(Tsify))]
pub enum DeformMode {
    Pack,
    Protect,
    Normal,
    #[serde(untagged)]
    Unknown(u8),
}

impl From<u8> for DeformMode {
    fn from(value: u8) -> Self {
        match value {
            0 => DeformMode::Pack,
            1 => DeformMode::Protect,
            2 => DeformMode::Normal,
            _ => DeformMode::Unknown(value),
        }
    }
}

#[derive(Serialize, Debug)]
#[cfg_attr(target_arch = "wasm32", derive(Tsify))]
pub enum DeformStatus {
    FoldComplete,
    Folding,
    StretchComplete,
    Stretching,
    StopDeformation,
    #[serde(untagged)]
    Unknown(u8),
}

impl From<u8> for DeformStatus {
    fn from(value: u8) -> Self {
        match value {
            1 => DeformStatus::FoldComplete,
            2 => DeformStatus::Folding,
            3 => DeformStatus::StretchComplete,
            4 => DeformStatus::Stretching,
            5 => DeformStatus::StopDeformation,
            _ => DeformStatus::Unknown(value),
        }
    }
}