pkgs-cli 0.2.0

A simple cli tool to manage packages.
Documentation
mod de_map_as_vec;
mod error;
mod named_package;
mod read;
mod var;

use std::collections::BTreeMap;

use schemars::JsonSchema;
use serde::Deserialize;

use de_map_as_vec::deserialize_map_as_vec;

pub use error::{PkgsParseError, VarsBuildError, VarsParseError};
pub use named_package::NamedPackage;
pub use read::ConfigError;
pub use var::VarMap;

fn empty_map() -> BTreeMap<String, String> {
    BTreeMap::new()
}

#[derive(Debug, Clone, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct Config {
    #[serde(default, deserialize_with = "deserialize_map_as_vec")]
    #[schemars(default = "empty_map", with = "BTreeMap<String, String>")]
    pub vars: Vec<(String, String)>,

    pub packages: BTreeMap<String, Package>,
}

#[derive(Debug, Clone, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct Package {
    #[serde(default)]
    pub kind: PackageType,

    #[serde(default, deserialize_with = "deserialize_map_as_vec")]
    #[schemars(default = "empty_map", with = "BTreeMap<String, String>")]
    pub vars: Vec<(String, String)>,

    #[serde(default, deserialize_with = "deserialize_map_as_vec")]
    #[schemars(default = "empty_map", with = "BTreeMap<String, String>")]
    pub maps: Vec<(String, String)>,
}

#[derive(Debug, Clone, Copy, Deserialize, JsonSchema, Default, PartialEq, Eq)]
#[serde(rename_all = "kebab-case", deny_unknown_fields)]
pub enum PackageType {
    #[default]
    Local,
}