feat: ✨ send message through htmx
This commit is contained in:
parent
b87ca298e9
commit
5969f7b57c
8 changed files with 198 additions and 110 deletions
64
src/routing.rs
Normal file
64
src/routing.rs
Normal file
|
@ -0,0 +1,64 @@
|
|||
use askama::Template;
|
||||
use axum::{
|
||||
Form, Router,
|
||||
extract::Path,
|
||||
http::{HeaderMap, StatusCode, header},
|
||||
response::{Html, IntoResponse},
|
||||
routing::{get, post},
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{CSS, FAVICON};
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize, Template)]
|
||||
#[template(path = "main_page.html")]
|
||||
struct MainPage {
|
||||
name: String,
|
||||
email: String,
|
||||
message: String,
|
||||
}
|
||||
|
||||
pub async fn route() -> Router {
|
||||
Router::new()
|
||||
.route("/alive", get(alive))
|
||||
.route("/assets/{asset_name}", get(serve_assets))
|
||||
.route("/{asset_name}", get(serve_assets))
|
||||
.route("/", get(main_page))
|
||||
.route("/send", post(send))
|
||||
}
|
||||
|
||||
async fn alive() -> impl IntoResponse {
|
||||
(StatusCode::OK, Html("I'm alive"))
|
||||
}
|
||||
|
||||
async fn send(Form(body): Form<MainPage>) -> impl IntoResponse {
|
||||
println!("{}", body.name);
|
||||
println!("{}", body.email);
|
||||
println!("{}", body.message);
|
||||
(StatusCode::CREATED, "Thanks for contacting!")
|
||||
}
|
||||
|
||||
async fn serve_assets(Path(asset_name): Path<String>) -> impl IntoResponse {
|
||||
let mut headers = HeaderMap::new();
|
||||
|
||||
if asset_name == "main.css" {
|
||||
headers.insert(header::CONTENT_TYPE, "text/css".parse().unwrap());
|
||||
(StatusCode::OK, headers, CSS)
|
||||
} else if asset_name == "favicon.ico" {
|
||||
(StatusCode::OK, headers, FAVICON)
|
||||
} else {
|
||||
(StatusCode::NOT_FOUND, headers, "")
|
||||
}
|
||||
}
|
||||
|
||||
async fn main_page() -> impl IntoResponse {
|
||||
let main_page = MainPage {
|
||||
name: String::default(),
|
||||
email: String::default(),
|
||||
message: String::default(),
|
||||
};
|
||||
match main_page.render() {
|
||||
Ok(rendered) => (StatusCode::OK, Html(rendered)),
|
||||
Err(err_val) => (StatusCode::SERVICE_UNAVAILABLE, Html(err_val.to_string())),
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue