use actix_web::{get, HttpRequest, Responder}; use maud::html; mod item; // ░░░░░░░░░░▀▀▀██████▄▄▄░░░░░░░░░░ // ░░░░░░░░░░░░░░░░░▀▀▀████▄░░░░░░░ // ░░░░░░░░░░▄███████▀░░░▀███▄░░░░░ // ░░░░░░░░▄███████▀░░░░░░░▀███▄░░░ // ░░░░░░▄████████░░░░░░░░░░░███▄░░ // ░░░░░██████████▄░░░░░░░░░░░███▌░ ▒█▀▀█ █▀▀█ █▀▄▀█ █▀▄▀█ ▒█▀▀▄ ▒█▀▀█ // ░░░░░▀█████▀░▀███▄░░░░░░░░░▐███░ ▒█░░░ █░░█ █░▀░█ █░▀░█ ▒█░▒█ ▒█▀▀▄ // ░░░░░░░▀█▀░░░░░▀███▄░░░░░░░▐███░ ▒█▄▄█ ▀▀▀▀ ▀░░░▀ ▀░░░▀ ▒█▄▄▀ ▒█▄▄█ // ░░░░░░░░░░░░░░░░░▀███▄░░░░░███▌░ // ░░░░▄██▄░░░░░░░░░░░▀███▄░░▐███░░ // ░░▄██████▄░░░░░░░░░░░▀███▄███░░░ // ░█████▀▀████▄▄░░░░░░░░▄█████░░░░ // ░████▀░░░▀▀█████▄▄▄▄█████████▄░░ // ░░▀▀░░░░░░░░░▀▀██████▀▀░░░▀▀██░░ #[get("/item/{item_id}")] pub async fn item_page(r: HttpRequest) -> impl Responder { let id = r.match_info().query("item_id"); println!("{}", id); let itemdb: &actix_web::web::Data = r.app_data().unwrap(); let item = itemdb.get_item(id).unwrap(); let content = html!( p { "Item" }; p { (format!("Category: {}", item.category))} ).into_string(); web_base::build_site(&r, "Item", &content) } #[get("/")] pub(crate) async fn index(r: HttpRequest) -> impl Responder { let itemdb: &actix_web::web::Data = r.app_data().unwrap(); let content = html!( p class="text-xl font-bold" { "Hello World" }; @for item in itemdb.items() { a href=(format!("/item/{}", item)) { (item) }; } ) .into_string(); web_base::func::build_site(&r, "Index", &content) } #[actix_web::main] async fn main() -> std::io::Result<()> { env_logger::init(); let itemdb = item::ItemDB::new("./itemdb", "mongodb://user:pass@mongodb:27017").await; let itemdb = actix_web::web::Data::new(itemdb); web_base::map!( web_base::Site::new() .head_content("".to_string()), |app: actix_web::App<_>| { app.app_data(itemdb.clone()).service(index).service(item_page) } ) .bind(("0.0.0.0".to_string(), 8080))? .run() .await }