#[derive(Template)] #[template(path = "calls.html")] struct CallsTemplate<'a> { flash: &'a Option, call_records: &'a Vec, number_map: &'a HashMap, } async fn show_call_list(mut req: tide::Request<()>) -> tide::Result { let flash: Option = req.session().get("flash"); req.session_mut().remove("flash"); let number_map = load_number_map()?; let records = load_call_records()?; let mut rdr = ReaderBuilder::new() .has_headers(false) .from_reader(records.as_bytes()); let mut records: Vec = rdr.deserialize().filter_map(Result::ok).collect(); records.sort_by(CallRecord::compare_by_start); let hello = CallsTemplate { flash: &flash, call_records: &records, number_map: &number_map, }; let response = Response::builder(200) .body(hello.render().expect("render")) .header("x-custom-header", "value") .content_type(tide::http::mime::HTML) .build(); Ok(response) }