use crate::repo::{FileInfo, Repo, SimpleRepo};
use askama::Template;
use axum::{
http::StatusCode,
response::{Html, IntoResponse, Response},
};
#[derive(Template)]
#[template(path = "index.html")]
pub struct IndexTemplate {
pub repos: Vec<SimpleRepo>,
}
#[derive(Template)]
#[template(path = "repo_summary.html")]
pub struct RepoSummaryTemplate {
pub repo: Repo,
}
#[derive(Template)]
#[template(path = "not_found.html")]
pub struct NotFoundTemplate {}
#[derive(Template)]
#[template(path = "file.html")]
pub struct FileTemplate {
pub file: FileInfo,
}
pub struct HtmlTemplate<T>(pub T);
impl<T> IntoResponse for HtmlTemplate<T>
where
T: Template,
{
fn into_response(self) -> Response {
match self.0.render() {
Ok(html) => Html(html).into_response(),
Err(err) => (
StatusCode::INTERNAL_SERVER_ERROR,
format!("Failed to render template. Error: {err}"),
)
.into_response(),
}
}
}