rust-bitfield ============= This crate provides macros to generate bitfield-like struct. This a complete rewrite of the `bitfield` crate. You can find the previous version in the [rust-bitfield-legacy](https://github.com/dzamlo/rust-bitfield-legacy) repository. This version works on the stable version of rustc and use a different syntax with different possibility. ## Example An IPv4 header could be described like that: ```rust bitfield!{ struct IpV4Header(MSB0 [u8]); u32; get_version, _: 3, 0; get_ihl, _: 7, 4; get_dscp, _: 13, 8; get_ecn, _: 15, 14; get_total_length, _: 31, 16; get_identification, _: 47, 32; get_df, _: 49; get_mf, _: 50; get_fragment_offset, _: 63, 51; get_time_to_live, _: 71, 64; get_protocol, _: 79, 72; get_header_checksum, _: 95, 79; get_source_address, _: 127, 96; get_destination_address, _: 159, 128; } ``` In this example, all the fields are read-only, the _ as setter name signals to skip the setter method. The range at the end (e.g. 3, 0) defines the bit range where the information is encoded. ## Documentation The documentation of the released version is available on [doc.rs](https://docs.rs/bitfield). ## License Licensed under either of * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) at your option. ### Contribution Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.