use serde::{Deserialize, Serialize};
use crate::{Channel, Programme};
#[derive(Debug, PartialEq, Serialize, Deserialize, Clone, Default)]
pub struct Tv {
#[serde(skip_serializing_if = "Option::is_none", rename = "@source-info-url")]
pub source_info_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", rename = "@source-info-name")]
pub source_info_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", rename = "@source-data-url")]
pub source_data_url: Option<String>,
#[serde(
skip_serializing_if = "Option::is_none",
rename = "@generator-info-name"
)]
pub generator_info_name: Option<String>,
#[serde(
skip_serializing_if = "Option::is_none",
rename = "@generator-info-url"
)]
pub generator_info_url: Option<String>,
#[serde(
skip_serializing_if = "Vec::is_empty",
default = "Vec::new",
rename = "channel"
)]
pub channels: Vec<Channel>,
#[serde(
skip_serializing_if = "Vec::is_empty",
default = "Vec::new",
rename = "programme"
)]
pub programmes: Vec<Programme>,
}
impl Tv {
pub fn find_by_channel(&self, channel_id: &str) -> Vec<&Programme> {
self.programmes
.iter()
.filter(|p| p.channel == channel_id)
.collect()
}
pub fn get_channel(&self, channel_id: &str) -> Option<&Channel> {
self.channels.iter().find(|c| c.id == channel_id)
}
pub fn sort_programmes_by_date(&mut self) {
self.programmes.sort_by(|a, b| a.start.cmp(&b.start));
}
}