use rocket::fs::FileServer; #[macro_use] extern crate rocket; pub mod items { include!(concat!(env!("OUT_DIR"), "/items.rs")); } #[get("/")] fn get_user(user_list: &rocket::State>, name: String) -> Option { user_list.iter().find(|user| user.name == name).cloned() } #[get("/")] fn get_users(user_list: &rocket::State>) -> items::PersonList { items::PersonList { person: user_list .inner() .to_vec() .iter_mut() .map(|x| { x.opinion.clear(); x.clone() }) .collect(), } } #[get("/<_..>", rank = 20)] async fn index_fallback() -> Option { // Try multiple paths for robustness let paths = ["../frontend/dist/index.html", "frontend/dist/index.html"]; for path in paths { if let Ok(file) = rocket::fs::NamedFile::open(path).await { return Some(file); } } None } #[launch] fn rocket() -> _ { let mut user_list: Vec = Vec::new(); user_list.push(items::Person { name: "John".to_string(), opinion: vec![items::Opinion { game: Some(items::Game { title: "Naramo Nuclear Plant V2".to_string(), source: items::Source::Roblox.into(), multiplayer: true, min_players: 1, max_players: 90, price: 0, }), would_play: true, }], }); rocket::build() .manage(user_list) .mount("/api", routes![get_users, get_user]) .mount("/", routes![index_fallback]) .mount("/", FileServer::new("../frontend/dist")) }