use actix_web::{HttpRequest, Responder, web}; use actix_web::http::header::q; use clap::builder::TypedValueParser; use minijinja::context; use serde::Deserialize; use std::collections::HashMap; use log::info; use resource::resource_str; use crate::webui::MiniJinjaRenderer; #[actix_web::get("/")] pub async fn index( tmpl_env: MiniJinjaRenderer, ) -> actix_web::Result { tmpl_env.render("index.html", ()) } #[actix_web::get("/actions")] pub async fn actions( tmpl_env: MiniJinjaRenderer, ) -> actix_web::Result { tmpl_env.render("actions.html", ()) } #[actix_web::get("/overview")] pub async fn overview( tmpl_env: MiniJinjaRenderer, ) -> actix_web::Result { tmpl_env.render("overview.html", ()) } #[actix_web::get("/partials/overview/submit_button")] pub async fn overview_submit_button( req: HttpRequest, tmpl_env: MiniJinjaRenderer, query: web::Query>, ) -> actix_web::Result { let ctx = context! { event_type => query.get("event_type").unwrap_or(&"".to_string()), }; tmpl_env.render("partials/overview/submit_button.html", ctx) } #[actix_web::get("/partials/actions/action-form")] pub async fn actions_partials( req: HttpRequest, tmpl_env: MiniJinjaRenderer, query: web::Query>, ) -> actix_web::Result { let event_type = query.get("event_type").unwrap_or(&"404".to_string()).to_string(); let ctx = context!{event_type => event_type}; let template_location = format!("partials/actions/{:}.html", event_type); info!("Getting template at: {:?}", template_location); tmpl_env.render(template_location.as_str(), ctx) } #[derive(Deserialize, Debug)] struct Event1{ name: String, age: i64, } #[derive(Deserialize, Debug)] struct Event2{ name: String, score: i64, } #[derive(Deserialize, Debug)] enum Event{ Event1(Event1), Event2(Event2), } #[derive(Deserialize, Debug)] struct CreateEventPayload { event: Event, event_type: String, } #[actix_web::post("/v1/events/{event_type}")] pub async fn push_event( req: HttpRequest, tmpl_env: MiniJinjaRenderer, event_channel: web::Data>, web::Json(form): web::Json, ) -> actix_web::Result { let shit = req.match_info().get("event_type").unwrap(); println!("payload: {:?}", form); let _ = event_channel.send(56).await; let ctx = context! { event_type => shit, }; tmpl_env.render("partials/v1/event_processed.html", ctx) }