tmpl_resolver/resolver/
std_impl.rs1use core::fmt::Display;
2use std::collections::HashMap as StdHashMap;
3
4use kstring::KString;
5use tap::Pipe;
6
7use crate::{
8 TemplateResolver,
9 error::{ResolverError, ResolverResult},
10 parsers::parse_value_or_map_err,
11 resolver::TemplateAST,
12};
13
14impl<K, V, S> TryFrom<StdHashMap<K, V, S>> for TemplateResolver
15where
16 K: Into<KString> + Display,
17 V: AsRef<str>,
18{
19 type Error = ResolverError;
20
21 fn try_from(value: StdHashMap<K, V, S>) -> Result<Self, Self::Error> {
22 Self::try_from_raw(value)
23 }
24}
25
26impl<K, V, S> TryFrom<ahash::AHashMap<K, V, S>> for TemplateResolver
27where
28 K: Into<KString> + Display,
29 V: AsRef<str>,
30{
31 type Error = ResolverError;
32
33 fn try_from(value: ahash::AHashMap<K, V, S>) -> Result<Self, Self::Error> {
34 Self::try_from_raw(value)
35 }
36}
37
38impl<K, V> TryFrom<Vec<(K, V)>> for TemplateResolver
39where
40 K: Into<KString> + Display,
41 V: AsRef<str>,
42{
43 type Error = ResolverError;
44
45 fn try_from(value: Vec<(K, V)>) -> Result<Self, Self::Error> {
46 Self::try_from_raw(value)
47 }
48}
49
50impl TemplateResolver {
51 pub fn try_from_raw<K, V, I>(iter: I) -> ResolverResult<Self>
98 where
99 K: Into<KString> + Display,
100 V: AsRef<str>,
101 I: IntoIterator<Item = (K, V)>,
102 {
103 iter
104 .into_iter()
105 .map(|(key, value)| {
106 parse_value_or_map_err(&key, value.as_ref()) .map(|tmpl| (key.into(), tmpl))
108 })
109 .collect::<Result<TemplateAST, _>>()?
111 .pipe(Self)
112 .pipe(Ok)
113 }
114}