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}