1use super::BindingValue;
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
9#[serde(rename_all = "camelCase")]
10pub struct CodebuildBuildBinding {
11 pub project_name: BindingValue<String>,
13 pub build_env_vars: BindingValue<HashMap<String, String>>,
15 pub monitoring: BindingValue<Option<crate::MonitoringConfig>>,
17}
18
19#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
21#[serde(rename_all = "camelCase")]
22pub struct AcaBuildBinding {
23 pub managed_environment_id: BindingValue<String>,
25 pub resource_group_name: BindingValue<String>,
27 pub build_env_vars: BindingValue<HashMap<String, String>>,
29 pub managed_identity_id: BindingValue<Option<String>>,
31 pub resource_prefix: BindingValue<String>,
33 pub monitoring: BindingValue<Option<crate::MonitoringConfig>>,
35}
36
37#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
39#[serde(rename_all = "camelCase")]
40pub struct CloudbuildBuildBinding {
41 pub build_env_vars: BindingValue<HashMap<String, String>>,
43 pub service_account: BindingValue<String>,
45 pub monitoring: BindingValue<Option<crate::MonitoringConfig>>,
47}
48
49#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
51#[serde(rename_all = "camelCase")]
52pub struct LocalBuildBinding {
53 pub data_dir: BindingValue<String>,
55 pub build_env_vars: BindingValue<HashMap<String, String>>,
57}
58
59#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
61#[serde(rename_all = "camelCase")]
62pub struct KubernetesBuildBinding {
63 pub namespace: BindingValue<String>,
65 pub service_account_name: BindingValue<String>,
67 pub build_env_vars: BindingValue<HashMap<String, String>>,
69}
70
71#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
73#[serde(tag = "service", rename_all = "lowercase")]
74pub enum BuildBinding {
75 Codebuild(CodebuildBuildBinding),
77 Aca(AcaBuildBinding),
79 Cloudbuild(CloudbuildBuildBinding),
81 Local(LocalBuildBinding),
83 Kubernetes(KubernetesBuildBinding),
85}
86
87impl BuildBinding {
88 pub fn codebuild(
90 project_name: impl Into<BindingValue<String>>,
91 build_env_vars: impl Into<BindingValue<HashMap<String, String>>>,
92 monitoring: impl Into<BindingValue<Option<crate::MonitoringConfig>>>,
93 ) -> Self {
94 Self::Codebuild(CodebuildBuildBinding {
95 project_name: project_name.into(),
96 build_env_vars: build_env_vars.into(),
97 monitoring: monitoring.into(),
98 })
99 }
100
101 pub fn aca(
103 managed_environment_id: impl Into<BindingValue<String>>,
104 resource_group_name: impl Into<BindingValue<String>>,
105 build_env_vars: impl Into<BindingValue<HashMap<String, String>>>,
106 managed_identity_id: impl Into<BindingValue<Option<String>>>,
107 resource_prefix: impl Into<BindingValue<String>>,
108 monitoring: impl Into<BindingValue<Option<crate::MonitoringConfig>>>,
109 ) -> Self {
110 Self::Aca(AcaBuildBinding {
111 managed_environment_id: managed_environment_id.into(),
112 resource_group_name: resource_group_name.into(),
113 build_env_vars: build_env_vars.into(),
114 managed_identity_id: managed_identity_id.into(),
115 resource_prefix: resource_prefix.into(),
116 monitoring: monitoring.into(),
117 })
118 }
119
120 pub fn cloudbuild(
122 build_env_vars: impl Into<BindingValue<HashMap<String, String>>>,
123 service_account: impl Into<BindingValue<String>>,
124 monitoring: impl Into<BindingValue<Option<crate::MonitoringConfig>>>,
125 ) -> Self {
126 Self::Cloudbuild(CloudbuildBuildBinding {
127 build_env_vars: build_env_vars.into(),
128 service_account: service_account.into(),
129 monitoring: monitoring.into(),
130 })
131 }
132
133 pub fn local(
135 data_dir: impl Into<BindingValue<String>>,
136 build_env_vars: impl Into<BindingValue<HashMap<String, String>>>,
137 ) -> Self {
138 Self::Local(LocalBuildBinding {
139 data_dir: data_dir.into(),
140 build_env_vars: build_env_vars.into(),
141 })
142 }
143
144 pub fn kubernetes(
146 namespace: impl Into<BindingValue<String>>,
147 service_account_name: impl Into<BindingValue<String>>,
148 build_env_vars: impl Into<BindingValue<HashMap<String, String>>>,
149 ) -> Self {
150 Self::Kubernetes(KubernetesBuildBinding {
151 namespace: namespace.into(),
152 service_account_name: service_account_name.into(),
153 build_env_vars: build_env_vars.into(),
154 })
155 }
156}