use serde::{Serialize, Deserialize}; use linkify::{LinkFinder, LinkKind}; use crate::util::{result::{Error, Result}, variables::JANUARY_URL}; #[derive(Serialize, Deserialize, Debug, Clone)] pub enum ImageSize { Large, Preview, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Image { pub url: String, pub width: isize, pub height: isize, pub size: ImageSize, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Video { pub url: String, pub width: isize, pub height: isize, } #[derive(Serialize, Deserialize, Debug, Clone)] pub enum TwitchType { Channel, Video, Clip, } #[derive(Serialize, Deserialize, Debug, Clone)] pub enum BandcampType { Album, Track } #[derive(Serialize, Deserialize, Debug, Clone)] #[serde(tag = "type")] pub enum Special { None, YouTube { id: String, }, Twitch { content_type: TwitchType, id: String, }, Spotify { content_type: String, id: String, }, Soundcloud, Bandcamp { content_type: BandcampType, id: String } } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Metadata { url: Option, special: Option, #[serde(skip_serializing_if = "Option::is_none")] title: Option, #[serde(skip_serializing_if = "Option::is_none")] description: Option, #[serde(skip_serializing_if = "Option::is_none")] image: Option, #[serde(skip_serializing_if = "Option::is_none")] video: Option