Add functions to allow constructing Attributes
in a const context (#817)
Previously, the only ways to construct new `Attributes` values were `Attributes::default()` or `Attributes::from(_)`, neither of can be made `const fn` due to limitations of these standard library traits.
This commit is contained in:
parent
94fdd586e6
commit
0935196d5a
@ -62,6 +62,26 @@ impl BitXor for Attributes {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Attributes {
|
impl Attributes {
|
||||||
|
/// Returns the empty bitset.
|
||||||
|
#[inline(always)]
|
||||||
|
pub const fn none() -> Self {
|
||||||
|
Self(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns a copy of the bitset with the given attribute set.
|
||||||
|
/// If it's already set, this returns the bitset unmodified.
|
||||||
|
#[inline(always)]
|
||||||
|
pub const fn with(self, attribute: Attribute) -> Self {
|
||||||
|
Self(self.0 | attribute.bytes())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns a copy of the bitset with the given attribute unset.
|
||||||
|
/// If it's not set, this returns the bitset unmodified.
|
||||||
|
#[inline(always)]
|
||||||
|
pub const fn without(self, attribute: Attribute) -> Self {
|
||||||
|
Self(self.0 & !attribute.bytes())
|
||||||
|
}
|
||||||
|
|
||||||
/// Sets the attribute.
|
/// Sets the attribute.
|
||||||
/// If it's already set, this does nothing.
|
/// If it's already set, this does nothing.
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
@ -117,4 +137,11 @@ mod tests {
|
|||||||
attributes.toggle(Attribute::Bold);
|
attributes.toggle(Attribute::Bold);
|
||||||
assert!(attributes.is_empty());
|
assert!(attributes.is_empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_attributes_const() {
|
||||||
|
const ATTRIBUTES: Attributes = Attributes::none().with(Attribute::Bold).with(Attribute::Italic).without(Attribute::Bold);
|
||||||
|
assert!(!ATTRIBUTES.has(Attribute::Bold));
|
||||||
|
assert!(ATTRIBUTES.has(Attribute::Italic));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user