use crate::Addresses;
use crate::frame::components::{FrameControl, MacAddress};
#[derive(Clone, Debug)]
pub struct Rts {
pub frame_control: FrameControl,
pub duration: [u8; 2],
pub source: MacAddress,
pub destination: MacAddress,
}
impl Addresses for Rts {
fn src(&self) -> Option<&MacAddress> {
Some(&self.source)
}
fn dest(&self) -> &MacAddress {
&self.destination
}
fn bssid(&self) -> Option<&MacAddress> {
None
}
}
#[derive(Clone, Debug)]
pub struct Cts {
pub frame_control: FrameControl,
pub duration: [u8; 2],
pub destination: MacAddress,
}
impl Cts {
pub fn encode(&self) -> Vec<u8> {
let mut bytes = Vec::new();
bytes.extend_from_slice(&self.frame_control.encode());
bytes.extend_from_slice(&self.duration);
bytes.extend_from_slice(&self.destination.encode());
bytes
}
}
impl Addresses for Cts {
fn src(&self) -> Option<&MacAddress> {
None
}
fn dest(&self) -> &MacAddress {
&self.destination
}
fn bssid(&self) -> Option<&MacAddress> {
None
}
}
#[derive(Clone, Debug)]
pub struct Ack {
pub frame_control: FrameControl,
pub duration: [u8; 2],
pub destination: MacAddress,
}
impl Addresses for Ack {
fn src(&self) -> Option<&MacAddress> {
None
}
fn dest(&self) -> &MacAddress {
&self.destination
}
fn bssid(&self) -> Option<&MacAddress> {
None
}
}
impl Ack {
pub fn encode(&self) -> Vec<u8> {
let mut bytes = Vec::new();
bytes.extend_from_slice(&self.frame_control.encode());
bytes.extend_from_slice(&self.duration);
bytes.extend_from_slice(&self.destination.encode());
bytes
}
}