i18n+filtering fork - fluent-templates v2
at main 90 lines 3.2 kB view raw
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}