macro_rules! batch_mount { ("pages", $router:ident, $(($path:literal, $description:literal, $file:literal)),* $(,)?) => { $( (*$crate::route::ROUTES.lock().unwrap()) .insert($path.to_string(), $crate::route::Route::new($description)); ($router).mount($path, |context: ::windmark::context::RouteContext| { let content = include_str!(concat!("../../content/static/", $file, ".gmi")); $crate::response::success(&content, &context) }); )* }; ("files", $router:ident, $(($path:literal, $description:literal, $file:literal)),* $(,)?) => { $( (*$crate::route::ROUTES.lock().unwrap()) .insert($path.to_string(), $crate::route::Route::new($description)); ($router).mount( $path, ::windmark::binary_success_auto!(include_bytes!(concat!( "../../content/meta/", $file ))), ); )* }; } pub fn module(router: &mut windmark::router::Router) { batch_mount!( "files", router, ("/favicon.txt", "This Gemini capsule's icon", "favicon.txt"), ( "/robots.txt", "Crawler traffic manager; for robots, not humans", "robots.txt" ), ); batch_mount!( "pages", router, // ("/", "This Gemini capsule's homepage", "index"), // ("/licensing", "The licensing terms of this Gemini capsule", // "licensing"), ("/readability", "The readability disclosure", "readability"), // ( // "/stocks/telegram", // "Stock Market Related Telegram Groups", // "stocks_telegram" // ), // ( // "/translations", // "Translate a page to your language of choice!", // "translations" // ), ( "/useful", "Useful quick links that don't fit in the \"quick links\"", "useful" ), ( "/media/manga", "Useful links for finding and reading manga", "media/manga" ) ); }