1use indexmap::IndexMap;
9use serde::{Deserialize, Serialize};
10
11pub const SCHEMA_VERSION: u32 = 1;
12
13#[derive(Clone, Debug, Serialize, Deserialize, gen_macros::SpecShape)]
14#[spec(
15 args = "PackageArgs",
16 quirk = "crate::quirks::GomodQuirk",
17 args_field = "args",
18 root_field = "root_package",
19 members_field = "workspace_members",
20 crates_field = "packages"
21)]
22pub struct BuildSpec {
23 pub version: u32,
24 pub packages: IndexMap<String, PackageSpec>,
25 pub root_package: String,
26 pub workspace_members: Vec<String>,
27}
28
29#[derive(Clone, Debug, Serialize, Deserialize)]
30pub struct PackageSpec {
31 pub name: String,
32 pub version: String,
33 pub args: PackageArgs,
34 #[serde(default, skip_serializing_if = "Vec::is_empty")]
35 pub quirks: Vec<crate::quirks::GomodQuirk>,
36}
37
38#[derive(Clone, Debug, Default, Serialize, Deserialize)]
42pub struct PackageArgs {
43 pub pname: Option<String>,
44 pub version: Option<String>,
45 #[serde(rename = "vendorHash", skip_serializing_if = "Option::is_none")]
49 pub vendor_hash: Option<String>,
50 #[serde(rename = "proxyVendor", skip_serializing_if = "Option::is_none")]
53 pub proxy_vendor: Option<bool>,
54 #[serde(skip_serializing_if = "Vec::is_empty")]
56 pub tags: Vec<String>,
57 #[serde(skip_serializing_if = "Vec::is_empty")]
59 pub ldflags: Vec<String>,
60 #[serde(rename = "subPackages", skip_serializing_if = "Vec::is_empty")]
63 pub sub_packages: Vec<String>,
64 #[serde(rename = "doCheck", skip_serializing_if = "Option::is_none")]
66 pub do_check: Option<bool>,
67 #[serde(skip_serializing_if = "IndexMap::is_empty")]
69 pub env: IndexMap<String, String>,
70 #[serde(rename = "nativeBuildInputs", skip_serializing_if = "Vec::is_empty")]
72 pub native_build_inputs: Vec<String>,
73 #[serde(rename = "buildInputs", skip_serializing_if = "Vec::is_empty")]
75 pub build_inputs: Vec<String>,
76}