netlink_rust/core/
hardware_address.rs

1use std::fmt;
2
3/// HardwareAddress is an six octet identifier
4///
5/// HardwareAddress could be used for MAC address for Ethernet (802.3),
6/// Bluetooth or Wi-Fi (802.11) BSSID
7#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
8pub struct HardwareAddress {
9    value: [u8; 6],
10}
11
12impl HardwareAddress {
13    /// Get as byte array
14    pub fn bytes(&self) -> [u8; 6] {
15        self.value.clone()
16    }
17    /// Get a pointer to the bytes
18    pub fn as_ptr(&self) -> *const u8 {
19        self.value.as_ptr()
20    }
21}
22
23impl fmt::Display for HardwareAddress {
24    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
25        write!(
26            f,
27            "{:02x}:{:02x}:{:02x}:{:02x}:{:02x}:{:02x}",
28            self.value[0],
29            self.value[1],
30            self.value[2],
31            self.value[3],
32            self.value[4],
33            self.value[5]
34        )
35    }
36}
37
38impl<'a> From<&'a [u8]> for HardwareAddress {
39    fn from(value: &'a [u8]) -> HardwareAddress {
40        HardwareAddress {
41            value: [value[0], value[1], value[2], value[3], value[4], value[5]],
42        }
43    }
44}
45
46impl From<[u8; 6]> for HardwareAddress {
47    fn from(value: [u8; 6]) -> HardwareAddress {
48        HardwareAddress {
49            value: [value[0], value[1], value[2], value[3], value[4], value[5]],
50        }
51    }
52}