use serde::{Serialize, Deserialize};
use uuid::Uuid;
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
#[serde(tag = "type", content = "data")]
pub enum Attachment{
#[serde(rename(serialize = "image", deserialize = "image"))]
Image(ImageAttachment),
#[serde(rename(serialize = "video", deserialize = "video"))]
Video(VideoAttachment),
#[serde(rename(serialize = "document", deserialize = "document"))]
Document(DocumentAttachment),
#[serde(rename(serialize = "voice", deserialize = "voice"))]
Voice(VoiceAttachment),
#[serde(rename(serialize = "location", deserialize = "location"))]
Location(LocationAttachment),
#[serde(rename(serialize = "contact", deserialize = "contact"))]
Contact(ContactAttachment),
#[serde(rename(serialize = "link", deserialize = "link"))]
Link(LinkAttachment),
#[serde(rename(serialize = "sticker", deserialize = "sticker"))]
Sticker(StickerAttachment),
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct ImageAttachment {
pub content: String,
pub file_name: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct VideoAttachment {
pub content: String,
pub file_name: Option<String>,
pub duration: u32,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct DocumentAttachment {
pub content: String,
pub file_name: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct VoiceAttachment {
pub content: String,
pub duration: u32,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct LocationAttachment {
pub location_name: String,
pub location_address: String,
pub location_lat: f32,
pub location_lng: f32,
}
impl Eq for LocationAttachment { }
impl PartialEq for LocationAttachment {
fn eq(&self, other: &Self) -> bool {
self.location_name == other.location_name && self.location_address == other.location_address && self.location_lat == other.location_lat && self.location_lng == other.location_lng
}
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct ContactAttachment {
pub file_name: String,
pub contact_name: String,
pub content: String,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct LinkAttachment {
pub url: String,
pub url_title: Option<String>,
pub url_preview: Option<String>,
pub url_text: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct StickerAttachment {
pub id: Uuid,
pub link: String,
pub pack: Uuid,
pub version: u32,
}