use axum::{Json, Router, extract::State, routing::get}; use domain::{IProviderRegistry as _, ProviderCapabilities, StreamingProtocol}; use crate::dto::{ConfigResponse, ProviderInfo}; use crate::state::AppState; pub fn router() -> Router { Router::new().route("/", get(get_config)) } async fn get_config(State(state): State) -> Json { let providers: Vec = state .provider_registry .provider_ids() .into_iter() .filter_map(|id| { state.provider_registry.capabilities(&id).map(|caps| ProviderInfo { id: id.clone(), capabilities: caps, }) }) .collect(); let primary_capabilities = state .provider_registry .capabilities(state.provider_registry.primary_id()) .unwrap_or(ProviderCapabilities { collections: false, series: false, genres: false, tags: false, decade: false, search: false, streaming_protocol: StreamingProtocol::DirectFile, rescan: false, transcode: false, }); Json(ConfigResponse { allow_registration: state.config.allow_registration, providers, provider_capabilities: primary_capabilities, }) }