tmpl_resolver/resolver/
bin_code_nostd.rs

1pub(crate) use bincode::config::standard as bincode_std_cfg;
2use tap::Pipe;
3
4use crate::{TemplateResolver, error::ResolverResult};
5
6impl TemplateResolver {
7  /// Decodes binary data into TemplateResolver using bincode's optimized
8  /// deserialization.
9  ///
10  /// ## Input
11  ///
12  /// - `slice` - Binary input slice containing serialized TemplateResolver data
13  ///
14  /// ## Output
15  ///
16  /// - A tuple of (deserialized TemplateResolver, amount of bytes read) on
17  ///   success
18  /// - Error details if deserialization fails
19  ///
20  /// See also: [bincode::serde::decode_from_slice]
21  pub fn decode_bin_from_slice(slice: &[u8]) -> ResolverResult<(Self, usize)> {
22    bincode::serde::decode_from_slice(slice, bincode_std_cfg())?.pipe(Ok)
23  }
24
25  /// Encodes the Self(TemplateResolver) into a binary format stored in a
26  /// [`Vec<u8>`].
27  ///
28  /// ## Example
29  ///
30  /// ```
31  /// use tmpl_resolver::TemplateResolver;
32  ///
33  /// let res: TemplateResolver =
34  ///   [("🐱", "喵 ฅ(°ω°ฅ)"), ("hello", "{🐱}")].try_into()?;
35  ///
36  /// let _data = res.encode_bin_to_vec()?;
37  ///
38  /// # Ok::<(), tmpl_resolver::error::ResolverError>(())
39  /// ```
40  ///
41  /// See also: [bincode::serde::encode_to_vec]
42  pub fn encode_bin_to_vec(&self) -> ResolverResult<alloc::vec::Vec<u8>> {
43    bincode::serde::encode_to_vec(self, bincode_std_cfg())?.pipe(Ok)
44  }
45}
46
47#[cfg(test)]
48mod tests {
49  use super::*;
50
51  /// - release: 1.542µs
52  /// - debug: 7.375µs
53  #[test]
54  #[ignore]
55  #[cfg(feature = "std")]
56  fn bench_encode_bin() -> ResolverResult<()> {
57    use testutils::simple_benchmark;
58
59    // use tmpl_resolver::TemplateResolver;
60    use crate::TemplateResolver;
61    let res: TemplateResolver =
62      [("🐱", "喵 ฅ(°ω°ฅ)"), ("hello", "{🐱}")].try_into()?;
63
64    simple_benchmark(|| res.encode_bin_to_vec());
65
66    let _data = res.encode_bin_to_vec()?;
67
68    // println!("{}", data.capacity());
69    // dbg!(data);
70
71    Ok(())
72  }
73}