macaddr/lib.rs
1//! This crate provides types for a [MAC address] identifiers,
2//! both in IEEE *EUI-48* and *EUI-64* formats.
3//!
4//! It is like a `std::net::SocketAddr` enum
5//! with `std::net::SocketAddrV4` and `std::net::SocketAddrV6` members,
6//! but for MAC addresses instead.
7//!
8//! Obviously, MAC address can be represented as a `[u8; 6]` or `[u8; 8]`,
9//! but it is error-prone and inconvenient, so here they are —
10//! [MacAddr6] and [MacAddr8] structs with helpful methods and
11//! standard Rust traits implementations to make them first-class
12//! Rust objects.
13//!
14//! ## Serde support
15//!
16//! [Serde] support can be enabled with a `"serde_std"` feature
17//! (disabled by default) if used in `std`-enabled builds.
18//!
19//! This feature is called like this because of [this Cargo bug].\
20//! `"serde"` feature is exists also, but it is intended to be used
21//! in the `no_std` builds.
22//!
23//! ## No-std support
24//!
25//! This crate can be used in a `no_std` builds with
26//! disabled `"std"` feature (enabled by default).
27//!
28//! Enabled `"serde"` feature will add support for `no_std`
29//! serde serialization and deserialization.
30//!
31//! [Serde]: https://serde.rs
32//! [MAC address]: https://en.wikipedia.org/wiki/MAC_address
33//! [this Cargo bug]: https://github.com/rust-lang/cargo/issues/3494
34//! [MacAddr6]: struct.MacAddr6.html
35//! [MacAddr8]: struct.MacAddr8.html
36#![cfg_attr(not(feature = "std"), no_std)]
37#![doc(html_root_url = "https://docs.rs/macaddr/1.0.0")]
38#![forbid(unsafe_code)]
39
40mod addr;
41mod addr6;
42mod addr8;
43mod parser;
44
45pub use self::addr::MacAddr;
46pub use self::addr6::MacAddr6;
47pub use self::addr8::MacAddr8;
48pub use self::parser::ParseError;