use std::fmt::Display;
use plist::Value;
use crate::{
error::plist::PlistParseError,
message_types::{
app_store::AppStoreMessage, collaboration::CollaborationMessage, music::MusicMessage,
placemark::PlacemarkMessage, url::URLMessage,
},
tables::messages::models::GroupAction,
};
#[derive(Debug, PartialEq, Eq)]
pub enum Tapback<'a> {
Loved,
Liked,
Disliked,
Laughed,
Emphasized,
Questioned,
Emoji(Option<&'a str>),
Sticker,
}
impl Display for Tapback<'_> {
fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Tapback::Emoji(emoji) => match emoji {
Some(e) => write!(fmt, "{e}"),
None => write!(fmt, "Unknown emoji!"),
},
_ => write!(fmt, "{self:?}"),
}
}
}
#[derive(Debug, PartialEq, Eq)]
pub enum CustomBalloon<'a> {
Application(&'a str),
URL,
Handwriting,
DigitalTouch,
ApplePay,
Fitness,
Slideshow,
CheckIn,
FindMy,
Polls,
}
#[derive(Debug, PartialEq)]
pub enum URLOverride<'a> {
Normal(URLMessage<'a>),
AppleMusic(MusicMessage<'a>),
AppStore(AppStoreMessage<'a>),
Collaboration(CollaborationMessage<'a>),
SharedPlacemark(PlacemarkMessage<'a>),
}
#[derive(Debug, PartialEq, Eq)]
pub enum Announcement<'a> {
FullyUnsent,
GroupAction(GroupAction<'a>),
AudioMessageKept,
Unknown(&'a i32),
}
#[derive(Debug, PartialEq, Eq)]
pub enum TapbackAction {
Added,
Removed,
}
#[derive(Debug, PartialEq, Eq)]
pub enum Variant<'a> {
Normal,
Edited,
Tapback(usize, TapbackAction, Tapback<'a>),
App(CustomBalloon<'a>),
SharePlay,
Vote,
PollUpdate,
Unknown(i32),
}
pub trait BalloonProvider<'a> {
fn from_map(payload: &'a Value) -> Result<Self, PlistParseError>
where
Self: Sized;
}