use axum::Json;
use axum::response::IntoResponse;
use axum::routing::{get, head};
use crate::entity::language::Language;
mod auth;
pub mod client;
pub(crate) mod error;
mod media;
mod podcast;
mod podcast_episode;
pub(crate) mod prelude;
mod status;
mod task;
mod tvshow;
mod tvshow_episode;
mod tvshow_season;
pub fn create<S>() -> axum::Router<S>
where
S: crate::server::prelude::ServerState + Clone,
{
let api = axum::Router::new()
.merge(auth::create::<S>())
.merge(media::create::<S>())
.merge(podcast::create::<S>())
.merge(podcast_episode::create::<S>())
.merge(tvshow::create::<S>())
.merge(tvshow_episode::create::<S>())
.merge(tvshow_season::create::<S>());
axum::Router::new()
.route("/", get(client::handle_index::<S>))
.route("/{filename}", get(client::handle::<S>))
.route("/api", head(status::handle))
.nest("/api", api)
}
impl IntoResponse for error::ApiErrorResponse {
fn into_response(self) -> axum::response::Response {
(self.status_code, Json(self.body)).into_response()
}
}
impl From<entertainarr_domain::language::Language> for Language {
fn from(value: entertainarr_domain::language::Language) -> Self {
match value {
entertainarr_domain::language::Language::En => Self::En,
entertainarr_domain::language::Language::Fr => Self::Fr,
}
}
}
impl From<Language> for entertainarr_domain::language::Language {
fn from(value: Language) -> Self {
match value {
Language::En => Self::En,
Language::Fr => Self::Fr,
}
}
}