quokka_templating/
lib.rs

1mod error;
2mod handler;
3mod helpers;
4#[cfg(feature = "markdown")]
5mod markdown;
6mod scripting;
7mod styling;
8mod templating;
9
10pub use error::*;
11
12use quokka_state::ProvideStateRef;
13pub use scripting::Scripting;
14pub use styling::Styling;
15pub use templating::{AliasedEmbed, Templating};
16
17pub use handler::add_routes;
18
19/// Allows to execute templating functions directly on any supported state
20pub trait TemplatingStateExt {
21    fn templating(&mut self) -> &mut Templating;
22
23    fn styling(&mut self) -> &mut Styling;
24
25    fn scripting(&mut self) -> &mut Scripting;
26
27    /// See [Templating::register_embedded_templates]
28    fn register_templates<E: rust_embed::Embed + 'static>(&mut self) -> Result<()>;
29
30    /// See [Templating::register_embedded_templates_aliased_partials]
31    fn register_templates_aliased<E: rust_embed::Embed + 'static>(&mut self) -> Result<()>;
32
33    /// See [Templating::register_inline_template]
34    fn register_inline_template(&mut self, name: &str, template: &str) -> Result<()>;
35
36    /// See [Templating::register_helper]
37    fn register_helper<H: handlebars::HelperDef + Send + Sync + 'static, B: Into<Box<H>>>(
38        &mut self,
39        name: &str,
40        helper: B,
41    );
42
43    /// See [Styling::register_embedded_styles]
44    fn register_styles<E: rust_embed::RustEmbed + Send + Sync + 'static>(&mut self);
45
46    /// See [Styling::add_merged_style]
47    fn add_merged_style(&mut self, path: &str);
48
49    /// See [Styling::add_merged_style_group]
50    fn add_merged_style_group(&mut self, group: &str, path: &str);
51
52    /// See [Scripting::register_embedded_scripts]
53    fn register_scripts<E: rust_embed::RustEmbed + Send + Sync + 'static>(&mut self);
54
55    /// See [Scripting::add_merged_script]
56    fn add_merged_script(&mut self, script: &str);
57
58    /// See [Scripting::add_merged_script_group]
59    fn add_merged_script_group(&mut self, group: &str, script: &str);
60}
61
62#[cfg(feature = "quokka-pouch")]
63mod pouch;
64
65#[cfg(feature = "quokka-pouch")]
66pub use pouch::*;
67
68impl<S> TemplatingStateExt for S
69where
70    S: Send + Sync + Clone + 'static,
71    S: ProvideStateRef<Templating> + ProvideStateRef<Styling> + ProvideStateRef<Scripting>,
72{
73    fn templating(&mut self) -> &mut Templating {
74        self.provide_mut()
75    }
76
77    fn styling(&mut self) -> &mut Styling {
78        self.provide_mut()
79    }
80
81    fn scripting(&mut self) -> &mut Scripting {
82        self.provide_mut()
83    }
84
85    fn register_templates<E: rust_embed::Embed + 'static>(&mut self) -> Result<()> {
86        self.templating().register_embedded_templates::<E>()
87    }
88
89    fn register_templates_aliased<E: rust_embed::Embed + 'static>(&mut self) -> Result<()> {
90        self.templating()
91            .register_embedded_templates_aliased_partials::<E>()
92    }
93
94    fn register_inline_template(&mut self, name: &str, template: &str) -> Result<()> {
95        self.templating().register_inline_template(name, template)
96    }
97
98    fn register_helper<H: handlebars::HelperDef + Send + Sync + 'static, B: Into<Box<H>>>(
99        &mut self,
100        name: &str,
101        helper: B,
102    ) {
103        self.templating().register_helper(name, helper);
104    }
105
106    fn register_styles<E: rust_embed::RustEmbed + Send + Sync + 'static>(&mut self) {
107        self.styling().register_embedded_styles::<E>();
108    }
109
110    fn add_merged_style(&mut self, path: &str) {
111        self.styling().add_merged_style(path);
112    }
113
114    fn add_merged_style_group(&mut self, group: &str, path: &str) {
115        self.styling().add_merged_style_group(group, path);
116    }
117
118    fn register_scripts<E: rust_embed::RustEmbed + Send + Sync + 'static>(&mut self) {
119        self.scripting().register_embedded_scripts::<E>();
120    }
121
122    fn add_merged_script(&mut self, script: &str) {
123        self.scripting().add_merged_script(script);
124    }
125
126    fn add_merged_script_group(&mut self, group: &str, script: &str) {
127        self.scripting().add_merged_script_group(group, script);
128    }
129}