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}