use nom::{
number::complete::{le_u8},
IResult,
};
#[derive(Debug, PartialEq, Clone, Copy)]
pub enum NotificationAttributeID {
AppIdentifier = 0,
Title = 1,
Subtitle = 2,
Message = 3,
MessageSize = 4,
Date = 5,
PositiveActionLabel = 6,
NegativeActionLabel = 7,
}
impl From<NotificationAttributeID> for u8 {
fn from(original: NotificationAttributeID) -> u8 {
match original {
NotificationAttributeID::AppIdentifier => 0,
NotificationAttributeID::Title => 1,
NotificationAttributeID::Subtitle => 2,
NotificationAttributeID::Message => 3,
NotificationAttributeID::MessageSize => 4,
NotificationAttributeID::Date => 5,
NotificationAttributeID::PositiveActionLabel => 6,
NotificationAttributeID::NegativeActionLabel => 7,
}
}
}
impl TryFrom<u8> for NotificationAttributeID {
type Error = ();
fn try_from(original: u8) -> Result<Self, Self::Error> {
match original {
0 => Ok(NotificationAttributeID::AppIdentifier),
1 => Ok(NotificationAttributeID::Title),
2 => Ok(NotificationAttributeID::Subtitle),
3 => Ok(NotificationAttributeID::Message),
4 => Ok(NotificationAttributeID::MessageSize),
5 => Ok(NotificationAttributeID::Date),
6 => Ok(NotificationAttributeID::PositiveActionLabel),
7 => Ok(NotificationAttributeID::NegativeActionLabel),
_ => Err(()),
}
}
}
impl NotificationAttributeID {
pub fn parse(i: &[u8]) -> IResult<&[u8], NotificationAttributeID> {
let (i, attribute_id) = le_u8(i)?;
Ok((i, NotificationAttributeID::try_from(attribute_id).unwrap()))
}
pub fn is_sized(id: NotificationAttributeID) -> bool {
match id {
NotificationAttributeID::Title => true,
NotificationAttributeID::Subtitle => true,
NotificationAttributeID::Message => true,
_ => false
}
}
}