Skip to content

Latest commit

 

History

History
534 lines (363 loc) · 23 KB

CHANGELOG.md

File metadata and controls

534 lines (363 loc) · 23 KB

2.5.0

What's Changed

  • Derive Debug for Flag<B> by @tgross35 in bitflags#398
  • Support truncating or strict-named variants of parsing and formatting by @KodrAus in bitflags#400

New Contributors

Full Changelog: https://github.com/bitflags/bitflags/compare/2.4.2...2.5.0

2.4.2

What's Changed

  • Cargo.toml: Anchor excludes to root of the package by @jamessan in bitflags#387
  • Update error messages by @KodrAus in bitflags#390
  • Add support for impl mode structs to be repr(packed) by @GnomedDev in bitflags#388
  • Remove old unused_tuple_struct_fields lint by @dtolnay in bitflags#393
  • Delete use of local_inner_macros by @dtolnay in bitflags#392

New Contributors

Full Changelog: https://github.com/bitflags/bitflags/compare/2.4.1...2.4.2

2.4.1

What's Changed

  • Allow some new pedantic clippy lints by @KodrAus in bitflags#380

Full Changelog: https://github.com/bitflags/bitflags/compare/2.4.0...2.4.1

2.4.0

What's Changed

  • Remove html_root_url by @eldruin in bitflags#368
  • Support unnamed flags by @KodrAus in bitflags#371
  • Update smoke test to verify all Clippy and rustc lints by @MitMaro in bitflags#374
  • Specify the behavior of bitflags by @KodrAus in bitflags#369

New Contributors

Full Changelog: https://github.com/bitflags/bitflags/compare/2.3.3...2.4.0

2.3.3

Changes to -=

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.

Changes to !

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.

Changes to formatting

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.

What's Changed

  • Fix up incorrect sub assign behavior and other cleanups by @KodrAus in bitflags#366

Full Changelog: https://github.com/bitflags/bitflags/compare/2.3.2...2.3.3

2.3.2

What's Changed

  • [doc] [src/lib.rs] delete redundant path prefix by @OccupyMars2025 in bitflags#361

New Contributors

  • @OccupyMars2025 made their first contribution in bitflags#361

Full Changelog: https://github.com/bitflags/bitflags/compare/2.3.1...2.3.2

2.3.1

What's Changed

  • Fix Self in flags value expressions by @KodrAus in bitflags#355

Full Changelog: https://github.com/bitflags/bitflags/compare/2.3.0...2.3.1

2.3.0

Major changes

BitFlags trait deprecated in favor of Flags trait

This release introduces the Flags trait and deprecates the BitFlags trait. These two traits are semver compatible so if you have public API code depending on BitFlags you can move to Flags without breaking end-users. This is possible because the BitFlags trait was never publicly implementable, so it now carries Flags as a supertrait. All implementations of Flags additionally implement BitFlags.

The Flags trait is a publicly implementable version of the old BitFlags trait. The original BitFlags trait carried some macro baggage that made it difficult to implement, so a new Flags trait has been introduced as the One True Trait for interacting with flags types generically. See the the macro_free and custom_derive examples for more details.

Bits trait publicly exposed

The Bits trait for the underlying storage of flags values is also now publicly implementable. This lets you define your own exotic backing storage for flags. See the custom_bits_type example for more details.

What's Changed

  • Use explicit hashes for actions steps by @KodrAus in bitflags#350
  • Support ejecting flags types from the bitflags macro by @KodrAus in bitflags#351

Full Changelog: https://github.com/bitflags/bitflags/compare/2.2.1...2.3.0

2.2.1

What's Changed

  • Refactor attribute filtering to apply per-flag by @KodrAus in bitflags#345

Full Changelog: https://github.com/bitflags/bitflags/compare/2.2.0...2.2.1

2.2.0

What's Changed

  • Create SECURITY.md by @KodrAus in bitflags#338
  • add docs to describe the behavior of multi-bit flags by @nicholasbishop in bitflags#340
  • Add support for bytemuck by @KodrAus in bitflags#336
  • Add a top-level macro for filtering attributes by @KodrAus in bitflags#341

New Contributors

  • @nicholasbishop made their first contribution in bitflags#340

Full Changelog: https://github.com/bitflags/bitflags/compare/2.1.0...2.2.0

2.1.0

