use axum::extract::State; use axum::routing::get; use axum::{Json, Router}; use std::path::Path; use walkdir::WalkDir; pub fn create_frontend_api(assets_dir: &str) -> Router { Router::new().route( "/default-sounds", get(default_sounds).with_state(assets_dir.to_owned()), ) } async fn default_sounds(State(ref assets_dir): State) -> Json> { let sounds_dir = &Path::new(assets_dir).join("sounds"); let mut sounds = Vec::new(); for entry in WalkDir::new(sounds_dir) { let Ok(entry) = entry else { continue; }; if !entry.file_type().is_file() { continue; } let Ok(Some(entry)) = entry .path() .strip_prefix(sounds_dir) .map(|p| p.to_str()) .map(|p| p.and_then(|pp| pp.strip_suffix(".mp3"))) else { continue; }; sounds.push(entry.to_owned()); } sounds.sort(); Json(sounds) }