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, Fairing}}; 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 template_fairing() -> impl Fairing { 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(()) }) } pub fn rocket_builder() -> Rocket { 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_fairing() ).attach( AdHoc::config::() ).attach( AdHoc::config::() ).attach( AdHoc::config::() ).attach( AdHoc::config::() ).attach( nanobyte_opentelemetry::rocket::TracingFairing::ignite() ).mount("/", routes![ routes::root::index, routes::root::index_without_lang ]) }