bookforge/src/lib.rs

58 lines
1.7 KiB
Rust
Raw Normal View History

2026-01-30 10:33:25 +01:00
use askama::Template;
use askama_web::WebTemplate;
2026-01-27 01:33:21 +01:00
use axum::{
Router,
2026-01-31 00:05:53 +01:00
extract::State,
2026-01-28 00:38:24 +01:00
routing::{get, post},
2026-01-27 01:33:21 +01:00
};
2026-01-23 13:56:30 +01:00
use static_serve::embed_assets;
2026-01-31 00:05:53 +01:00
use crate::{routes::template_ctx::TemplateCtx, state::AppState};
2026-01-26 01:05:10 +01:00
2026-01-27 01:33:21 +01:00
mod migrations;
mod models;
2026-01-23 13:56:30 +01:00
mod routes;
2026-01-26 01:05:10 +01:00
pub mod state;
2026-01-23 13:56:30 +01:00
2026-01-30 18:23:54 +01:00
#[macro_use]
extern crate rust_i18n;
i18n!("locales", fallback = "en", minify_key = true);
2026-01-26 01:05:10 +01:00
pub fn build_app(state: AppState) -> Router {
2026-01-30 18:23:54 +01:00
rust_i18n::set_locale(&state.config.locale);
2026-01-23 13:56:30 +01:00
embed_assets!("assets", compress = true);
Router::new()
.route("/", get(routes::book::index))
2026-01-30 17:06:59 +01:00
.route("/books/new", get(routes::book::new))
2026-01-28 00:38:24 +01:00
.route("/books", post(routes::book::create))
2026-01-23 13:56:30 +01:00
.route("/books/{id}", get(routes::book::show))
2026-01-28 00:38:24 +01:00
.route("/books/{id}", post(routes::book::update))
.route("/books/{id}/delete", post(routes::book::delete))
2026-01-23 13:56:30 +01:00
.route("/books/{id}/edit", get(routes::book::edit))
2026-01-30 17:06:59 +01:00
.route("/books/download_csv", get(routes::book::download_csv))
2026-01-23 13:56:30 +01:00
.route("/users", get(routes::user::index))
2026-01-29 23:52:55 +01:00
.route("/users/new", get(routes::user::new))
.route("/users/{id}/edit", get(routes::user::edit))
.route("/users/{id}", post(routes::user::update))
2026-01-27 01:33:21 +01:00
.route("/users", post(routes::user::create))
2026-01-29 23:52:55 +01:00
.route("/users/{id}/delete", post(routes::user::delete))
2026-01-23 13:56:30 +01:00
.nest("/assets", static_router())
2026-01-30 10:33:25 +01:00
.fallback(error_handler)
2026-01-26 01:05:10 +01:00
.with_state(state)
2026-01-23 13:56:30 +01:00
}
2026-01-30 10:33:25 +01:00
#[derive(Template, WebTemplate)]
#[template(path = "404.html")]
2026-01-31 00:05:53 +01:00
struct NotFoundTemplate {
pub ctx: TemplateCtx,
}
2026-01-30 10:33:25 +01:00
2026-01-31 00:05:53 +01:00
pub async fn error_handler(State(state): State<AppState>) -> impl axum::response::IntoResponse {
NotFoundTemplate {
ctx: TemplateCtx {
base_path: state.config.base_path,
},
}
2026-01-30 10:33:25 +01:00
}