What's Changed

  • Add docs for the internal Field0 and examples of formatting/parsing by @KodrAus in bitflags#328
  • Add support for arbitrary by @KodrAus in bitflags#324
  • Fix up missing docs for consts within consts by @KodrAus in bitflags#330
  • Ignore clippy lint in generated code by @Jake-Shadle in bitflags#331

New Contributors

  • @Jake-Shadle made their first contribution in bitflags#331

Full Changelog: https://github.com/bitflags/bitflags/compare/2.0.2...2.1.0

2.0.2

What's Changed

  • Fix up missing isize and usize Bits impls by @KodrAus in bitflags#321

Full Changelog: https://github.com/bitflags/bitflags/compare/2.0.1...2.0.2

2.0.1

What's Changed

  • Fix up some docs issues by @KodrAus in bitflags#309
  • Make empty_flag() const. by @tormeh in bitflags#313
  • Fix formatting of multi-bit flags with partial overlap by @KodrAus in bitflags#316

New Contributors

Full Changelog: https://github.com/bitflags/bitflags/compare/2.0.0...2.0.1

2.0.0

Major changes

This release includes some major changes over 1.x. If you use bitflags! types in your public API then upgrading this library may cause breakage in your downstream users.

⚠️ Serialization

You'll need to add the serde Cargo feature in order to #[derive(Serialize, Deserialize)] on your generated flags types:

bitflags! {
    #[derive(Serialize, Deserialize)]
    #[serde(transparent)]
    pub struct Flags: T {
        ..
    }
}

where T is the underlying bits type you're using, such as u32.

The default serialization format with serde has changed 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 format, see the https://github.com/KodrAus/bitflags-serde-legacy library.

⚠️ Traits

Generated flags types now derive fewer traits. If you need to maintain backwards compatibility, you can derive the following yourself:

#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Clone, Copy)]

⚠️ Methods

The unsafe from_bits_unchecked method is now a safe from_bits_retain method.

You can add the following method to your generated types to keep them compatible:

#[deprecated = "use the safe `from_bits_retain` method instead"]
pub unsafe fn from_bits_unchecked(bits: T) -> Self {
    Self::from_bits_retain(bits)
}

where T is the underlying bits type you're using, such as u32.

⚠️ .bits field

You can now use the .bits() method instead of the old .bits.

The representation of generated flags types has changed from a struct with the single field bits to a newtype.

What's Changed

  • Fix a typo and call out MSRV bump by @KodrAus in bitflags#259
  • BitFlags trait by @arturoc in bitflags#220
  • Add a hidden trait to discourage manual impls of BitFlags by @KodrAus in bitflags#261
  • Sanitize Ok by @konsumlamm in bitflags#266
  • Fix bug in Debug implementation by @konsumlamm in bitflags#268
  • Fix a typo in the generated documentation by @wackbyte in bitflags#271
  • Use SPDX license format by @atouchet in bitflags#272
  • serde tests fail in CI by @arturoc in bitflags#277
  • Fix beta test output by @KodrAus in bitflags#279
  • Add example to the README.md file by @tiaanl in bitflags#270
  • Iterator over all the enabled options by @arturoc in bitflags#278
  • from_bits_(truncate) fail with composite flags by @arturoc in bitflags#276
  • Add more platform coverage to CI by @KodrAus in bitflags#280
  • rework the way cfgs are handled by @KodrAus in bitflags#281
  • Split generated code into two types by @KodrAus in bitflags#282
  • expose bitflags iters using nameable types by @KodrAus in bitflags#286
  • Support creating flags from their names by @KodrAus in bitflags#287
  • Update README.md by @KodrAus in bitflags#288
  • Prepare for 2.0.0-rc.1 release by @KodrAus in bitflags#289
  • Add missing "if" to contains doc-comment in traits.rs by @rusty-snake in bitflags#291
  • Forbid unsafe_code by @fintelia in bitflags#294
  • serde: enable no-std support by @nim65s in bitflags#296
  • Add a parser for flags formatted as bar-separated-values by @KodrAus in bitflags#297
  • Prepare for 2.0.0-rc.2 release by @KodrAus in bitflags#299
  • Use strip_prefix instead of starts_with + slice by @QuinnPainter in bitflags#301
  • Fix up some clippy lints by @KodrAus in bitflags#302
  • Prepare for 2.0.0-rc.3 release by @KodrAus in bitflags#303
  • feat: Add minimum permissions to rust.yml workflow by @gabibguti in bitflags#305

New Contributors

Full Changelog: https://github.com/bitflags/bitflags/compare/1.3.2...2.0.0

