forked from
smokesignal.events/smokesignal
i18n+filtering fork - fluent-templates v2
1#[macro_export]
2macro_rules! select_template {
3 ($hxboosted:expr, $hxrequest:expr, $language:expr) => {
4 select_template!("alert", $hxboosted, $hxrequest, $language)
5 };
6 ($template_name:expr, $hxboosted:expr, $hxrequest:expr, $language:expr) => {{
7 $crate::http::template_renderer::select_template_with_fallback(
8 $template_name,
9 &$language,
10 $hxboosted,
11 $hxrequest
12 )
13 }};
14}
15
16/// Enhanced macro for creating template renderer from common handler parameters
17#[macro_export]
18macro_rules! create_renderer {
19 ($web_context:expr, $language:expr, $hx_boosted:expr, $hx_request:expr) => {
20 $crate::http::template_renderer::TemplateRenderer::new(
21 $web_context,
22 $language,
23 None, // user_gender - can be enhanced later
24 $hx_boosted,
25 $hx_request
26 )
27 };
28 ($web_context:expr, $language:expr, $hx_boosted:expr, $hx_request:expr, $user_gender:expr) => {
29 $crate::http::template_renderer::TemplateRenderer::new(
30 $web_context,
31 $language,
32 $user_gender,
33 $hx_boosted,
34 $hx_request
35 )
36 };
37}
38
39#[macro_export]
40macro_rules! contextual_error {
41 ($web_context:expr, $language:expr, $template:expr, $template_context:expr, $error:expr) => {
42 contextual_error!(
43 $web_context,
44 $language,
45 $template,
46 $template_context,
47 $error,
48 http::StatusCode::OK
49 )
50 };
51 ($web_context:expr, $language:expr, $template:expr, $template_context:expr, $error:expr, $status_code:expr) => {
52 {
53 let (err_bare, err_partial) = $crate::errors::expand_error($error.to_string());
54 tracing::warn!(error = ?$error, "encountered error");
55 let error_message = $crate::i18n::fluent_loader::format_error(&$language, &err_bare, &err_partial);
56
57 // Create error context using proper minijinja context
58 let error_context = minijinja::context! {
59 message => error_message,
60 locale => $language.to_string(),
61 language => $language.to_string(),
62 };
63
64 // Merge with base context if it's a map
65 let final_context = if $template_context.kind() == minijinja::value::ValueKind::Map {
66 minijinja::value::merge_maps([$template_context, error_context])
67 } else {
68 error_context
69 };
70
71 Ok(
72 (
73 $status_code,
74 axum_template::RenderHtml(
75 &$template,
76 $web_context.engine.clone(),
77 final_context,
78 )
79 ).into_response()
80 )
81 }
82 };
83 // Enhanced version using template renderer
84 (renderer: $renderer:expr, $error:expr, $context:expr) => {
85 Ok($renderer.render_error($error, $context))
86 };
87 (renderer: $renderer:expr, $error:expr) => {
88 Ok($renderer.render_error($error, minijinja::context!{}))
89 };
90}