mod cached;
mod tvmaze;
mod tvmaze_types;
pub(crate) use cached::CachedMetadataProvider;
pub(crate) use tvmaze::TvMazeProvider;
use serde::{Deserialize, Serialize};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum MetadataRetrievalError {
#[error("Request failed: {0}")]
RequestError(String),
#[error("Failed to parse API response: {0}")]
ParseError(String),
#[error("Series not found: {0}")]
SeriesNotFound(String),
#[error("API returned invalid data: {0}")]
InvalidData(String),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Episode {
pub season_number: usize,
pub episode_number: usize,
pub name: String,
pub summary: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub(crate) struct Season {
pub season_number: usize,
pub episodes: Vec<Episode>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub(crate) struct TVSeries {
pub name: String,
pub seasons: Vec<Season>,
}
pub(crate) trait MetadataProvider {
fn fetch_series(
&self,
series_name: &str,
season_numbers: Option<Vec<usize>>,
) -> Result<TVSeries, MetadataRetrievalError>;
}