use std::collections::HashMap; use std::sync::LazyLock; use rocket::form::Form; use rocket::fs::{FileServer, TempFile}; use rocket::http::Status; use rocket::response::Redirect; use rocket::serde::Serialize; use rocket_dyn_templates::{context, Template}; #[derive(Serialize)] struct Transaction { id: u32, amount: f64, description: String, date: String, } struct Database { transactions: HashMap, } #[derive(rocket::FromForm)] struct TransactionPostData<'r> { amount: f32, notes: String, photo: Vec>, } static DB: LazyLock = LazyLock::new(|| { let mut transactions = HashMap::new(); transactions.insert( 5411, Transaction { id: 5411, amount: 140.38, description: "THE HOME DEPOT #2218".into(), date: "March 2nd, 2025".into(), }, ); Database { transactions } }); #[rocket::get("/")] async fn index() -> Redirect { Redirect::to(rocket::uri!(transaction_list())) } #[rocket::get("/transactions")] async fn transaction_list() -> Template { let transactions: Vec<_> = DB.transactions.values().collect(); Template::render("transaction-list", context! { transactions: transactions, }) } #[rocket::get("/transactions/")] async fn get_transaction(id: i32) -> Option