perfect-postcode/server-rs/src/routes/travel_modes.rs
2026-03-17 21:08:32 +00:00

40 lines
929 B
Rust

use std::sync::Arc;
use axum::extract::State;
use axum::http::StatusCode;
use axum::response::Json;
use serde::Serialize;
use crate::state::SharedState;
#[derive(Serialize)]
pub struct TravelModeInfo {
mode: String,
destinations: usize,
}
#[derive(Serialize)]
pub struct TravelModesResponse {
modes: Vec<TravelModeInfo>,
}
pub async fn get_travel_modes(
State(shared): State<Arc<SharedState>>,
) -> Result<Json<TravelModesResponse>, (StatusCode, String)> {
let state = shared.load_state();
let store = &state.travel_time_store;
let modes = store
.available_modes
.iter()
.map(|mode| TravelModeInfo {
mode: mode.clone(),
destinations: store
.destinations
.get(mode)
.map(|slugs| slugs.len())
.unwrap_or(0),
})
.collect();
Ok(Json(TravelModesResponse { modes }))
}