ovlach_frontend/src/lib.rs
2023-12-03 17:30:27 +01:00

74 lines
2.3 KiB
Rust

use nanobyte_tera::{hosts::static_filter, l18n::translate_filter, date::{calculate_age, get_year}, string::insert_space_every, gravatar::gravatar_link};
use ovlach_tera::entity::lang_entity;
use rocket::{*, fairing::AdHoc};
use rocket_dyn_templates::Template;
use ::serde::{Deserialize, Serialize};
use tools::tera::advanced_filter;
pub mod routes;
pub mod services;
pub mod tools;
#[derive(Deserialize)]
#[serde(crate = "rocket::serde")]
pub struct PresentationConfig {
static_route: String,
}
#[derive(Deserialize)]
#[serde(crate = "rocket::serde")]
pub struct CVBackendConfig {
cv_backend_path: String,
}
#[derive(Serialize, Deserialize, Debug)]
#[serde(crate = "rocket::serde")]
pub struct FrontendSVCConfig {
pub contact_service: String,
pub pdf_service: String,
}
#[derive(Deserialize)]
#[serde(crate = "rocket::serde")]
pub struct DefaultPerson {
default_person_name: String,
}
pub fn rocket_builder() -> Rocket<Build> {
let rocket = rocket::build();
//let figment = rocket.figment();
// extract the entire config any `Deserialize` value
//let config: PresentationConfig = figment.extract().expect("config");
rocket.attach(
Template::try_custom(|engines| {
engines.tera.register_filter("static", static_filter);
engines.tera.register_filter("translate", translate_filter);
engines.tera.register_filter("calculate_age", calculate_age);
engines.tera.register_filter("insert_space_every", insert_space_every);
engines.tera.register_filter("gravatar_link", gravatar_link);
// filters specific to API
engines.tera.register_filter("lang_entity", lang_entity);
engines.tera.register_filter("format_date", get_year); // deprecated
engines.tera.register_filter("get_year", get_year);
engines.tera.register_filter("advanced_filter", advanced_filter);
Ok(())
})
).attach(
AdHoc::config::<PresentationConfig>()
).attach(
AdHoc::config::<CVBackendConfig>()
).attach(
AdHoc::config::<DefaultPerson>()
).attach(
AdHoc::config::<FrontendSVCConfig>()
).attach(
nanobyte_opentelemetry::rocket::TracingFairing::ignite()
).mount("/", routes![
routes::root::index,
routes::root::index_without_lang
])
}