#[cfg(any(test, feature = "serde"))]
use serde::{Deserialize, Serialize};
use crate::traits::IdentityHandle;
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)]
#[cfg_attr(any(test, feature = "serde"), derive(Deserialize, Serialize))]
pub enum GroupMember<ID> {
Individual(ID),
Group(ID),
}
impl<ID> GroupMember<ID>
where
ID: Copy,
{
pub fn id(&self) -> ID {
match self {
GroupMember::Individual(id) => *id,
GroupMember::Group(id) => *id,
}
}
pub fn is_group(&self) -> bool {
match self {
GroupMember::Individual(_) => false,
GroupMember::Group(_) => true,
}
}
pub fn is_individual(&self) -> bool {
!self.is_group()
}
}
impl<ID> IdentityHandle for GroupMember<ID> where ID: IdentityHandle {}