1mod de_map_as_vec;
2mod error;
3mod named_package;
4mod read;
5mod var;
6
7use std::collections::BTreeMap;
8
9use schemars::JsonSchema;
10use serde::Deserialize;
11
12use de_map_as_vec::deserialize_map_as_vec;
13
14pub use error::{PkgsParseError, VarsBuildError, VarsParseError};
15pub use named_package::NamedPackage;
16pub use read::ConfigError;
17pub use var::VarMap;
18
19fn empty_map() -> BTreeMap<String, String> {
20 BTreeMap::new()
21}
22
23#[derive(Debug, Clone, Deserialize, JsonSchema)]
24#[serde(deny_unknown_fields)]
25pub struct Config {
26 #[serde(default, deserialize_with = "deserialize_map_as_vec")]
27 #[schemars(default = "empty_map", with = "BTreeMap<String, String>")]
28 pub vars: Vec<(String, String)>,
29
30 pub packages: BTreeMap<String, Package>,
31}
32
33#[derive(Debug, Clone, Deserialize, JsonSchema)]
34#[serde(deny_unknown_fields)]
35pub struct Package {
36 #[serde(default)]
37 pub kind: PackageType,
38
39 #[serde(default, deserialize_with = "deserialize_map_as_vec")]
40 #[schemars(default = "empty_map", with = "BTreeMap<String, String>")]
41 pub vars: Vec<(String, String)>,
42
43 #[serde(default, deserialize_with = "deserialize_map_as_vec")]
44 #[schemars(default = "empty_map", with = "BTreeMap<String, String>")]
45 pub maps: Vec<(String, String)>,
46}
47
48#[derive(Debug, Clone, Copy, Deserialize, JsonSchema, Default, PartialEq, Eq)]
49#[serde(rename_all = "kebab-case", deny_unknown_fields)]
50pub enum PackageType {
51 #[default]
52 Local,
53}