rumtk_web/utils/
render.rs1use crate::types::HTMLResult;
24use crate::RUMWebRedirect;
25use rumtk_core::strings::rumtk_format;
26
27pub fn rumtk_web_render_html<T: askama::Template>(template: T, url: RUMWebRedirect) -> HTMLResult {
28 let result = template.render();
29 match result {
30 Ok(html) => Ok(url.into_web_response(Some(html))),
31 Err(e) => {
32 let tn = std::any::type_name::<T>();
33 Err(rumtk_format!("Template {tn} render failed: {e:?}"))
34 }
35 }
36}
37
38#[macro_export]
39macro_rules! rumtk_web_render_component {
40 ( $component_fxn:expr ) => {{
41 use rumtk_core::strings::{RUMString, RUMStringConversions};
42 match $component_fxn() {
43 Ok(x) => x.to_rumstring(),
44 _ => RUMString::default(),
45 }
46 }};
47 ( $component_fxn:expr, $app_state:expr ) => {{
48 use rumtk_core::strings::{RUMString, RUMStringConversions};
49 match $component_fxn($app_state.clone()) {
50 Ok(x) => x.to_rumstring(),
51 _ => RUMString::default(),
52 }
53 }};
54 ( $component:expr, $params:expr, $app_state:expr ) => {{
55 use rumtk_core::strings::{RUMString, RUMStringConversions};
56 use $crate::{rumtk_web_get_component, rumtk_web_params_map};
57
58 let component = rumtk_web_get_component!($component);
59
60 match component(&[""], &rumtk_web_params_map!($params), $app_state.clone()) {
61 Ok(x) => x.to_rumstring(),
62 _ => RUMString::default(),
63 }
64 }};
65}
66
67#[macro_export]
68macro_rules! rumtk_web_render_html {
69 ( $page:expr ) => {{
70 use $crate::utils::{rumtk_web_render_html, types::HTMLResult, RUMWebRedirect};
71
72 let closure = || -> HTMLResult { rumtk_web_render_html($page, RUMWebRedirect::None) };
73
74 closure()
75 }};
76 ( $page:expr, $redirect_url:expr ) => {{
77 use $crate::utils::{rumtk_web_render_html, types::HTMLResult};
78
79 let closure = || -> HTMLResult { rumtk_web_render_html($page, $redirect_url) };
80
81 closure()
82 }};
83}
84
85#[macro_export]
90macro_rules! rumtk_web_render_markdown {
91 ( $md:expr ) => {{
92 use pulldown_cmark::{Options, Parser};
93 use rumtk_core::strings::RUMStringConversions;
94
95 let mut options = Options::empty();
96 options.insert(Options::ENABLE_STRIKETHROUGH);
97 options.insert(Options::ENABLE_TASKLISTS);
98 options.insert(Options::ENABLE_MATH);
99 options.insert(Options::ENABLE_TABLES);
100 options.insert(Options::ENABLE_WIKILINKS);
101
102 let input = String::from($md);
103 let parser = Parser::new_ext(&input, options);
104 let mut html_output = String::new();
105 pulldown_cmark::html::push_html(&mut html_output, parser);
106 println!("{}", &html_output);
107
108 html_output.to_rumstring()
109 }};
110}