[−][src]Struct insomnia::EnumSet
An efficient set type for enums.
It is implemented using a bitset stored using the smallest integer that can fit all bits
in the underlying enum. In general, an enum variant with a numeric value of n
is stored in
the nth least significant bit (corresponding with a mask of, e.g. 1 << enum as u32
).
Serialization
When the serde
feature is enabled, EnumSet
s can be serialized and deserialized using
the serde
crate. The exact serialization format can be controlled with additional attributes
on the enum type. These attributes are valid regardless of whether the serde
feature
is enabled.
By default, EnumSet
s serialize by directly writing out the underlying bitset as an integer
of the smallest type that can fit in the underlying enum. You can add a
#[enumset(serialize_repr = "u8")]
attribute to your enum to control the integer type used
for serialization. This can be important for avoiding unintentional breaking changes when
EnumSet
s are serialized with formats like bincode
.
By default, unknown bits are ignored and silently removed from the bitset. To override this
behavior, you can add a #[enumset(serialize_deny_unknown)]
attribute. This will cause
deserialization to fail if an invalid bit is set.
In addition, the #[enumset(serialize_as_list)]
attribute causes the EnumSet
to be
instead serialized as a list of enum variants. This requires your enum type implement
[Serialize
] and [Deserialize
]. Note that this is a breaking change
Implementations
impl<T> EnumSet<T> where
T: EnumSetType,
[src]
T: EnumSetType,
pub fn new() -> EnumSet<T>
[src]
Creates an empty EnumSet
.
pub fn only(t: T) -> EnumSet<T>
[src]
Returns an EnumSet
containing a single element.
pub fn empty() -> EnumSet<T>
[src]
Creates an empty EnumSet
.
This is an alias for EnumSet::new
.
pub fn all() -> EnumSet<T>
[src]
Returns an EnumSet
containing all valid variants of the enum.
pub fn bit_width() -> u32
[src]
Total number of bits used by this type. Note that the actual amount of space used is
rounded up to the next highest integer type (u8
, u16
, u32
, u64
, or u128
).
This is the same as EnumSet::variant_count
except in enums with "sparse" variants.
(e.g. enum Foo { A = 10, B = 20 }
)
pub fn variant_count() -> u32
[src]
The number of valid variants that this type can contain.
This is the same as EnumSet::bit_width
except in enums with "sparse" variants.
(e.g. enum Foo { A = 10, B = 20 }
)
pub fn len(&self) -> usize
[src]
Returns the number of elements in this set.
pub fn is_empty(&self) -> bool
[src]
Returns true
if the set contains no elements.
pub fn clear(&mut self)
[src]
Removes all elements from the set.
pub fn is_disjoint(&self, other: EnumSet<T>) -> bool
[src]
Returns true
if self
has no elements in common with other
. This is equivalent to
checking for an empty intersection.
pub fn is_superset(&self, other: EnumSet<T>) -> bool
[src]
Returns true
if the set is a superset of another, i.e., self
contains at least all the
values in other
.
pub fn is_subset(&self, other: EnumSet<T>) -> bool
[src]
Returns true
if the set is a subset of another, i.e., other
contains at least all
the values in self
.
pub fn union(&self, other: EnumSet<T>) -> EnumSet<T>
[src]
Returns a set containing any elements present in either set.
pub fn intersection(&self, other: EnumSet<T>) -> EnumSet<T>
[src]
Returns a set containing every element present in both sets.
pub fn difference(&self, other: EnumSet<T>) -> EnumSet<T>
[src]
Returns a set containing element present in self
but not in other
.
pub fn symmetrical_difference(&self, other: EnumSet<T>) -> EnumSet<T>
[src]
Returns a set containing every element present in either self
or other
, but is not
present in both.
pub fn complement(&self) -> EnumSet<T>
[src]
Returns a set containing all enum variants not in this set.
pub fn contains(&self, value: T) -> bool
[src]
Checks whether this set contains a value.
pub fn insert(&mut self, value: T) -> bool
[src]
Adds a value to this set.
If the set did not have this value present, true
is returned.
If the set did have this value present, false
is returned.
pub fn remove(&mut self, value: T) -> bool
[src]
Removes a value from this set. Returns whether the value was present in the set.
pub fn insert_all(&mut self, other: EnumSet<T>)
[src]
Adds all elements in another set to this one.
pub fn remove_all(&mut self, other: EnumSet<T>)
[src]
Removes all values in another set from this one.
pub fn iter(&self) -> EnumSetIter<T>
[src]
Creates an iterator over the values in this set.
Note that iterator invalidation is impossible as the iterator contains a copy of this type, rather than holding a reference to it.
impl<T> EnumSet<T> where
T: EnumSetType,
[src]
T: EnumSetType,
pub fn as_u8(&self) -> u8
[src]
Returns a u8
representing the elements of this set.
If the underlying bitset will not fit in a u8
, this method will panic.
pub fn try_as_u8(&self) -> Option<u8>
[src]
Tries to return a u8
representing the elements of this set.
If the underlying bitset will not fit in a u8
, this method will instead return None
.
pub fn as_u8_truncated(&self) -> u8
[src]
Returns a truncated u8
representing the elements of this set.
If the underlying bitset will not fit in a u8
, this method will truncate any bits that don't fit.
pub fn from_u8(bits: u8) -> EnumSet<T>
[src]
Constructs a bitset from a u8
.
If a bit that doesn't correspond to an enum variant is set, this method will panic.
pub fn try_from_u8(bits: u8) -> Option<EnumSet<T>>
[src]
Attempts to constructs a bitset from a u8
.
If a bit that doesn't correspond to an enum variant is set, this method will return None
.
pub fn from_u8_truncated(bits: u8) -> EnumSet<T>
[src]
Constructs a bitset from a u8
, ignoring invalid variants.
pub fn as_u16(&self) -> u16
[src]
Returns a u16
representing the elements of this set.
If the underlying bitset will not fit in a u16
, this method will panic.
pub fn try_as_u16(&self) -> Option<u16>
[src]
Tries to return a u16
representing the elements of this set.
If the underlying bitset will not fit in a u16
, this method will instead return None
.
pub fn as_u16_truncated(&self) -> u16
[src]
Returns a truncated u16
representing the elements of this set.
If the underlying bitset will not fit in a u16
, this method will truncate any bits that don't fit.
pub fn from_u16(bits: u16) -> EnumSet<T>
[src]
Constructs a bitset from a u16
.
If a bit that doesn't correspond to an enum variant is set, this method will panic.
pub fn try_from_u16(bits: u16) -> Option<EnumSet<T>>
[src]
Attempts to constructs a bitset from a u16
.
If a bit that doesn't correspond to an enum variant is set, this method will return None
.
pub fn from_u16_truncated(bits: u16) -> EnumSet<T>
[src]
Constructs a bitset from a u16
, ignoring invalid variants.
pub fn as_u32(&self) -> u32
[src]
Returns a u32
representing the elements of this set.
If the underlying bitset will not fit in a u32
, this method will panic.
pub fn try_as_u32(&self) -> Option<u32>
[src]
Tries to return a u32
representing the elements of this set.
If the underlying bitset will not fit in a u32
, this method will instead return None
.
pub fn as_u32_truncated(&self) -> u32
[src]
Returns a truncated u32
representing the elements of this set.
If the underlying bitset will not fit in a u32
, this method will truncate any bits that don't fit.
pub fn from_u32(bits: u32) -> EnumSet<T>
[src]
Constructs a bitset from a u32
.
If a bit that doesn't correspond to an enum variant is set, this method will panic.
pub fn try_from_u32(bits: u32) -> Option<EnumSet<T>>
[src]
Attempts to constructs a bitset from a u32
.
If a bit that doesn't correspond to an enum variant is set, this method will return None
.
pub fn from_u32_truncated(bits: u32) -> EnumSet<T>
[src]
Constructs a bitset from a u32
, ignoring invalid variants.
pub fn as_u64(&self) -> u64
[src]
Returns a u64
representing the elements of this set.
If the underlying bitset will not fit in a u64
, this method will panic.
pub fn try_as_u64(&self) -> Option<u64>
[src]
Tries to return a u64
representing the elements of this set.
If the underlying bitset will not fit in a u64
, this method will instead return None
.
pub fn as_u64_truncated(&self) -> u64
[src]
Returns a truncated u64
representing the elements of this set.
If the underlying bitset will not fit in a u64
, this method will truncate any bits that don't fit.
pub fn from_u64(bits: u64) -> EnumSet<T>
[src]
Constructs a bitset from a u64
.
If a bit that doesn't correspond to an enum variant is set, this method will panic.
pub fn try_from_u64(bits: u64) -> Option<EnumSet<T>>
[src]
Attempts to constructs a bitset from a u64
.
If a bit that doesn't correspond to an enum variant is set, this method will return None
.
pub fn from_u64_truncated(bits: u64) -> EnumSet<T>
[src]
Constructs a bitset from a u64
, ignoring invalid variants.
pub fn as_u128(&self) -> u128
[src]
Returns a u128
representing the elements of this set.
If the underlying bitset will not fit in a u128
, this method will panic.
pub fn try_as_u128(&self) -> Option<u128>
[src]
Tries to return a u128
representing the elements of this set.
If the underlying bitset will not fit in a u128
, this method will instead return None
.
pub fn as_u128_truncated(&self) -> u128
[src]
Returns a truncated u128
representing the elements of this set.
If the underlying bitset will not fit in a u128
, this method will truncate any bits that don't fit.
pub fn from_u128(bits: u128) -> EnumSet<T>
[src]
Constructs a bitset from a u128
.
If a bit that doesn't correspond to an enum variant is set, this method will panic.
pub fn try_from_u128(bits: u128) -> Option<EnumSet<T>>
[src]
Attempts to constructs a bitset from a u128
.
If a bit that doesn't correspond to an enum variant is set, this method will return None
.
pub fn from_u128_truncated(bits: u128) -> EnumSet<T>
[src]
Constructs a bitset from a u128
, ignoring invalid variants.
pub fn as_usize(&self) -> usize
[src]
Returns a usize
representing the elements of this set.
If the underlying bitset will not fit in a usize
, this method will panic.
pub fn try_as_usize(&self) -> Option<usize>
[src]
Tries to return a usize
representing the elements of this set.
If the underlying bitset will not fit in a usize
, this method will instead return None
.
pub fn as_usize_truncated(&self) -> usize
[src]
Returns a truncated usize
representing the elements of this set.
If the underlying bitset will not fit in a usize
, this method will truncate any bits that don't fit.
pub fn from_usize(bits: usize) -> EnumSet<T>
[src]
Constructs a bitset from a usize
.
If a bit that doesn't correspond to an enum variant is set, this method will panic.
pub fn try_from_usize(bits: usize) -> Option<EnumSet<T>>
[src]
Attempts to constructs a bitset from a usize
.
If a bit that doesn't correspond to an enum variant is set, this method will return None
.
pub fn from_usize_truncated(bits: usize) -> EnumSet<T>
[src]
Constructs a bitset from a usize
, ignoring invalid variants.
Trait Implementations
impl<T, O> BitAnd<O> for EnumSet<T> where
O: Into<EnumSet<T>>,
T: EnumSetType,
[src]
O: Into<EnumSet<T>>,
T: EnumSetType,
type Output = EnumSet<T>
The resulting type after applying the &
operator.
pub fn bitand(self, other: O) -> <EnumSet<T> as BitAnd<O>>::Output
[src]
impl<T, O> BitAndAssign<O> for EnumSet<T> where
O: Into<EnumSet<T>>,
T: EnumSetType,
[src]
O: Into<EnumSet<T>>,
T: EnumSetType,
pub fn bitand_assign(&mut self, rhs: O)
[src]
impl<T, O> BitOr<O> for EnumSet<T> where
O: Into<EnumSet<T>>,
T: EnumSetType,
[src]
O: Into<EnumSet<T>>,
T: EnumSetType,
type Output = EnumSet<T>
The resulting type after applying the |
operator.
pub fn bitor(self, other: O) -> <EnumSet<T> as BitOr<O>>::Output
[src]
impl<T, O> BitOrAssign<O> for EnumSet<T> where
O: Into<EnumSet<T>>,
T: EnumSetType,
[src]
O: Into<EnumSet<T>>,
T: EnumSetType,
pub fn bitor_assign(&mut self, rhs: O)
[src]
impl<T, O> BitXor<O> for EnumSet<T> where
O: Into<EnumSet<T>>,
T: EnumSetType,
[src]
O: Into<EnumSet<T>>,
T: EnumSetType,
type Output = EnumSet<T>
The resulting type after applying the ^
operator.
pub fn bitxor(self, other: O) -> <EnumSet<T> as BitXor<O>>::Output
[src]
impl<T, O> BitXorAssign<O> for EnumSet<T> where
O: Into<EnumSet<T>>,
T: EnumSetType,
[src]
O: Into<EnumSet<T>>,
T: EnumSetType,
pub fn bitxor_assign(&mut self, rhs: O)
[src]
impl<T> Clone for EnumSet<T> where
T: EnumSetType + Clone,
<T as EnumSetTypePrivate>::Repr: Clone,
[src]
T: EnumSetType + Clone,
<T as EnumSetTypePrivate>::Repr: Clone,
impl<T> Copy for EnumSet<T> where
T: EnumSetType + Copy,
<T as EnumSetTypePrivate>::Repr: Copy,
[src]
T: EnumSetType + Copy,
<T as EnumSetTypePrivate>::Repr: Copy,
impl<T> Debug for EnumSet<T> where
T: EnumSetType + Debug,
[src]
T: EnumSetType + Debug,
impl<T> Default for EnumSet<T> where
T: EnumSetType,
[src]
T: EnumSetType,
impl<T> Eq for EnumSet<T> where
T: EnumSetType + Eq,
<T as EnumSetTypePrivate>::Repr: Eq,
[src]
T: EnumSetType + Eq,
<T as EnumSetTypePrivate>::Repr: Eq,
impl<T> Extend<EnumSet<T>> for EnumSet<T> where
T: EnumSetType,
[src]
T: EnumSetType,
pub fn extend<I>(&mut self, iter: I) where
I: IntoIterator<Item = EnumSet<T>>,
[src]
I: IntoIterator<Item = EnumSet<T>>,
pub fn extend_one(&mut self, item: A)
[src]
pub fn extend_reserve(&mut self, additional: usize)
[src]
impl<T> Extend<T> for EnumSet<T> where
T: EnumSetType,
[src]
T: EnumSetType,
pub fn extend<I>(&mut self, iter: I) where
I: IntoIterator<Item = T>,
[src]
I: IntoIterator<Item = T>,
pub fn extend_one(&mut self, item: A)
[src]
pub fn extend_reserve(&mut self, additional: usize)
[src]
impl<T> From<T> for EnumSet<T> where
T: EnumSetType,
[src]
T: EnumSetType,
impl<T> FromIterator<EnumSet<T>> for EnumSet<T> where
T: EnumSetType,
[src]
T: EnumSetType,
pub fn from_iter<I>(iter: I) -> EnumSet<T> where
I: IntoIterator<Item = EnumSet<T>>,
[src]
I: IntoIterator<Item = EnumSet<T>>,
impl<T> FromIterator<T> for EnumSet<T> where
T: EnumSetType,
[src]
T: EnumSetType,
pub fn from_iter<I>(iter: I) -> EnumSet<T> where
I: IntoIterator<Item = T>,
[src]
I: IntoIterator<Item = T>,
impl<T> Hash for EnumSet<T> where
T: EnumSetType,
[src]
T: EnumSetType,
pub fn hash<H>(&self, state: &mut H) where
H: Hasher,
[src]
H: Hasher,
pub fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
impl<T> IntoIterator for EnumSet<T> where
T: EnumSetType,
[src]
T: EnumSetType,
type Item = T
The type of the elements being iterated over.
type IntoIter = EnumSetIter<T>
Which kind of iterator are we turning this into?
pub fn into_iter(self) -> <EnumSet<T> as IntoIterator>::IntoIter
[src]
impl<T> Not for EnumSet<T> where
T: EnumSetType,
[src]
T: EnumSetType,
type Output = EnumSet<T>
The resulting type after applying the !
operator.
pub fn not(self) -> <EnumSet<T> as Not>::Output
[src]
impl<T> Ord for EnumSet<T> where
T: EnumSetType,
[src]
T: EnumSetType,
pub fn cmp(&self, other: &EnumSet<T>) -> Ordering
[src]
#[must_use]pub fn max(self, other: Self) -> Self
1.21.0[src]
#[must_use]pub fn min(self, other: Self) -> Self
1.21.0[src]
#[must_use]pub fn clamp(self, min: Self, max: Self) -> Self
1.50.0[src]
impl PartialEq<EnumSet<LockType>> for LockType
[src]
pub fn eq(&self, other: &EnumSet<LockType>) -> bool
[src]
#[must_use]pub fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
impl<T> PartialEq<EnumSet<T>> for EnumSet<T> where
T: EnumSetType + PartialEq<T>,
<T as EnumSetTypePrivate>::Repr: PartialEq<<T as EnumSetTypePrivate>::Repr>,
[src]
T: EnumSetType + PartialEq<T>,
<T as EnumSetTypePrivate>::Repr: PartialEq<<T as EnumSetTypePrivate>::Repr>,
impl<T> PartialEq<T> for EnumSet<T> where
T: EnumSetType,
[src]
T: EnumSetType,
impl<T> PartialOrd<EnumSet<T>> for EnumSet<T> where
T: EnumSetType,
[src]
T: EnumSetType,
pub fn partial_cmp(&self, other: &EnumSet<T>) -> Option<Ordering>
[src]
#[must_use]pub fn lt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]pub fn le(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]pub fn gt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]pub fn ge(&self, other: &Rhs) -> bool
1.0.0[src]
impl<T> StructuralEq for EnumSet<T> where
T: EnumSetType,
[src]
T: EnumSetType,
impl<T> StructuralPartialEq for EnumSet<T> where
T: EnumSetType,
[src]
T: EnumSetType,
impl<T, O> Sub<O> for EnumSet<T> where
O: Into<EnumSet<T>>,
T: EnumSetType,
[src]
O: Into<EnumSet<T>>,
T: EnumSetType,
type Output = EnumSet<T>
The resulting type after applying the -
operator.
pub fn sub(self, other: O) -> <EnumSet<T> as Sub<O>>::Output
[src]
impl<T, O> SubAssign<O> for EnumSet<T> where
O: Into<EnumSet<T>>,
T: EnumSetType,
[src]
O: Into<EnumSet<T>>,
T: EnumSetType,
pub fn sub_assign(&mut self, rhs: O)
[src]
Auto Trait Implementations
impl<T> RefUnwindSafe for EnumSet<T> where
<T as EnumSetTypePrivate>::Repr: RefUnwindSafe,
[src]
<T as EnumSetTypePrivate>::Repr: RefUnwindSafe,
impl<T> Send for EnumSet<T> where
<T as EnumSetTypePrivate>::Repr: Send,
[src]
<T as EnumSetTypePrivate>::Repr: Send,
impl<T> Sync for EnumSet<T> where
<T as EnumSetTypePrivate>::Repr: Sync,
[src]
<T as EnumSetTypePrivate>::Repr: Sync,
impl<T> Unpin for EnumSet<T> where
<T as EnumSetTypePrivate>::Repr: Unpin,
[src]
<T as EnumSetTypePrivate>::Repr: Unpin,
impl<T> UnwindSafe for EnumSet<T> where
<T as EnumSetTypePrivate>::Repr: UnwindSafe,
[src]
<T as EnumSetTypePrivate>::Repr: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<!> for T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,