#![allow(unused_crate_dependencies)]
use bare_types::net::MacAddress;
fn main() {
println!("=== bare-types MAC Address demo ===\n");
let mac: MacAddress = "00:1A:2B:3C:4D:5E".parse().expect("Valid MAC");
println!("Parsed MAC: {}", mac);
println!("\nMAC Properties:");
println!(" As string (colon): {}", mac.as_str());
println!(" As string (dash): {}", mac.as_str_dash());
println!(" As string (lower): {}", mac.as_str_lower());
println!(" Octets: {:?}", mac.octets());
println!("\nAddress Types:");
println!(" Is unicast: {}", mac.is_unicast());
println!(" Is multicast: {}", mac.is_multicast());
println!(
" Is globally administered: {}",
mac.is_globally_administered()
);
println!(
" Is locally administered: {}",
mac.is_locally_administered()
);
println!("\nMAC Components:");
println!(" OUI (Organization Unique ID): {:?}", mac.oui());
println!(" NIC (Network Interface Controller): {:?}", mac.nic());
println!("\nVarious Formats:");
let formats = ["00:1A:2B:3C:4D:5E", "00-1A-2B-3C-4D-5E", "001A2B3C4D5E"];
for format in formats {
match format.parse::<MacAddress>() {
Ok(m) => println!(" ✓ {} -> {}", format, m.as_str()),
Err(e) => println!(" ✗ {} -> Error: {}", format, e),
}
}
println!("\nAll types are:");
println!(" - Zero-cost abstractions");
println!(" - Fully no_std compatible");
println!(" - Type-safe with validation at construction");
println!(" - IEEE 802 compliant");
}