refacto: nest axum templates routes

This commit is contained in:
Florian Briand 2024-08-04 18:34:42 +02:00 committed by florian_briand
parent 4a27dacd8e
commit e057889403
4 changed files with 35 additions and 20 deletions

View File

@ -2,26 +2,27 @@ mod templates;
use std::path::Path; use std::path::Path;
use askama::Template;
use askama_axum::IntoResponse; use askama_axum::IntoResponse;
use templates::{hello::HelloResponse, index::GetIndexResponse}; use axum::http::{StatusCode, Uri};
use tower_http::services::ServeDir; use tower_http::services::ServeDir;
async fn root() -> impl IntoResponse { async fn fallback(uri: Uri) -> (StatusCode, String) {
return GetIndexResponse {}.into_response(); (StatusCode::NOT_FOUND, format!("No route for {uri}"))
} }
async fn hello() -> impl IntoResponse { #[derive(Template)]
return HelloResponse { #[template(path = "index.html")]
name: "Theo".to_string(), pub struct GetIndexResponse;
}
.into_response(); async fn root() -> impl IntoResponse {
GetIndexResponse {}.into_response()
} }
pub fn get_router(assets_path: &Path) -> axum::Router { pub fn get_router(assets_path: &Path) -> axum::Router {
let router = axum::Router::new() axum::Router::new()
.nest_service("/assets", ServeDir::new(assets_path)) .nest_service("/assets", ServeDir::new(assets_path))
.route("/", axum::routing::get(root)) .route("/", axum::routing::get(root))
.route("/hello", axum::routing::get(hello)); .merge(templates::get_routes())
.fallback(fallback)
router
} }

View File

@ -1,7 +1,20 @@
use askama::Template; use askama::Template;
use askama_axum::IntoResponse;
use axum::{routing, Router};
#[derive(Template)] #[derive(Template)]
#[template(path = "hello.html")] #[template(path = "hello.html")]
pub struct HelloResponse { struct HelloResponse {
pub name: String, pub name: String,
} }
async fn hello() -> impl IntoResponse {
HelloResponse {
name: "Theo".to_string(),
}.into_response()
}
pub fn get_routes() -> Router {
Router::new()
.route("/", routing::get(hello))
}

View File

@ -1,5 +0,0 @@
use askama::Template;
#[derive(Template)]
#[template(path = "index.html")]
pub struct GetIndexResponse;

View File

@ -1,2 +1,8 @@
pub mod hello; use axum::Router;
pub mod index;
mod hello;
pub fn get_routes() -> Router {
Router::new()
.nest("/hello", hello::get_routes())
}