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::GomodQuirk",
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::GomodQuirk>,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct PackageArgs {
pub pname: Option<String>,
pub version: Option<String>,
#[serde(rename = "vendorHash", skip_serializing_if = "Option::is_none")]
pub vendor_hash: Option<String>,
#[serde(rename = "proxyVendor", skip_serializing_if = "Option::is_none")]
pub proxy_vendor: Option<bool>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub tags: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub ldflags: Vec<String>,
#[serde(rename = "subPackages", skip_serializing_if = "Vec::is_empty")]
pub sub_packages: Vec<String>,
#[serde(rename = "doCheck", skip_serializing_if = "Option::is_none")]
pub do_check: Option<bool>,
#[serde(skip_serializing_if = "IndexMap::is_empty")]
pub env: IndexMap<String, String>,
#[serde(rename = "nativeBuildInputs", skip_serializing_if = "Vec::is_empty")]
pub native_build_inputs: Vec<String>,
#[serde(rename = "buildInputs", skip_serializing_if = "Vec::is_empty")]
pub build_inputs: Vec<String>,
}