2 releases
new 0.1.2 | Mar 4, 2025 |
---|---|
0.1.1 | Feb 24, 2025 |
0.1.0 |
|
#1015 in Rust patterns
390 downloads per month
36KB
248 lines
Bitstructs
bitstructs
is a library for defining type-safe bitfield structs that can be used in both std
and no_std
environments.
Features
- Type-safe bit operations
- Simple to use and highly flexible
- Supports both
no_std
andstd
- Implemented using proc-macros with no additional runtime code
Example
Here is a simple example of using bitstructs
.
use bitstructs::{bitstruct_cow};
bitstruct_cow! {
#[derive(Clone, Debug, PartialEq)]
pub struct Test {
a: 1,
b: 2,
c: 2 =>
pub enum C {
C0 = 0,
C1 = 1,
},
}
}
let mut value = Test::new();
assert_eq!(value.as_bytes(), vec![0b0000_0000]);
value.set_a(true);
unsafe { value.set_b(1) };
value.set_c(C::C1);
assert_eq!(value.as_bytes(), vec![0b0000_1011]);
By default, the library uses LSB0 and little-endian mode. To use MSB0 and big-endian mode, add #[bitstruct_repr(MSB0)]
to the struct.
use bitstructs::{bitstruct_cow};
/// MSB0 and big-endian
bitstruct_cow! {
#[derive(Clone, Debug, PartialEq)]
#[bitstruct_repr(MSB0)]
pub struct Test {
a: 1,
b: 2,
c: 2 =>
pub enum C {
C0 = 0,
C1 = 1,
},
}
}
let mut value = Test::new();
assert_eq!(value.as_bytes(), vec![0b0000_0000]);
value.set_a(true);
unsafe { value.set_b(1) };
value.set_c(C::C1);
assert_eq!(value.as_bytes(), vec![0b1010_1000]);
Documentation
For more information, please refer to the documentation.
Contribution
Contributions are welcome! Please open an issue or submit a pull request on GitHub.
Dependencies
~215–660KB
~16K SLoC