45 lines
1.3 KiB
Rust
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";
|
|
}
|