use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct VodEntry {
pub id: String,
pub name: String,
pub original_name: Option<String>,
pub stream_url: Option<String>,
pub vod_type: VodType,
pub poster_url: Option<String>,
pub backdrop_url: Option<String>,
pub description: Option<String>,
pub content_rating: Option<String>,
pub rating: Option<f64>,
pub rating_5based: Option<f64>,
pub year: Option<u32>,
pub duration: Option<u32>,
pub genre: Option<String>,
pub cast: Option<String>,
pub director: Option<String>,
pub writer: Option<String>,
pub container_extension: Option<String>,
pub youtube_trailer: Option<String>,
pub tmdb_id: Option<i64>,
pub imdb_id: Option<String>,
pub series_id: Option<String>,
pub season_number: Option<u32>,
pub episode_number: Option<u32>,
#[serde(default)]
pub is_adult: bool,
pub custom_sid: Option<String>,
#[serde(default)]
pub category_ids: Vec<String>,
pub direct_source: Option<String>,
pub added_at: Option<i64>,
pub updated_at: Option<i64>,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum VodType {
#[default]
Movie,
Series,
Episode,
}
impl std::fmt::Display for VodType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Movie => write!(f, "movie"),
Self::Series => write!(f, "series"),
Self::Episode => write!(f, "episode"),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct VodCategory {
pub id: String,
pub name: String,
pub parent_id: Option<String>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_vod_type_is_movie() {
assert_eq!(VodType::default(), VodType::Movie);
}
#[test]
fn vod_type_display() {
assert_eq!(VodType::Episode.to_string(), "episode");
assert_eq!(VodType::Series.to_string(), "series");
}
}