glossa_shared/decode/
file.rs

1use super::*;
2
3pub fn decode_file<T, P>(src_file: P) -> ResolverResult<T>
4where
5  T: serde::de::DeserializeOwned,
6  P: AsRef<std::path::Path>,
7{
8  use std::{fs::File, io::BufReader};
9
10  use bincode::serde::decode_from_std_read;
11  use tap::Pipe;
12
13  let decode = |src| decode_from_std_read::<T, _, _>(src, bincode_std_cfg());
14
15  src_file
16    .pipe(File::open)?
17    .pipe(BufReader::new)
18    .pipe_ref_mut(decode)
19    .map_err(Into::into)
20}
21
22/// decodes single L10n file (e.g., en-GB.bincode)
23///
24/// returns:
25///
26/// ```ignore
27/// Ok(
28///   Map<(map_name, key), value>,
29/// )
30/// ```
31pub fn decode_single_file_to_flatten_map<P: AsRef<std::path::Path>>(
32  src_file: P,
33) -> ResolverResult<L10nFlattenMap> {
34  decode_file(src_file)
35}
36
37/// decodes **all_in_one** L10n file (e.g., all.bincode)
38///
39///
40/// returns:
41///
42/// ```ignore
43/// Ok(
44///   Map< LangID, Map<(map_name, key), value> >,
45/// )
46/// ```
47pub fn decode_file_to_maps<P: AsRef<std::path::Path>>(
48  src_file: P,
49) -> ResolverResult<L10nMaps> {
50  decode_file(src_file)
51}
52
53/// decodes single L10n DSL file (e.g., en-GB.ast.bincode)
54///
55/// returns:
56///
57/// ```ignore
58/// Ok(
59///   Map<map_name, Resolver>,
60/// )
61/// ```
62pub fn decode_single_file_to_dsl_map<P: AsRef<std::path::Path>>(
63  src_file: P,
64) -> ResolverResult<L10nDSLMap> {
65  decode_file(src_file)
66}
67
68/// decodes **all_in_one** DSL L10n file (e.g., all.ast.bincode)
69///
70///
71/// returns:
72///
73/// ```ignore
74/// Ok(
75///   Map< LangID, Map<map_name, Resolver> >,
76/// )
77/// ```
78pub fn decode_file_to_dsl_maps<P: AsRef<std::path::Path>>(
79  src_file: P,
80) -> ResolverResult<DSLMaps> {
81  decode_file(src_file)
82}