1#![allow(clippy::result_large_err)]
13#![allow(clippy::explicit_auto_deref)]
14#![allow(clippy::cloned_ref_to_slice_refs)]
15#![allow(clippy::iter_overeager_cloned)]
16#![allow(clippy::double_ended_iterator_last)]
17#![allow(clippy::to_string_in_format_args)]
18#![allow(clippy::needless_raw_string_hashes)]
19#![allow(clippy::doc_lazy_continuation)]
20
21pub mod error;
22mod exec;
23pub mod funcs;
24mod lexer;
25mod node;
26mod parse;
27mod print_verb;
28mod printf;
29mod template;
30mod utils;
31
32#[cfg(feature = "helm-functions")]
33pub mod helm_functions;
34
35#[cfg(feature = "mows-functions")]
36pub mod mows_functions;
37
38#[cfg(feature = "all-functions")]
39pub mod all_functions;
40
41#[doc(inline)]
42pub use crate::template::Template;
43
44#[doc(inline)]
45pub use crate::exec::Context;
46
47#[doc(inline)]
48pub use gtmpl_value::Func;
49
50pub use gtmpl_value::FuncError;
51
52#[doc(inline)]
53pub use gtmpl_value::from_value;
54
55pub use error::{ErrorContext, ExecError, ParseError, StructuredError, TemplateError};
56pub use gtmpl_value::Value;
57
58pub fn template<T: Into<Value>>(template_str: &str, context: T) -> Result<String, TemplateError> {
66 let mut tmpl = Template::default();
67 tmpl.parse(template_str)?;
68 tmpl.render(&Context::from(context)).map_err(Into::into)
69}