Skip to content

2.0.0

Compare
Choose a tag to compare
@KodrAus KodrAus released this 13 Mar 07:03
· 197 commits to main since this release
b5a5ecf

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.

Contributions

New Contributors

Full Changelog: 1.3.2...2.0.0