kawaiifi 0.2.1

Wi-Fi scanning library for Linux, macOS, and Windows.
Documentation
use deku::prelude::*;
use serde::{Deserialize, Serialize};

use crate::ies::{BitRange, Field, IeId};

#[derive(Debug, Clone, PartialEq, Eq, Hash, DekuRead, DekuWrite, Serialize, Deserialize)]
#[deku(bit_order = "lsb")]
pub struct ErpInfo {
    #[deku(bits = 1)]
    pub non_erp_present: bool,
    #[deku(bits = 1)]
    pub use_protection: bool,
    #[deku(bits = 1)]
    pub barker_preamble_mode: bool,
    #[deku(bits = 5)]
    reserved: u8,
}

impl ErpInfo {
    pub const NAME: &'static str = "ERP Info";
    pub const ID: u8 = 42;
    pub const ID_ALT: u8 = 47;
    pub const ID_EXT: Option<u8> = None;
    pub(crate) const IE_ID: IeId = IeId::new(Self::ID, Self::ID_EXT);
    pub(crate) const IE_ID_ALT: IeId = IeId::new(Self::ID_ALT, Self::ID_EXT);
    pub const LENGTH: usize = 1;

    pub fn summary(&self) -> String {
        "".to_string()
    }

    pub fn fields(&self) -> Vec<Field> {
        vec![
            Field::builder()
                .title("Non ERP Present")
                .value(self.non_erp_present)
                .bits(BitRange::new(
                    self.to_bytes().unwrap_or_default().as_slice(),
                    0,
                    1,
                ))
                .build(),
            Field::builder()
                .title("Use Protection")
                .value(self.use_protection)
                .bits(BitRange::new(
                    self.to_bytes().unwrap_or_default().as_slice(),
                    1,
                    1,
                ))
                .build(),
            Field::builder()
                .title("Barker Preamble Mode")
                .value(self.barker_preamble_mode)
                .bits(BitRange::new(
                    self.to_bytes().unwrap_or_default().as_slice(),
                    2,
                    1,
                ))
                .build(),
            Field::builder()
                .title("Reserved")
                .value("---")
                .bits(BitRange::new(
                    self.to_bytes().unwrap_or_default().as_slice(),
                    3,
                    5,
                ))
                .build(),
        ]
    }
}