pkgs/config/
mod.rs

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}