- Added the ability to specify field ranges using arbitrary expressions in addition to literals, by enclosing the expressions in parens (
(<expr>)
) - Reverted the fix from v0.5.1 due to it hindering other optimizations and the original issue only triggering in extremely specific cases
- Fixed a missed LLVM optimization for single-bit writes to bitfields on AArch64 by using inline assembly; this requires both a nightly compiler and for the
aarch64-bit-fix
feature flag to be enabled (to prevent breakage due tounsafe
usage)
- BREAKING: Renamed
FromRaw
,IntoRaw
andDerefRaw
toFromStorage
,IntoStorage
andDerefStorage
- Added nested bitfield support, used by specifying a field's type as
nested T
- Made bitfields
#[repr(transparent)]
- Added the ability to pack fields next to each other with
above; bits
,below; bits
,above
andbelow
FieldRange specifiers - Fixed generic bitfield support; however, if used, compile-time checks will be converted to runtime ones due to language limitations
- BREAKING: Changed the default behavior of unsafe conversions to mark the accessor as unsafe; the old behavior (safe accessor that performs an unsafe conversion) can be obtained by adding a
!
suffix to the attribute name, i.e.unsafe_get! T
- Added field conversions through functions with
get_fn
,set_fn
,unsafe_get_fn
,unsafe_set_fn
,try_get_fn
,try_set_fn
,unwrap_get_fn
andunwrap_set_fn
- Made the
ConvRaw
derive implementbool
conversions for enums with only two variants with discriminants 0 and 1 (in any order) - Changes to the
BitRange<T>
andBit
traits:- Renamed and split the
BitRange<T>
trait, intoBits<T>
,WithBits<T>
andSetBits<T>
- Split the
Bit
trait intoBit
,WithBit
andSetBit
Bits<T>
andBit
read from a bitfieldWith*
traits return a changed version of the bitfieldSet*
traits modify the bitfield in-place
- Renamed and split the
- Changed the implementations of
UnsafeFrom<T>
andUnsafeInto<T>
so that eitherFrom<T>
orInto<T>
automatically implement both- Specifically,
UnsafeFrom<U> for T
now gets implemented ifU: Into<T>
(implied byT: From<U>
), andUnsafeInto<U> for T
gets implemented ifU: UnsafeFrom<T>
- Specifically,
- Added built-in
*Bits
and*Bit
implementations to use integer arrays as field and storage types, and to use unsized integer slices as storage types (only in the*bits!
macros)
- Added
bits!
,with_bits!
andset_bits!
as alternatives tobitfield!
to operate on raw "bitfield storage" values without declaring a bitfield struct - Clarified
BitRange
's expected behavior in the documentation
- Added
unwrap_get
/unwrap_set
/unwrap_both
/unwrap
as alternatives to thetry_*
field type conversions that also unwrap theResult
s - Added a new derive macro named
ConvRaw
for automatic fallible enum conversions to and from integer types; this allows much easier usage of enums as bitfield fields - Added a new derive macro named
UnwrapBitRange
to add an automatic implementation ofBitRange<T>
to any integer types that can be converted to (fallibly) and from (infallibly) T, unwrapping on reads - Fixed an edge case in the default
BitRange
implementation for signed storage types, and expanded the default implementations
- Fixed
proc-bitfield-macros
dependency (0.2.3 mistakenly depended onproc-bitfield-macros
0.2.2)
- Made the
nightly
feature do nothing for the time being: const trait functionality has been removed from the standard library and the entire const trait system is being reworked, as described in rust-lang/rust#110393.
- Fixed const traits on the latest nightly
- Added optional
FromRaw
,IntoRaw
andDerefRaw
automatic implementations - Fixed some field type conversions failing when the required trait was not in scope
- Fixed code for the example
- Fixed the crate on the current stable Rust compiler (1.64.0), by not using the
label_break_value
feature (stabilized in 1.65.0) - Enabled the
nightly
feature on docs.rs
- Added more examples on how to use field options
- Added
ro
andwo
as shorthands forread_only
andwrite_only
, respectively - Renamed
try
totry_both
, and added a newtry
option is a shorthand fortry_get
andset
combined - Added
unsafe_set
andunsafe_both
options to perform unsafe conversions on writes (usingUnsafeInto<T>
)
- Fixed
proc-bitfield-macros
dependency (0.1.0 mistakenly depended onproc-bitfield-macros
0.0.1)
- Fixed conversion trait docs
- Fixed interactions between write-only fields and the automatic
fmt::Debug
implementation
- Added more documentation
- Made the crate
#![no_std]
Initial release