use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
pub const SCHEMA_VERSION: u32 = 1;
#[derive(Clone, Debug, Serialize, Deserialize, gen_macros::SpecShape)]
#[spec(
args = "PackageArgs",
quirk = "crate::quirks::HelmQuirk",
args_field = "args",
root_field = "root_package",
members_field = "workspace_members",
crates_field = "packages"
)]
pub struct BuildSpec {
pub version: u32,
pub packages: IndexMap<String, PackageSpec>,
pub root_package: String,
pub workspace_members: Vec<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct PackageSpec {
pub name: String,
pub version: String,
pub args: PackageArgs,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub quirks: Vec<crate::quirks::HelmQuirk>,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct PackageArgs {
pub name: Option<String>,
pub version: Option<String>,
#[serde(rename = "appVersion", skip_serializing_if = "Option::is_none")]
pub app_version: Option<String>,
#[serde(rename = "type", skip_serializing_if = "Option::is_none")]
pub chart_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(rename = "kubeVersion", skip_serializing_if = "Option::is_none")]
pub kube_version: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub dependencies: Vec<ChartDependency>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub maintainers: Vec<ChartMaintainer>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub keywords: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub sources: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub icon: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub home: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub deprecated: Option<bool>,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct ChartDependency {
pub name: String,
pub version: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub repository: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub alias: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub condition: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub tags: Vec<String>,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct ChartMaintainer {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
}