achubb_website/src/html/mod.rs
Awstin e90cda7359 Added highlighting for navbar
Added a top button at the bottom of each page
2024-03-24 15:18:13 -04:00

45 lines
1.3 KiB
Rust

use askama::Template;
use axum::{
http::StatusCode,
response::{Html, IntoResponse, Response},
};
pub mod root;
pub mod blog;
pub mod projects;
pub mod api;
/// A wrapper type that we'll use to encapsulate HTML parsed by askama into valid HTML for axum to serve.
pub struct HtmlTemplate<T>(pub T);
/// Allows us to convert Askama HTML templates into valid HTML for axum to serve in the response.
impl<T> IntoResponse for HtmlTemplate<T>
where
T: Template,
{
fn into_response(self) -> Response {
// Attempt to render the template with askama
match self.0.render() {
// If we're able to successfully parse and aggregate the template, serve it
Ok(html) => Html(html).into_response(),
// If we're not, return an error or some bit of fallback HTML
Err(err) => (
StatusCode::INTERNAL_SERVER_ERROR,
format!("Failed to render template. Error: {}", err),
)
.into_response(),
}
}
}
#[non_exhaustive]
pub struct NavBar {
}
impl NavBar {
pub const HOME: &'static str = "";
pub const BLOG: &'static str = "blog";
pub const PROJECTS: &'static str = "projects";
pub const NOW: &'static str = "now";
pub const ABOUT: &'static str = "about";
pub const CONTACT: &'static str = "contact";
}