use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::config::{ApplyLayer, ApplyValExt};
mod package_managers;
pub use package_managers::{PackageManagersConfig, PackageManagersLayer};
#[derive(Debug, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
enum ArtifactSystem {
Windows,
Windows64,
WindowsArm,
Mac,
MacPpc,
Mac32,
MacSilicon,
Linux,
LinuxUbuntu,
LinuxDebian,
LinuxMandriva,
LinuxRedhat,
LinuxFedora,
LinuxSuse,
LinuxGentoo,
Ios,
Android,
Freebsd,
}
#[derive(Debug, Clone)]
pub struct ArtifactsConfig {
pub auto: bool,
pub cargo_dist: bool,
pub match_package_names: bool,
pub package_managers: PackageManagersConfig,
pub hidden: Vec<String>,
}
#[derive(Debug, Default, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct ArtifactsLayer {
pub auto: Option<bool>,
pub cargo_dist: Option<bool>,
pub match_package_names: Option<bool>,
pub package_managers: Option<PackageManagersLayer>,
pub hidden: Option<Vec<String>>,
}
impl Default for ArtifactsConfig {
fn default() -> Self {
ArtifactsConfig {
auto: false,
cargo_dist: false,
match_package_names: false,
package_managers: PackageManagersConfig::default(),
hidden: vec![],
}
}
}
impl ApplyLayer for ArtifactsConfig {
type Layer = ArtifactsLayer;
fn apply_layer(&mut self, layer: Self::Layer) {
let ArtifactsLayer {
auto,
cargo_dist,
match_package_names,
package_managers,
hidden,
} = layer;
self.auto.apply_val(auto);
self.cargo_dist.apply_val(cargo_dist);
self.match_package_names.apply_val(match_package_names);
self.package_managers.apply_val_layer(package_managers);
self.hidden.apply_val(hidden);
}
}
impl ArtifactsConfig {
pub fn has_some(&self) -> bool {
self.cargo_dist || self.auto || !self.package_managers.is_empty()
}
}