2023-11-26 15:36:39 +00:00
|
|
|
|
2023-12-01 23:59:31 +00:00
|
|
|
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;
|
2023-12-03 18:13:02 +00:00
|
|
|
use rocket::{*, fairing::{AdHoc, Fairing}};
|
2023-11-27 00:19:10 +00:00
|
|
|
use rocket_dyn_templates::Template;
|
2023-12-10 18:05:40 +00:00
|
|
|
use rocket_prometheus::PrometheusMetrics;
|
2023-12-03 16:30:27 +00:00
|
|
|
use ::serde::{Deserialize, Serialize};
|
2023-12-03 14:46:05 +00:00
|
|
|
use tools::tera::advanced_filter;
|
2023-11-26 15:36:39 +00:00
|
|
|
|
|
|
|
pub mod routes;
|
2023-11-26 17:40:12 +00:00
|
|
|
pub mod services;
|
|
|
|
pub mod tools;
|
2023-11-26 15:36:39 +00:00
|
|
|
|
2023-11-26 16:31:20 +00:00
|
|
|
#[derive(Deserialize)]
|
|
|
|
#[serde(crate = "rocket::serde")]
|
|
|
|
pub struct PresentationConfig {
|
|
|
|
static_route: String,
|
|
|
|
}
|
|
|
|
|
2023-11-26 17:40:12 +00:00
|
|
|
#[derive(Deserialize)]
|
|
|
|
#[serde(crate = "rocket::serde")]
|
|
|
|
pub struct CVBackendConfig {
|
|
|
|
cv_backend_path: String,
|
2023-11-26 16:31:20 +00:00
|
|
|
}
|
|
|
|
|
2023-12-03 16:30:27 +00:00
|
|
|
#[derive(Serialize, Deserialize, Debug)]
|
|
|
|
#[serde(crate = "rocket::serde")]
|
|
|
|
pub struct FrontendSVCConfig {
|
|
|
|
pub contact_service: String,
|
|
|
|
pub pdf_service: String,
|
|
|
|
}
|
|
|
|
|
2023-12-03 14:46:05 +00:00
|
|
|
#[derive(Deserialize)]
|
|
|
|
#[serde(crate = "rocket::serde")]
|
|
|
|
pub struct DefaultPerson {
|
|
|
|
default_person_name: String,
|
|
|
|
}
|
|
|
|
|
2023-12-03 18:13:02 +00:00
|
|
|
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(())
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2023-11-26 22:53:31 +00:00
|
|
|
|
2023-12-03 14:46:05 +00:00
|
|
|
pub fn rocket_builder() -> Rocket<Build> {
|
2023-11-26 16:31:20 +00:00
|
|
|
let rocket = rocket::build();
|
|
|
|
//let figment = rocket.figment();
|
|
|
|
// extract the entire config any `Deserialize` value
|
|
|
|
//let config: PresentationConfig = figment.extract().expect("config");
|
2023-12-03 14:46:05 +00:00
|
|
|
|
2023-12-10 18:05:40 +00:00
|
|
|
let prometheus = PrometheusMetrics::new();
|
|
|
|
|
2023-11-26 16:31:20 +00:00
|
|
|
rocket.attach(
|
2023-12-03 18:13:02 +00:00
|
|
|
template_fairing()
|
2023-11-26 16:31:20 +00:00
|
|
|
).attach(
|
|
|
|
AdHoc::config::<PresentationConfig>()
|
2023-11-26 17:40:12 +00:00
|
|
|
).attach(
|
|
|
|
AdHoc::config::<CVBackendConfig>()
|
2023-11-27 00:19:10 +00:00
|
|
|
).attach(
|
2023-12-03 14:46:05 +00:00
|
|
|
AdHoc::config::<DefaultPerson>()
|
2023-12-03 16:30:27 +00:00
|
|
|
).attach(
|
|
|
|
AdHoc::config::<FrontendSVCConfig>()
|
2023-12-03 14:46:05 +00:00
|
|
|
).attach(
|
|
|
|
nanobyte_opentelemetry::rocket::TracingFairing::ignite()
|
2023-12-10 18:05:40 +00:00
|
|
|
).attach(
|
|
|
|
prometheus.clone()
|
|
|
|
)
|
|
|
|
.mount("/", routes![
|
2023-11-27 00:19:10 +00:00
|
|
|
routes::root::index,
|
|
|
|
routes::root::index_without_lang
|
2023-11-26 15:36:39 +00:00
|
|
|
])
|
2023-12-10 18:05:40 +00:00
|
|
|
.mount("/metrics", prometheus)
|
2023-12-03 14:46:05 +00:00
|
|
|
}
|