diff options
Diffstat (limited to 'src/controller_web.rs')
| -rw-r--r-- | src/controller_web.rs | 36 | +36 −0 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/controller_web.rs b/src/controller_web.rs new file mode 100644 --- /dev/null +++ b/src/controller_web.rs @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: 2026 Nikolay Govorov <me@govorov.online> +// SPDX-License-Identifier: AGPL-3.0-or-later + +use axum::{Router, extract, http, response, routing}; +use std::sync::Arc; + +/// Handles html pages rendering and static files +pub struct WebController { + jinja: minijinja::Environment<'static>, +} + +impl WebController { + pub fn new() -> Self { + let mut jinja = minijinja::Environment::new(); + jinja + .add_template("index", include_str!("./index.html")) + .unwrap(); + + Self { jinja } + } + + pub fn router(self: Arc<Self>) -> Router { + Router::new() + .route("/", routing::get(Self::index)) + .with_state(self) + } + + async fn index( + extract::State(controller): extract::State<Arc<Self>>, + ) -> Result<response::Html<String>, http::StatusCode> { + let template = controller.jinja.get_template("index").unwrap(); + let rendered = template.render(minijinja::context! {}).unwrap(); + + Ok(response::Html(rendered)) + } +} |
