#![feature(ip)] #[macro_use] extern crate rocket; use known_software::KnownInstanceSoftware; use rocket::{ fs::{FileServer, NamedFile}, http::ContentType, }; use std::path::PathBuf; mod api; mod known_software; #[get("/known-software.json")] async fn known_software_json() -> Option { NamedFile::open("known-software.json").await.ok() } #[get("//", rank = 1)] async fn route_for_known_instance_software( instance: KnownInstanceSoftware<'_>, route: PathBuf, ) -> Option { NamedFile::open("static/crossroad.html").await.ok() } #[get("/")] async fn configure_page() -> Option { NamedFile::open("static/config.html").await.ok() } #[get("//", rank = 2)] fn route_for_unknown_instance_software(instance: &str, route: PathBuf) -> (ContentType, String) { ( ContentType::HTML, format!( "Hello from {}! The software {} is unknown.", route.display(), instance ), ) } #[launch] fn rocket() -> _ { rocket::build() .mount("/static", FileServer::from("static").rank(0)) .mount("/api", api::get_routes()) .mount( "/", routes![ known_software_json, route_for_known_instance_software, route_for_unknown_instance_software, configure_page ], ) }