Debug
for Flag<B>
by @tgross35 in https://github.com/bitflags/bitflags/pull/398Full Changelog: https://github.com/bitflags/bitflags/compare/2.4.2...2.5.0
unused_tuple_struct_fields
lint by @dtolnay in https://github.com/bitflags/bitflags/pull/393local_inner_macros
by @dtolnay in https://github.com/bitflags/bitflags/pull/392Full Changelog: https://github.com/bitflags/bitflags/compare/2.4.1...2.4.2
Full Changelog: https://github.com/bitflags/bitflags/compare/2.4.0...2.4.1
Full Changelog: https://github.com/bitflags/bitflags/compare/2.3.3...2.4.0
-=
The -=
operator was incorrectly changed to truncate bits that didn't correspond to valid flags in 2.3.0
. This has been fixed up so it once again behaves the same as -
and difference
.
!
The !
operator previously called Self::from_bits_truncate
, which would truncate any bits that only partially overlapped with a valid flag. It will now use bits & Self::all().bits()
, so any bits that overlap any bits specified by any flag will be respected. This is unlikely to have any practical implications, but enables defining a flag like const ALL = !0
as a way to signal that any bit pattern is a known set of flags.
Zero-valued flags will never be printed. You'll either get 0x0
for empty flags using debug formatting, or the set of flags with zero-valued flags omitted for others.
Composite flags will no longer be redundantly printed if there are extra bits to print at the end that don't correspond to a valid flag.
Full Changelog: https://github.com/bitflags/bitflags/compare/2.3.2...2.3.3
Full Changelog: https://github.com/bitflags/bitflags/compare/2.3.1...2.3.2
Full Changelog: https://github.com/bitflags/bitflags/compare/2.3.0...2.3.1
Full Changelog: https://github.com/bitflags/bitflags/compare/2.2.1...2.3.0
Full Changelog: https://github.com/bitflags/bitflags/compare/2.2.0...2.2.1
Full Changelog: https://github.com/bitflags/bitflags/compare/2.1.0...2.2.0
Full Changelog: https://github.com/bitflags/bitflags/compare/2.0.2...2.1.0
Full Changelog: https://github.com/bitflags/bitflags/compare/2.0.1...2.0.2
Full Changelog: https://github.com/bitflags/bitflags/compare/2.0.0...2.0.1
Ok
by @konsumlamm in https://github.com/bitflags/bitflags/pull/266Debug
implementation by @konsumlamm in https://github.com/bitflags/bitflags/pull/268Full Changelog: https://github.com/bitflags/bitflags/compare/1.3.2...2.0.0
Full Changelog: https://github.com/bitflags/bitflags/compare/2.0.0-rc.2...2.0.0-rc.3
serde
serialization⚠️ NOTE ⚠️ This release changes the default serialization you'll get if you #[derive(Serialize, Deserialize)]
on your generated flags types. It will now use a formatted string for human-readable formats and the underlying bits type for compact formats.
To keep the old behavior, see the bitflags-serde-legacy
library.
Full Changelog: https://github.com/bitflags/bitflags/compare/2.0.0-rc.1...2.0.0-rc.2
This is a big release including a few years worth of work on a new BitFlags
trait, iteration, and better macro organization for future extensibility.
Ok
by @konsumlamm in https://github.com/bitflags/bitflags/pull/266Debug
implementation by @konsumlamm in https://github.com/bitflags/bitflags/pull/268Full Changelog: https://github.com/bitflags/bitflags/compare/1.3.2...2.0.0-rc.1
non_snake_case
in generated flags types (#256)#[repr(transparent)]
(#252)This release bumps the Minimum Supported Rust Version to 1.46.0
Add #[repr(transparent)]
(#187)
End empty
doc comment with full stop (#202)
Fix typo in crate root docs (#206)
Document from_bits_unchecked unsafety (#207)
Let is_all
ignore extra bits (#211)
Allows empty flag definition (#225)
Making crate accessible from std (#227)
Make from_bits
a const fn (#229)
Allow multiple bitflags structs in one macro invocation (#235)
Add named functions to perform set operations (#244)
Fix typos in method docs (#245)
Modernization of the bitflags
macro to take advantage of newer features and 2018 idioms (#246)
Fix regression (in an unreleased feature) and simplify tests (#247)
Use Self
and fix bug when overriding stringify!
(#249)
#[inline]
attributes (#194)This is a re-release of 1.0.5
, which was yanked due to a bug in the RLS.
Use compiletest_rs flags supported by stable toolchain (#171)
Put the user provided attributes first (#173)
Make bitflags methods const
on newer compilers (#175)
Support Rust 2018 style macro imports (#165)
use bitflags::bitflags;
30% improvement in compile time of bitflags crate (#156)
Documentation improvements (#153)
Implementation cleanup (#149)
pub(restricted)
specifier on the bitflags struct (#135)all()
when called from a separate crate (#136)[breaking change] Macro now generates associated constants (#24)
[breaking change] Minimum supported version is Rust 1.20, due to usage of associated constants
After being broken in 0.9, the #[deprecated]
attribute is now supported again (#112)
Other improvements to unit tests and documentation (#106 and #115)
Assuming the following structure definition:
bitflags! { struct Something: u8 { const FOO = 0b01, const BAR = 0b10 } }
In 0.9 and older you could do:
let x = FOO.bits | BAR.bits;
Now you must use:
let x = Something::FOO.bits | Something::BAR.bits;
Formatting
traits when other formatting traits were present in scope (#105)[breaking change] Use struct keyword instead of flags to define bitflag types (#84)
[breaking change] Terminate const items with semicolons instead of commas (#87)
Implement the Hex
, Octal
, and Binary
formatting traits (#86)
Printing an empty flag value with the Debug
trait now prints “(empty)” instead of nothing (#85)
The bitflags!
macro can now be used inside of a fn body, to define a type local to that function (#74)
i128
and u128
integer types (#57)flags.set(SOME_FLAG, true)
or flags.set(SOME_FLAG, false)
(#55) This may break code that defines its own set method(yanked)
bitflags!
macro to refer to items imported from other modules (#51)no_std
feature was removed as it is now the defaultassignment_operators
feature was remove as it is now enabled by default