use crate::AppState;
use axum::extract::{Path, State};
use axum::http::StatusCode;
use axum::Json;
use dahua_camera_core::Capability;
use serde::Serialize;
#[derive(Debug, Serialize)]
pub struct CapabilityView {
pub name: &'static str,
pub supported: bool,
pub confirmed_on_this_model: bool,
}
#[derive(Debug, Serialize)]
pub struct CapabilitiesView {
pub camera_id: String,
pub probed: bool,
pub capabilities: Vec<CapabilityView>,
}
pub async fn get_capabilities(
State(state): State<AppState>,
Path(id): Path<String>,
) -> Result<Json<CapabilitiesView>, StatusCode> {
let camera = state.get(&id).ok_or(StatusCode::NOT_FOUND)?;
let profile = camera.capabilities();
Ok(Json(CapabilitiesView {
camera_id: camera.id().to_owned(),
probed: profile.is_probed(),
capabilities: Capability::all()
.iter()
.map(|capability| CapabilityView {
name: capability.name(),
supported: profile.supports(*capability),
confirmed_on_this_model: capability.is_confirmed_on_this_model(),
})
.collect(),
}))
}