use crate::message::MessageElement;
use ricq::msg::elem::{FlashImage, FriendImage, GroupImage};
use ricq::msg::{MessageElem, PushElem};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Clone)]
pub enum Image {
Group(GroupImage),
Friend(FriendImage),
}
impl Image {
pub fn id(&self) -> &str {
match self {
Self::Group(g) => &g.file_path,
Self::Friend(f) => &f.file_path,
}
}
pub fn flash(self) -> FlashImage {
match self {
Self::Group(g) => g.flash(),
Self::Friend(f) => f.flash(),
}
}
pub fn url(&self) -> String {
match self {
Self::Group(g) => g.url(),
Self::Friend(f) => f.url(),
}
}
}
impl PushElem for Image {
fn push_to(elem: Self, vec: &mut Vec<MessageElem>) {
match elem {
Self::Group(img) => PushElem::push_to(img, vec),
Self::Friend(img) => PushElem::push_to(img, vec),
}
}
}
impl From<GroupImage> for Image {
fn from(g: GroupImage) -> Self {
Self::Group(g)
}
}
impl From<FriendImage> for Image {
fn from(f: FriendImage) -> Self {
Self::Friend(f)
}
}
impl From<Image> for MessageElement {
fn from(img: Image) -> Self {
Self::Image(img)
}
}