-
Notifications
You must be signed in to change notification settings - Fork 144
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add an option for checking for valid bits is in the getter rather than constructor #228
Comments
Bump! I'll do the PR if needed |
Hi @CasperN! 👋 We can't consider any changes to the The way we modeled this originally was that the flags represents a closed enum, where the set specified in the definition is the complete set of possible flags the enum could combine. Since not all valid bit patterns of the underlying integer type are valid bit patterns of the flags it's not safe for us to simply accept any integer and treat it as valid flags. So we made the If we wanted to clean up the semantics we could consider allowing an bitflags! {
#[open]
struct Flags: u32 {
const A = 0b00000001;
const B = 0b00000010;
}
} Then let these What do you think? |
We could also use |
Hi, I want to use bitflags for generated code that interacts with data in other languages, some of which are bitflags (google/flatbuffers#6098). I don't want to drop data so I'd like to use
from_bits_unchecked
. However, it is marked as unsafe. I'd like to submit a PR to add an option to get around this. I have two ideas:Move the valid-bits-check to the getter: There'll be only one constructor:
from_bits
and thebits()
getter becomesbits() -> Result<...>
,unsafe bits_unchecked()
, andbits_truncated()
Document why from_bits_unchecked is unsafe #200 documents that this crate uses
unsafe
to mean a usage issue rather than a memory issue, so maybe I could make an option to remove the unsafe altogether, and update the generated documentation appropriately?What are your thoughts on these ideas? Does bitflags depend on the "bits are truncated to defined flags" invariant?
The text was updated successfully, but these errors were encountered: