#[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))]
#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq)]
#[repr(C)]
pub struct InteractionGroups {
pub memberships: u32,
pub filter: u32,
}
impl InteractionGroups {
pub const fn new(memberships: u32, filter: u32) -> Self {
Self {
memberships,
filter,
}
}
pub const fn all() -> Self {
Self::new(u32::MAX, u32::MAX)
}
pub const fn none() -> Self {
Self::new(0, 0)
}
pub const fn with_memberships(mut self, memberships: u32) -> Self {
self.memberships = memberships;
self
}
pub const fn with_filter(mut self, filter: u32) -> Self {
self.filter = filter;
self
}
#[inline]
pub const fn test(self, rhs: Self) -> bool {
(self.memberships & rhs.filter) != 0 && (rhs.memberships & self.filter) != 0
}
}
impl Default for InteractionGroups {
fn default() -> Self {
Self::all()
}
}