mju-bits

Crates.iomju-bits
lib.rsmju-bits
version0.3.0
sourcesrc
created_at2020-01-02 01:39:41.694803
updated_at2020-01-03 19:28:34.1846
descriptionno_std typed bitfield access for u8, u16, u32 and u64
homepage
repositoryhttps://github.com/davidkern/mju-bits
max_upload_size
id194361
size29,635
David Kern (davidkern)

documentation

https://docs.rs/mju-bits/

README

mju-bits

#[no_std] implementation of typed bitfield access for u8, u16, u32, u64 and usize.

Usage

use mju_bits::*;

struct RegisterMarker;
type Register = Storage<RegisterMarker, u32>;
type RegisterAll = BitField<Register, U0, U31>;
type RegisterFieldA = BitField<Register, U0, U7>;
type RegisterFieldB = BitField<Register, U8, U24>;

let mut reg = Register::new();
reg.set::<RegisterFieldA>(0x56);
reg.set::<RegisterFieldB>(0x1234);
assert_eq!(reg.get::<RegisterAll>(), 0x00123456);

The Storage type ensures that a field may only be used with its corresponding storage.

For example, this won't compile:

use mju_bits::*;

struct FooMarker;
type Foo = Storage<FooMarker, u8>;
type FooField = BitField<Foo, U0, U1>;

struct BarMarker;
type Bar = Storage<BarMarker, u8>;

let bar = Bar::new();

// Compiler error: FooField can not be used with Bar storage.
bar.get::<FooField>();

Roadmap

  • BitFields spanning multiple primitive types

  • Iterable sequences of BitFields, supporting functional protocol definition

  • Implementation compatible with generic consts on nightly

  • Improve types so larger bitfields can be supported - 128-bit fields break typenum

  • Others?

Changelog

  • 0.3.0 - Removal of B0..B63 aliases to avoid confusion with typenum::B0 and typenum::B1
  • 0.2.0 - Documentation and cleanup
  • 0.1.0 - Initial release
Commit count: 20

cargo fmt