use std::borrow::Cow; use serde::{Serialize, Deserialize}; use rocket_dyn_templates::Template; use rocket::response::{Redirect}; use rocket::request::{FlashMessage}; use crate::schema; #[derive(Serialize, Deserialize, Debug)] struct FlashData { has_data: bool, kind: Cow<'static, str>, message: Cow<'static, str> } impl FlashData { const EMPTY: Self = Self { has_data: false, message: Cow::Borrowed(""), kind: Cow::Borrowed("") }; } #[derive(Serialize, Deserialize, Debug)] struct GameNightsData { gamenights: Vec::, flash: FlashData } #[get("/gamenights")] pub async fn gamenights(conn: schema::DbConn) -> Template { let gamenights = schema::get_all_gamenights(conn).await; let data = GameNightsData { gamenights: gamenights, flash: FlashData::EMPTY }; Template::render("gamenights", &data) } #[get("/")] pub async fn index() -> Redirect { Redirect::to(uri!(gamenights)) } #[derive(Serialize, Deserialize, Debug)] struct GameNightAddData { post_url: String, flash : FlashData } #[get("/gamenight/add")] pub async fn add_game_night(flash: Option>) -> Template { let flash_data = match flash { None => FlashData::EMPTY, Some(flash) => FlashData { has_data: true, message: Cow::Owned(flash.message().to_string()), kind: Cow::Owned(flash.kind().to_string()) } }; let data = GameNightAddData { post_url: "/api/gamenight".to_string(), flash: flash_data }; Template::render("gamenight_add", &data) } #[derive(Serialize, Deserialize, Debug)] struct RegisterData { flash : FlashData } #[get("/register")] pub async fn register(flash: Option>) -> Template { let flash_data = match flash { None => FlashData::EMPTY, Some(flash) => FlashData { has_data: true, message: Cow::Owned(flash.message().to_string()), kind: Cow::Owned(flash.kind().to_string()) } }; let data = RegisterData { flash: flash_data }; Template::render("register", &data) }