1mod database_seeder;
2mod reader;
3mod resolver;
4mod struct_loader;
5pub use database_seeder::DatabaseSeeder;
6pub use struct_loader::StructLoader;
7
8use anyhow::Result;
9use reader::read_file;
10use resolver::resolve_tags;
11use serde::de::DeserializeOwned;
12use std::collections::HashMap;
13
14pub type Dict<T> = HashMap<String, T>;
15
16fn load_named_records<T>(
17 filename: &str,
18 base_dir: &str,
19 dependencies: &Dict<String>,
20) -> Result<Dict<T>>
21where
22 T: DeserializeOwned,
23{
24 let raw_text = read_file(filename, base_dir)?;
26
27 let parsed_text = resolve_tags(&raw_text, dependencies).map_err(|err| {
29 anyhow::anyhow!(
30 "failed to pre-process embedded tags: {}\n err: {}",
31 filename,
32 err
33 )
34 })?;
35
36 let records = serde_yaml::from_str(&parsed_text).map_err(|err| {
39 anyhow::anyhow!(
40 "deserialization failed. check the file: {}
41 err: {}",
42 filename,
43 err
44 )
45 })?;
46
47 Ok(records)
48}