66 lines
1.6 KiB
Rust
66 lines
1.6 KiB
Rust
/*
|
|
* Copyright (c) 2025 Emma Tebibyte <emma@tebibyte.media>
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*
|
|
* This file is part of Mintee.
|
|
*
|
|
* Mintee is free software: you can redistribute it and/or modify it under the
|
|
* terms of the GNU Affero General Public License as published by the Free
|
|
* Software Foundation, either version 3 of the License, or (at your option)
|
|
* any later version.
|
|
*
|
|
* Mintee is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
* details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with Mintee. If not, see https://www.gnu.org/licenses/.
|
|
*/
|
|
|
|
use std::{
|
|
error::Error,
|
|
fmt::{ self, Display, Formatter },
|
|
path::Path,
|
|
};
|
|
|
|
use tera::{ Context, Tera };
|
|
|
|
#[non_exhaustive]
|
|
pub enum PageKind {
|
|
Code,
|
|
Dashboard,
|
|
Tickets,
|
|
User,
|
|
}
|
|
|
|
impl PageKind {
|
|
pub fn render_page(&self, ctx: Context) -> Result<String, Box<dyn Error>> {
|
|
let page_dir = self.to_string();
|
|
let template = String::from_utf8(Path::new(&page_dir)
|
|
.to_path_buf()
|
|
.as_mut_os_string()
|
|
.as_encoded_bytes()
|
|
.to_vec()
|
|
)?;
|
|
|
|
let tera = Tera::new(&page_dir)?;
|
|
Ok(tera.render(&template, &ctx)?)
|
|
}
|
|
}
|
|
|
|
impl Display for PageKind {
|
|
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), fmt::Error> {
|
|
use PageKind::*;
|
|
|
|
let path = match self {
|
|
Code => "repo/code.html",
|
|
Dashboard => "dashboard.html",
|
|
Tickets => "repo/tickets.html",
|
|
User => "user.html",
|
|
};
|
|
|
|
write!(f, "./assets/templates/{}", path)
|
|
}
|
|
}
|