2.0.0-rc.3

What's Changed

  • Use strip_prefix instead of starts_with + slice by @QuinnPainter in bitflags#301
  • Fix up some clippy lints by @KodrAus in bitflags#302

New Contributors

  • @QuinnPainter made their first contribution in bitflags#301

Full Changelog: https://github.com/bitflags/bitflags/compare/2.0.0-rc.2...2.0.0-rc.3

2.0.0-rc.2

Changes to 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.

What's Changed

  • Add missing "if" to contains doc-comment in traits.rs by @rusty-snake in bitflags#291
  • Forbid unsafe_code by @fintelia in bitflags#294
  • serde: enable no-std support by @nim65s in bitflags#296
  • Add a parser for flags formatted as bar-separated-values by @KodrAus in bitflags#297

New Contributors

Full Changelog: https://github.com/bitflags/bitflags/compare/2.0.0-rc.1...2.0.0-rc.2

2.0.0-rc.1

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.

What's Changed

  • Fix a typo and call out MSRV bump by @KodrAus in bitflags#259
  • BitFlags trait by @arturoc in bitflags#220
  • Add a hidden trait to discourage manual impls of BitFlags by @KodrAus in bitflags#261
  • Sanitize Ok by @konsumlamm in bitflags#266
  • Fix bug in Debug implementation by @konsumlamm in bitflags#268
  • Fix a typo in the generated documentation by @wackbyte in bitflags#271
  • Use SPDX license format by @atouchet in bitflags#272
  • serde tests fail in CI by @arturoc in bitflags#277
  • Fix beta test output by @KodrAus in bitflags#279
  • Add example to the README.md file by @tiaanl in bitflags#270
  • Iterator over all the enabled options by @arturoc in bitflags#278
  • from_bits_(truncate) fail with composite flags by @arturoc in bitflags#276
  • Add more platform coverage to CI by @KodrAus in bitflags#280
  • rework the way cfgs are handled by @KodrAus in bitflags#281
  • Split generated code into two types by @KodrAus in bitflags#282
  • expose bitflags iters using nameable types by @KodrAus in bitflags#286
  • Support creating flags from their names by @KodrAus in bitflags#287
  • Update README.md by @KodrAus in bitflags#288

New Contributors

Full Changelog: https://github.com/bitflags/bitflags/compare/1.3.2...2.0.0-rc.1

1.3.2

  • Allow non_snake_case in generated flags types (#256)

1.3.1

  • Revert unconditional #[repr(transparent)] (#252)

1.3.0 (yanked)

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)

1.2.1

  • Remove extraneous #[inline] attributes (#194)

1.2.0

  • Fix typo: {Lower, Upper}Exp - {Lower, Upper}Hex (#183)

  • Add support for "unknown" bits (#188)

1.1.0

This is a re-release of 1.0.5, which was yanked due to a bug in the RLS.

1.0.5

  • Use compiletest_rs flags supported by stable toolchain (#171)

  • Put the user provided attributes first (#173)

  • Make bitflags methods const on newer compilers (#175)

1.0.4

  • Support Rust 2018 style macro imports (#165)

    use bitflags::bitflags;

1.0.3

  • Improve zero value flag handling and documentation (#157)

1.0.2

  • 30% improvement in compile time of bitflags crate (#156)

  • Documentation improvements (#153)

  • Implementation cleanup (#149)

1.0.1

  • Add support for pub(restricted) specifier on the bitflags struct (#135)
  • Optimize performance of all() when called from a separate crate (#136)

1.0.0

  • [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)

How to update your code to use associated constants

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;

0.9.1

  • Fix the implementation of Formatting traits when other formatting traits were present in scope (#105)

0.9.0

  • [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)

0.8.2

  • Update feature flag used when building bitflags as a dependency of the Rust toolchain

0.8.1

  • Allow bitflags to be used as a dependency of the Rust toolchain

0.8.0

  • Add support for the experimental i128 and u128 integer types (#57)
  • Add set method: flags.set(SOME_FLAG, true) or flags.set(SOME_FLAG, false) (#55) This may break code that defines its own set method

0.7.1

(yanked)

0.7.0

  • Implement the Extend trait (#49)
  • Allow definitions inside the bitflags! macro to refer to items imported from other modules (#51)

0.6.0

  • The no_std feature was removed as it is now the default
  • The assignment_operators feature was remove as it is now enabled by default
  • Some clippy suggestions have been applied