kawaiifi 0.2.0

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

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

#[derive(Debug, Clone, PartialEq, Eq, Hash, DekuRead, DekuWrite, Serialize, Deserialize)]
pub struct BssLoad {
    #[deku(bytes = 2)]
    pub station_count: u16,
    #[deku(bytes = 1)]
    pub channel_utilization: u8,
    #[deku(bytes = 2)]
    pub available_admission_capacity: u16,
}

impl BssLoad {
    pub const NAME: &'static str = "BSS Load";
    pub const ID: u8 = 11;
    pub const ID_EXT: Option<u8> = None;
    pub(crate) const IE_ID: IeId = IeId::new(Self::ID, Self::ID_EXT);
    pub const LENGTH: usize = 5;

    pub fn summary(&self) -> String {
        format!(
            "Station Count: {}, Channel Utilization: {:.1}%",
            self.station_count,
            self.channel_utilization as f64 / 255.0 * 100.0
        )
    }

    pub fn fields(&self) -> Vec<Field> {
        vec![
            Field::builder()
                .title("Station Count")
                .value(self.station_count)
                .bytes(self.station_count.to_be_bytes().to_vec())
                .build(),
            Field::builder()
                .title("Channel Utilization")
                .value(format!(
                    "{:.1}%",
                    self.channel_utilization as f64 / 255.0 * 100.0
                ))
                .byte(self.channel_utilization)
                .build(),
            Field::builder()
                .title("Available Admission Capacity")
                .value(self.available_admission_capacity)
                .bytes(self.available_admission_capacity.to_be_bytes().to_vec())
                .build(),
        ]
    }
}