tmpl_resolver/resolver/ordered_map.rs
1use crate::{
2 TemplateResolver,
3 resolver::{OrderedAST, TemplateAST},
4};
5
6impl TemplateResolver {
7 /// Converts the resolver into a BTreeMap.
8 ///
9 /// An ordered BTreeMap is useful when you need to serialize the
10 /// TemplateResolver to a configuration file or a binary file.
11 ///
12 /// ## Example
13 ///
14 /// ```
15 /// use tmpl_resolver::TemplateResolver;
16 ///
17 /// let resolver = TemplateResolver::default();
18 /// let _map = resolver.into_btree_map();
19 /// ```
20 pub fn into_btree_map(self) -> OrderedAST {
21 self.into()
22 }
23
24 /// Takes ownership of the Self and returns the inner data
25 /// (template AST)
26 ///
27 /// ## Example
28 ///
29 /// ```
30 /// use tmpl_resolver::TemplateResolver;
31 ///
32 /// let resolver = TemplateResolver::default();
33 /// let _inner_data = resolver.into_inner();
34 /// ```
35 pub fn into_inner(self) -> TemplateAST {
36 self.0
37 }
38}
39
40/// Converts the resolver into an ordered abstract syntax tree (AST)
41/// representation.
42///
43/// ## Feature-dependent Behavior
44///
45/// - **With `std` feature**: Converts internal storage to a
46/// [`alloc::collections::BTreeMap`]-backed ordered AST through iterative
47/// collection. This guarantees deterministic ordering.
48/// - **Without `std` feature**: Directly returns the pre-ordered AST structure
49/// without conversion, optimized for no_std environments.
50impl From<TemplateResolver> for OrderedAST {
51 fn from(value: TemplateResolver) -> Self {
52 #[cfg(feature = "std")]
53 {
54 value
55 .into_inner()
56 .into_iter()
57 .collect()
58 }
59
60 #[cfg(not(feature = "std"))]
61 {
62 value.into_inner()
63 }
64 }
65}