#[derive(Default, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[derive(Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct UserOrGroupIdentifiers<UOGI: UserOrGroupIdentifier>
{
pub real: UOGI,
pub effective: UOGI,
pub saved_set: UOGI,
pub file_system: UOGI,
}
impl<UOGI: UserOrGroupIdentifier> FromBytes for UserOrGroupIdentifiers<UOGI>
{
type Error = StatusStatisticParseError;
#[inline(always)]
fn from_bytes(value: &[u8]) -> Result<Self, Self::Error>
{
#[inline(always)]
fn parse_subsequent<'a, UOGI: UserOrGroupIdentifier>(iterator: &mut impl Iterator<Item=&'a [u8]>) -> Result<UOGI, StatusStatisticParseError>
{
if let Some(effective) = iterator.next()
{
Ok(UOGI::from_bytes(effective)?)
}
else
{
Err(StatusStatisticParseError::InvalidSeparator)
}
}
let mut iterator = value.split_bytes_n(4, b'\t');
Ok
(
Self
{
real: UOGI::from_bytes(iterator.next().unwrap())?,
effective: parse_subsequent(&mut iterator)?,
saved_set: parse_subsequent(&mut iterator)?,
file_system: parse_subsequent(&mut iterator)?,
}
)
}
}