rusoto_codebuild/
generated.rs

1// =================================================================
2//
3//                           * WARNING *
4//
5//                    This file is generated!
6//
7//  Changes made to this file will be overwritten. If changes are
8//  required to the generated code, the service_crategen project
9//  must be updated to generate the changes.
10//
11// =================================================================
12
13use std::error::Error;
14use std::fmt;
15
16use async_trait::async_trait;
17use rusoto_core::credential::ProvideAwsCredentials;
18use rusoto_core::region;
19use rusoto_core::request::{BufferedHttpResponse, DispatchSignedRequest};
20use rusoto_core::{Client, RusotoError};
21
22use rusoto_core::proto;
23use rusoto_core::request::HttpResponse;
24use rusoto_core::signature::SignedRequest;
25#[allow(unused_imports)]
26use serde::{Deserialize, Serialize};
27
28impl CodeBuildClient {
29    fn new_signed_request(&self, http_method: &str, request_uri: &str) -> SignedRequest {
30        let mut request = SignedRequest::new(http_method, "codebuild", &self.region, request_uri);
31
32        request.set_content_type("application/x-amz-json-1.1".to_owned());
33
34        request
35    }
36
37    async fn sign_and_dispatch<E>(
38        &self,
39        request: SignedRequest,
40        from_response: fn(BufferedHttpResponse) -> RusotoError<E>,
41    ) -> Result<HttpResponse, RusotoError<E>> {
42        let mut response = self.client.sign_and_dispatch(request).await?;
43        if !response.status.is_success() {
44            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
45            return Err(from_response(response));
46        }
47
48        Ok(response)
49    }
50}
51
52use serde_json;
53#[derive(Clone, Debug, Default, PartialEq, Serialize)]
54#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
55pub struct BatchDeleteBuildsInput {
56    /// <p>The IDs of the builds to delete.</p>
57    #[serde(rename = "ids")]
58    pub ids: Vec<String>,
59}
60
61#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
62#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
63pub struct BatchDeleteBuildsOutput {
64    /// <p>The IDs of the builds that were successfully deleted.</p>
65    #[serde(rename = "buildsDeleted")]
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub builds_deleted: Option<Vec<String>>,
68    /// <p>Information about any builds that could not be successfully deleted.</p>
69    #[serde(rename = "buildsNotDeleted")]
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub builds_not_deleted: Option<Vec<BuildNotDeleted>>,
72}
73
74#[derive(Clone, Debug, Default, PartialEq, Serialize)]
75#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
76pub struct BatchGetBuildsInput {
77    /// <p>The IDs of the builds.</p>
78    #[serde(rename = "ids")]
79    pub ids: Vec<String>,
80}
81
82#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
83#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
84pub struct BatchGetBuildsOutput {
85    /// <p>Information about the requested builds.</p>
86    #[serde(rename = "builds")]
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub builds: Option<Vec<Build>>,
89    /// <p>The IDs of builds for which information could not be found.</p>
90    #[serde(rename = "buildsNotFound")]
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub builds_not_found: Option<Vec<String>>,
93}
94
95#[derive(Clone, Debug, Default, PartialEq, Serialize)]
96#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
97pub struct BatchGetProjectsInput {
98    /// <p>The names or ARNs of the build projects. To get information about a project shared with your AWS account, its ARN must be specified. You cannot specify a shared project using its name.</p>
99    #[serde(rename = "names")]
100    pub names: Vec<String>,
101}
102
103#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
104#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
105pub struct BatchGetProjectsOutput {
106    /// <p>Information about the requested build projects.</p>
107    #[serde(rename = "projects")]
108    #[serde(skip_serializing_if = "Option::is_none")]
109    pub projects: Option<Vec<Project>>,
110    /// <p>The names of build projects for which information could not be found.</p>
111    #[serde(rename = "projectsNotFound")]
112    #[serde(skip_serializing_if = "Option::is_none")]
113    pub projects_not_found: Option<Vec<String>>,
114}
115
116#[derive(Clone, Debug, Default, PartialEq, Serialize)]
117#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
118pub struct BatchGetReportGroupsInput {
119    /// <p> An array of report group ARNs that identify the report groups to return. </p>
120    #[serde(rename = "reportGroupArns")]
121    pub report_group_arns: Vec<String>,
122}
123
124#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
125#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
126pub struct BatchGetReportGroupsOutput {
127    /// <p> The array of report groups returned by <code>BatchGetReportGroups</code>. </p>
128    #[serde(rename = "reportGroups")]
129    #[serde(skip_serializing_if = "Option::is_none")]
130    pub report_groups: Option<Vec<ReportGroup>>,
131    /// <p> An array of ARNs passed to <code>BatchGetReportGroups</code> that are not associated with a <code>ReportGroup</code>. </p>
132    #[serde(rename = "reportGroupsNotFound")]
133    #[serde(skip_serializing_if = "Option::is_none")]
134    pub report_groups_not_found: Option<Vec<String>>,
135}
136
137#[derive(Clone, Debug, Default, PartialEq, Serialize)]
138#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
139pub struct BatchGetReportsInput {
140    /// <p> An array of ARNs that identify the <code>Report</code> objects to return. </p>
141    #[serde(rename = "reportArns")]
142    pub report_arns: Vec<String>,
143}
144
145#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
146#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
147pub struct BatchGetReportsOutput {
148    /// <p> The array of <code>Report</code> objects returned by <code>BatchGetReports</code>. </p>
149    #[serde(rename = "reports")]
150    #[serde(skip_serializing_if = "Option::is_none")]
151    pub reports: Option<Vec<Report>>,
152    /// <p> An array of ARNs passed to <code>BatchGetReportGroups</code> that are not associated with a <code>Report</code>. </p>
153    #[serde(rename = "reportsNotFound")]
154    #[serde(skip_serializing_if = "Option::is_none")]
155    pub reports_not_found: Option<Vec<String>>,
156}
157
158/// <p>Information about a build.</p>
159#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
160#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
161pub struct Build {
162    /// <p>The Amazon Resource Name (ARN) of the build.</p>
163    #[serde(rename = "arn")]
164    #[serde(skip_serializing_if = "Option::is_none")]
165    pub arn: Option<String>,
166    /// <p>Information about the output artifacts for the build.</p>
167    #[serde(rename = "artifacts")]
168    #[serde(skip_serializing_if = "Option::is_none")]
169    pub artifacts: Option<BuildArtifacts>,
170    /// <p>Whether the build is complete. True if complete; otherwise, false.</p>
171    #[serde(rename = "buildComplete")]
172    #[serde(skip_serializing_if = "Option::is_none")]
173    pub build_complete: Option<bool>,
174    /// <p>The number of the build. For each project, the <code>buildNumber</code> of its first build is <code>1</code>. The <code>buildNumber</code> of each subsequent build is incremented by <code>1</code>. If a build is deleted, the <code>buildNumber</code> of other builds does not change.</p>
175    #[serde(rename = "buildNumber")]
176    #[serde(skip_serializing_if = "Option::is_none")]
177    pub build_number: Option<i64>,
178    /// <p><p>The current status of the build. Valid values include:</p> <ul> <li> <p> <code>FAILED</code>: The build failed.</p> </li> <li> <p> <code>FAULT</code>: The build faulted.</p> </li> <li> <p> <code>IN<em>PROGRESS</code>: The build is still in progress.</p> </li> <li> <p> <code>STOPPED</code>: The build stopped.</p> </li> <li> <p> <code>SUCCEEDED</code>: The build succeeded.</p> </li> <li> <p> <code>TIMED</em>OUT</code>: The build timed out.</p> </li> </ul></p>
179    #[serde(rename = "buildStatus")]
180    #[serde(skip_serializing_if = "Option::is_none")]
181    pub build_status: Option<String>,
182    /// <p>Information about the cache for the build.</p>
183    #[serde(rename = "cache")]
184    #[serde(skip_serializing_if = "Option::is_none")]
185    pub cache: Option<ProjectCache>,
186    /// <p>The current build phase.</p>
187    #[serde(rename = "currentPhase")]
188    #[serde(skip_serializing_if = "Option::is_none")]
189    pub current_phase: Option<String>,
190    /// <p>The AWS Key Management Service (AWS KMS) customer master key (CMK) to be used for encrypting the build output artifacts.</p> <note> <p> You can use a cross-account KMS key to encrypt the build output artifacts if your service role has permission to that key. </p> </note> <p>You can specify either the Amazon Resource Name (ARN) of the CMK or, if available, the CMK's alias (using the format <code>alias/<i>alias-name</i> </code>).</p>
191    #[serde(rename = "encryptionKey")]
192    #[serde(skip_serializing_if = "Option::is_none")]
193    pub encryption_key: Option<String>,
194    /// <p>When the build process ended, expressed in Unix time format.</p>
195    #[serde(rename = "endTime")]
196    #[serde(skip_serializing_if = "Option::is_none")]
197    pub end_time: Option<f64>,
198    /// <p>Information about the build environment for this build.</p>
199    #[serde(rename = "environment")]
200    #[serde(skip_serializing_if = "Option::is_none")]
201    pub environment: Option<ProjectEnvironment>,
202    /// <p> A list of exported environment variables for this build. </p>
203    #[serde(rename = "exportedEnvironmentVariables")]
204    #[serde(skip_serializing_if = "Option::is_none")]
205    pub exported_environment_variables: Option<Vec<ExportedEnvironmentVariable>>,
206    /// <p> An array of <code>ProjectFileSystemLocation</code> objects for a CodeBuild build project. A <code>ProjectFileSystemLocation</code> object specifies the <code>identifier</code>, <code>location</code>, <code>mountOptions</code>, <code>mountPoint</code>, and <code>type</code> of a file system created using Amazon Elastic File System. </p>
207    #[serde(rename = "fileSystemLocations")]
208    #[serde(skip_serializing_if = "Option::is_none")]
209    pub file_system_locations: Option<Vec<ProjectFileSystemLocation>>,
210    /// <p>The unique ID for the build.</p>
211    #[serde(rename = "id")]
212    #[serde(skip_serializing_if = "Option::is_none")]
213    pub id: Option<String>,
214    /// <p><p>The entity that started the build. Valid values include:</p> <ul> <li> <p>If AWS CodePipeline started the build, the pipeline&#39;s name (for example, <code>codepipeline/my-demo-pipeline</code>).</p> </li> <li> <p>If an AWS Identity and Access Management (IAM) user started the build, the user&#39;s name (for example, <code>MyUserName</code>).</p> </li> <li> <p>If the Jenkins plugin for AWS CodeBuild started the build, the string <code>CodeBuild-Jenkins-Plugin</code>.</p> </li> </ul></p>
215    #[serde(rename = "initiator")]
216    #[serde(skip_serializing_if = "Option::is_none")]
217    pub initiator: Option<String>,
218    /// <p>Information about the build's logs in Amazon CloudWatch Logs.</p>
219    #[serde(rename = "logs")]
220    #[serde(skip_serializing_if = "Option::is_none")]
221    pub logs: Option<LogsLocation>,
222    /// <p>Describes a network interface.</p>
223    #[serde(rename = "networkInterface")]
224    #[serde(skip_serializing_if = "Option::is_none")]
225    pub network_interface: Option<NetworkInterface>,
226    /// <p>Information about all previous build phases that are complete and information about any current build phase that is not yet complete.</p>
227    #[serde(rename = "phases")]
228    #[serde(skip_serializing_if = "Option::is_none")]
229    pub phases: Option<Vec<BuildPhase>>,
230    /// <p>The name of the AWS CodeBuild project.</p>
231    #[serde(rename = "projectName")]
232    #[serde(skip_serializing_if = "Option::is_none")]
233    pub project_name: Option<String>,
234    /// <p> The number of minutes a build is allowed to be queued before it times out. </p>
235    #[serde(rename = "queuedTimeoutInMinutes")]
236    #[serde(skip_serializing_if = "Option::is_none")]
237    pub queued_timeout_in_minutes: Option<i64>,
238    /// <p> An array of the ARNs associated with this build's reports. </p>
239    #[serde(rename = "reportArns")]
240    #[serde(skip_serializing_if = "Option::is_none")]
241    pub report_arns: Option<Vec<String>>,
242    /// <p><p> An identifier for the version of this build&#39;s source code. </p> <ul> <li> <p> For AWS CodeCommit, GitHub, GitHub Enterprise, and BitBucket, the commit ID. </p> </li> <li> <p> For AWS CodePipeline, the source revision provided by AWS CodePipeline. </p> </li> <li> <p> For Amazon Simple Storage Service (Amazon S3), this does not apply. </p> </li> </ul></p>
243    #[serde(rename = "resolvedSourceVersion")]
244    #[serde(skip_serializing_if = "Option::is_none")]
245    pub resolved_source_version: Option<String>,
246    /// <p> An array of <code>ProjectArtifacts</code> objects. </p>
247    #[serde(rename = "secondaryArtifacts")]
248    #[serde(skip_serializing_if = "Option::is_none")]
249    pub secondary_artifacts: Option<Vec<BuildArtifacts>>,
250    /// <p><p> An array of <code>ProjectSourceVersion</code> objects. Each <code>ProjectSourceVersion</code> must be one of: </p> <ul> <li> <p>For AWS CodeCommit: the commit ID, branch, or Git tag to use.</p> </li> <li> <p>For GitHub: the commit ID, pull request ID, branch name, or tag name that corresponds to the version of the source code you want to build. If a pull request ID is specified, it must use the format <code>pr/pull-request-ID</code> (for example, <code>pr/25</code>). If a branch name is specified, the branch&#39;s HEAD commit ID is used. If not specified, the default branch&#39;s HEAD commit ID is used.</p> </li> <li> <p>For Bitbucket: the commit ID, branch name, or tag name that corresponds to the version of the source code you want to build. If a branch name is specified, the branch&#39;s HEAD commit ID is used. If not specified, the default branch&#39;s HEAD commit ID is used.</p> </li> <li> <p>For Amazon Simple Storage Service (Amazon S3): the version ID of the object that represents the build input ZIP file to use.</p> </li> </ul></p>
251    #[serde(rename = "secondarySourceVersions")]
252    #[serde(skip_serializing_if = "Option::is_none")]
253    pub secondary_source_versions: Option<Vec<ProjectSourceVersion>>,
254    /// <p> An array of <code>ProjectSource</code> objects. </p>
255    #[serde(rename = "secondarySources")]
256    #[serde(skip_serializing_if = "Option::is_none")]
257    pub secondary_sources: Option<Vec<ProjectSource>>,
258    /// <p>The name of a service role used for this build.</p>
259    #[serde(rename = "serviceRole")]
260    #[serde(skip_serializing_if = "Option::is_none")]
261    pub service_role: Option<String>,
262    /// <p>Information about the source code to be built.</p>
263    #[serde(rename = "source")]
264    #[serde(skip_serializing_if = "Option::is_none")]
265    pub source: Option<ProjectSource>,
266    /// <p>Any version identifier for the version of the source code to be built. If <code>sourceVersion</code> is specified at the project level, then this <code>sourceVersion</code> (at the build level) takes precedence. </p> <p> For more information, see <a href="https://docs.aws.amazon.com/codebuild/latest/userguide/sample-source-version.html">Source Version Sample with CodeBuild</a> in the <i>AWS CodeBuild User Guide</i>. </p>
267    #[serde(rename = "sourceVersion")]
268    #[serde(skip_serializing_if = "Option::is_none")]
269    pub source_version: Option<String>,
270    /// <p>When the build process started, expressed in Unix time format.</p>
271    #[serde(rename = "startTime")]
272    #[serde(skip_serializing_if = "Option::is_none")]
273    pub start_time: Option<f64>,
274    /// <p>How long, in minutes, for AWS CodeBuild to wait before timing out this build if it does not get marked as completed.</p>
275    #[serde(rename = "timeoutInMinutes")]
276    #[serde(skip_serializing_if = "Option::is_none")]
277    pub timeout_in_minutes: Option<i64>,
278    /// <p>If your AWS CodeBuild project accesses resources in an Amazon VPC, you provide this parameter that identifies the VPC ID and the list of security group IDs and subnet IDs. The security groups and subnets must belong to the same VPC. You must provide at least one security group and one subnet ID.</p>
279    #[serde(rename = "vpcConfig")]
280    #[serde(skip_serializing_if = "Option::is_none")]
281    pub vpc_config: Option<VpcConfig>,
282}
283
284/// <p>Information about build output artifacts.</p>
285#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
286#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
287pub struct BuildArtifacts {
288    /// <p> An identifier for this artifact definition. </p>
289    #[serde(rename = "artifactIdentifier")]
290    #[serde(skip_serializing_if = "Option::is_none")]
291    pub artifact_identifier: Option<String>,
292    /// <p> Information that tells you if encryption for build artifacts is disabled. </p>
293    #[serde(rename = "encryptionDisabled")]
294    #[serde(skip_serializing_if = "Option::is_none")]
295    pub encryption_disabled: Option<bool>,
296    /// <p>Information about the location of the build artifacts.</p>
297    #[serde(rename = "location")]
298    #[serde(skip_serializing_if = "Option::is_none")]
299    pub location: Option<String>,
300    /// <p><p>The MD5 hash of the build artifact.</p> <p>You can use this hash along with a checksum tool to confirm file integrity and authenticity.</p> <note> <p>This value is available only if the build project&#39;s <code>packaging</code> value is set to <code>ZIP</code>.</p> </note></p>
301    #[serde(rename = "md5sum")]
302    #[serde(skip_serializing_if = "Option::is_none")]
303    pub md_5sum: Option<String>,
304    /// <p> If this flag is set, a name specified in the buildspec file overrides the artifact name. The name specified in a buildspec file is calculated at build time and uses the Shell Command Language. For example, you can append a date and time to your artifact name so that it is always unique. </p>
305    #[serde(rename = "overrideArtifactName")]
306    #[serde(skip_serializing_if = "Option::is_none")]
307    pub override_artifact_name: Option<bool>,
308    /// <p><p>The SHA-256 hash of the build artifact.</p> <p>You can use this hash along with a checksum tool to confirm file integrity and authenticity.</p> <note> <p>This value is available only if the build project&#39;s <code>packaging</code> value is set to <code>ZIP</code>.</p> </note></p>
309    #[serde(rename = "sha256sum")]
310    #[serde(skip_serializing_if = "Option::is_none")]
311    pub sha_25_6sum: Option<String>,
312}
313
314/// <p>Information about a build that could not be successfully deleted.</p>
315#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
316#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
317pub struct BuildNotDeleted {
318    /// <p>The ID of the build that could not be successfully deleted.</p>
319    #[serde(rename = "id")]
320    #[serde(skip_serializing_if = "Option::is_none")]
321    pub id: Option<String>,
322    /// <p>Additional information about the build that could not be successfully deleted.</p>
323    #[serde(rename = "statusCode")]
324    #[serde(skip_serializing_if = "Option::is_none")]
325    pub status_code: Option<String>,
326}
327
328/// <p>Information about a stage for a build.</p>
329#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
330#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
331pub struct BuildPhase {
332    /// <p>Additional information about a build phase, especially to help troubleshoot a failed build.</p>
333    #[serde(rename = "contexts")]
334    #[serde(skip_serializing_if = "Option::is_none")]
335    pub contexts: Option<Vec<PhaseContext>>,
336    /// <p>How long, in seconds, between the starting and ending times of the build's phase.</p>
337    #[serde(rename = "durationInSeconds")]
338    #[serde(skip_serializing_if = "Option::is_none")]
339    pub duration_in_seconds: Option<i64>,
340    /// <p>When the build phase ended, expressed in Unix time format.</p>
341    #[serde(rename = "endTime")]
342    #[serde(skip_serializing_if = "Option::is_none")]
343    pub end_time: Option<f64>,
344    /// <p><p>The current status of the build phase. Valid values include:</p> <ul> <li> <p> <code>FAILED</code>: The build phase failed.</p> </li> <li> <p> <code>FAULT</code>: The build phase faulted.</p> </li> <li> <p> <code>IN<em>PROGRESS</code>: The build phase is still in progress.</p> </li> <li> <p> <code>QUEUED</code>: The build has been submitted and is queued behind other submitted builds.</p> </li> <li> <p> <code>STOPPED</code>: The build phase stopped.</p> </li> <li> <p> <code>SUCCEEDED</code>: The build phase succeeded.</p> </li> <li> <p> <code>TIMED</em>OUT</code>: The build phase timed out.</p> </li> </ul></p>
345    #[serde(rename = "phaseStatus")]
346    #[serde(skip_serializing_if = "Option::is_none")]
347    pub phase_status: Option<String>,
348    /// <p><p>The name of the build phase. Valid values include:</p> <ul> <li> <p> <code>BUILD</code>: Core build activities typically occur in this build phase.</p> </li> <li> <p> <code>COMPLETED</code>: The build has been completed.</p> </li> <li> <p> <code>DOWNLOAD<em>SOURCE</code>: Source code is being downloaded in this build phase.</p> </li> <li> <p> <code>FINALIZING</code>: The build process is completing in this build phase.</p> </li> <li> <p> <code>INSTALL</code>: Installation activities typically occur in this build phase.</p> </li> <li> <p> <code>POST</em>BUILD</code>: Post-build activities typically occur in this build phase.</p> </li> <li> <p> <code>PRE<em>BUILD</code>: Pre-build activities typically occur in this build phase.</p> </li> <li> <p> <code>PROVISIONING</code>: The build environment is being set up.</p> </li> <li> <p> <code>QUEUED</code>: The build has been submitted and is queued behind other submitted builds.</p> </li> <li> <p> <code>SUBMITTED</code>: The build has been submitted.</p> </li> <li> <p> <code>UPLOAD</em>ARTIFACTS</code>: Build output artifacts are being uploaded to the output location.</p> </li> </ul></p>
349    #[serde(rename = "phaseType")]
350    #[serde(skip_serializing_if = "Option::is_none")]
351    pub phase_type: Option<String>,
352    /// <p>When the build phase started, expressed in Unix time format.</p>
353    #[serde(rename = "startTime")]
354    #[serde(skip_serializing_if = "Option::is_none")]
355    pub start_time: Option<f64>,
356}
357
358/// <p>Contains information that defines how the AWS CodeBuild build project reports the build status to the source provider. </p>
359#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
360pub struct BuildStatusConfig {
361    /// <p><p>Specifies the context of the build status CodeBuild sends to the source provider. The usage of this parameter depends on the source provider.</p> <dl> <dt>Bitbucket</dt> <dd> <p>This parameter is used for the <code>name</code> parameter in the Bitbucket commit status. For more information, see <a href="https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Bworkspace%7D/%7Brepo_slug%7D/commit/%7Bnode%7D/statuses/build">build</a> in the Bitbucket API documentation.</p> </dd> <dt>GitHub/GitHub Enterprise Server</dt> <dd> <p>This parameter is used for the <code>context</code> parameter in the GitHub commit status. For more information, see <a href="https://developer.github.com/v3/repos/statuses/#create-a-commit-status">Create a commit status</a> in the GitHub developer guide.</p> </dd> </dl></p>
362    #[serde(rename = "context")]
363    #[serde(skip_serializing_if = "Option::is_none")]
364    pub context: Option<String>,
365    /// <p><p>Specifies the target url of the build status CodeBuild sends to the source provider. The usage of this parameter depends on the source provider.</p> <dl> <dt>Bitbucket</dt> <dd> <p>This parameter is used for the <code>url</code> parameter in the Bitbucket commit status. For more information, see <a href="https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Bworkspace%7D/%7Brepo_slug%7D/commit/%7Bnode%7D/statuses/build">build</a> in the Bitbucket API documentation.</p> </dd> <dt>GitHub/GitHub Enterprise Server</dt> <dd> <p>This parameter is used for the <code>target_url</code> parameter in the GitHub commit status. For more information, see <a href="https://developer.github.com/v3/repos/statuses/#create-a-commit-status">Create a commit status</a> in the GitHub developer guide.</p> </dd> </dl></p>
366    #[serde(rename = "targetUrl")]
367    #[serde(skip_serializing_if = "Option::is_none")]
368    pub target_url: Option<String>,
369}
370
371/// <p> Information about Amazon CloudWatch Logs for a build project. </p>
372#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
373pub struct CloudWatchLogsConfig {
374    /// <p> The group name of the logs in Amazon CloudWatch Logs. For more information, see <a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html">Working with Log Groups and Log Streams</a>. </p>
375    #[serde(rename = "groupName")]
376    #[serde(skip_serializing_if = "Option::is_none")]
377    pub group_name: Option<String>,
378    /// <p><p>The current status of the logs in Amazon CloudWatch Logs for a build project. Valid values are:</p> <ul> <li> <p> <code>ENABLED</code>: Amazon CloudWatch Logs are enabled for this build project.</p> </li> <li> <p> <code>DISABLED</code>: Amazon CloudWatch Logs are not enabled for this build project.</p> </li> </ul></p>
379    #[serde(rename = "status")]
380    pub status: String,
381    /// <p> The prefix of the stream name of the Amazon CloudWatch Logs. For more information, see <a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html">Working with Log Groups and Log Streams</a>. </p>
382    #[serde(rename = "streamName")]
383    #[serde(skip_serializing_if = "Option::is_none")]
384    pub stream_name: Option<String>,
385}
386
387#[derive(Clone, Debug, Default, PartialEq, Serialize)]
388#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
389pub struct CreateProjectInput {
390    /// <p>Information about the build output artifacts for the build project.</p>
391    #[serde(rename = "artifacts")]
392    pub artifacts: ProjectArtifacts,
393    /// <p>Set this to true to generate a publicly accessible URL for your project's build badge.</p>
394    #[serde(rename = "badgeEnabled")]
395    #[serde(skip_serializing_if = "Option::is_none")]
396    pub badge_enabled: Option<bool>,
397    /// <p>Stores recently used information so that it can be quickly accessed at a later time.</p>
398    #[serde(rename = "cache")]
399    #[serde(skip_serializing_if = "Option::is_none")]
400    pub cache: Option<ProjectCache>,
401    /// <p>A description that makes the build project easy to identify.</p>
402    #[serde(rename = "description")]
403    #[serde(skip_serializing_if = "Option::is_none")]
404    pub description: Option<String>,
405    /// <p>The AWS Key Management Service (AWS KMS) customer master key (CMK) to be used for encrypting the build output artifacts.</p> <note> <p> You can use a cross-account KMS key to encrypt the build output artifacts if your service role has permission to that key. </p> </note> <p>You can specify either the Amazon Resource Name (ARN) of the CMK or, if available, the CMK's alias (using the format <code>alias/<i>alias-name</i> </code>).</p>
406    #[serde(rename = "encryptionKey")]
407    #[serde(skip_serializing_if = "Option::is_none")]
408    pub encryption_key: Option<String>,
409    /// <p>Information about the build environment for the build project.</p>
410    #[serde(rename = "environment")]
411    pub environment: ProjectEnvironment,
412    /// <p> An array of <code>ProjectFileSystemLocation</code> objects for a CodeBuild build project. A <code>ProjectFileSystemLocation</code> object specifies the <code>identifier</code>, <code>location</code>, <code>mountOptions</code>, <code>mountPoint</code>, and <code>type</code> of a file system created using Amazon Elastic File System. </p>
413    #[serde(rename = "fileSystemLocations")]
414    #[serde(skip_serializing_if = "Option::is_none")]
415    pub file_system_locations: Option<Vec<ProjectFileSystemLocation>>,
416    /// <p> Information about logs for the build project. These can be logs in Amazon CloudWatch Logs, logs uploaded to a specified S3 bucket, or both. </p>
417    #[serde(rename = "logsConfig")]
418    #[serde(skip_serializing_if = "Option::is_none")]
419    pub logs_config: Option<LogsConfig>,
420    /// <p>The name of the build project.</p>
421    #[serde(rename = "name")]
422    pub name: String,
423    /// <p> The number of minutes a build is allowed to be queued before it times out. </p>
424    #[serde(rename = "queuedTimeoutInMinutes")]
425    #[serde(skip_serializing_if = "Option::is_none")]
426    pub queued_timeout_in_minutes: Option<i64>,
427    /// <p> An array of <code>ProjectArtifacts</code> objects. </p>
428    #[serde(rename = "secondaryArtifacts")]
429    #[serde(skip_serializing_if = "Option::is_none")]
430    pub secondary_artifacts: Option<Vec<ProjectArtifacts>>,
431    /// <p> An array of <code>ProjectSourceVersion</code> objects. If <code>secondarySourceVersions</code> is specified at the build level, then they take precedence over these <code>secondarySourceVersions</code> (at the project level). </p>
432    #[serde(rename = "secondarySourceVersions")]
433    #[serde(skip_serializing_if = "Option::is_none")]
434    pub secondary_source_versions: Option<Vec<ProjectSourceVersion>>,
435    /// <p> An array of <code>ProjectSource</code> objects. </p>
436    #[serde(rename = "secondarySources")]
437    #[serde(skip_serializing_if = "Option::is_none")]
438    pub secondary_sources: Option<Vec<ProjectSource>>,
439    /// <p>The ARN of the AWS Identity and Access Management (IAM) role that enables AWS CodeBuild to interact with dependent AWS services on behalf of the AWS account.</p>
440    #[serde(rename = "serviceRole")]
441    pub service_role: String,
442    /// <p>Information about the build input source code for the build project.</p>
443    #[serde(rename = "source")]
444    pub source: ProjectSource,
445    /// <p> A version of the build input to be built for this project. If not specified, the latest version is used. If specified, it must be one of: </p> <ul> <li> <p>For AWS CodeCommit: the commit ID, branch, or Git tag to use.</p> </li> <li> <p>For GitHub: the commit ID, pull request ID, branch name, or tag name that corresponds to the version of the source code you want to build. If a pull request ID is specified, it must use the format <code>pr/pull-request-ID</code> (for example <code>pr/25</code>). If a branch name is specified, the branch's HEAD commit ID is used. If not specified, the default branch's HEAD commit ID is used.</p> </li> <li> <p>For Bitbucket: the commit ID, branch name, or tag name that corresponds to the version of the source code you want to build. If a branch name is specified, the branch's HEAD commit ID is used. If not specified, the default branch's HEAD commit ID is used.</p> </li> <li> <p>For Amazon Simple Storage Service (Amazon S3): the version ID of the object that represents the build input ZIP file to use.</p> </li> </ul> <p> If <code>sourceVersion</code> is specified at the build level, then that version takes precedence over this <code>sourceVersion</code> (at the project level). </p> <p> For more information, see <a href="https://docs.aws.amazon.com/codebuild/latest/userguide/sample-source-version.html">Source Version Sample with CodeBuild</a> in the <i>AWS CodeBuild User Guide</i>. </p>
446    #[serde(rename = "sourceVersion")]
447    #[serde(skip_serializing_if = "Option::is_none")]
448    pub source_version: Option<String>,
449    /// <p>A list of tag key and value pairs associated with this build project.</p> <p>These tags are available for use by AWS services that support AWS CodeBuild build project tags.</p>
450    #[serde(rename = "tags")]
451    #[serde(skip_serializing_if = "Option::is_none")]
452    pub tags: Option<Vec<Tag>>,
453    /// <p>How long, in minutes, from 5 to 480 (8 hours), for AWS CodeBuild to wait before it times out any build that has not been marked as completed. The default is 60 minutes.</p>
454    #[serde(rename = "timeoutInMinutes")]
455    #[serde(skip_serializing_if = "Option::is_none")]
456    pub timeout_in_minutes: Option<i64>,
457    /// <p>VpcConfig enables AWS CodeBuild to access resources in an Amazon VPC.</p>
458    #[serde(rename = "vpcConfig")]
459    #[serde(skip_serializing_if = "Option::is_none")]
460    pub vpc_config: Option<VpcConfig>,
461}
462
463#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
464#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
465pub struct CreateProjectOutput {
466    /// <p>Information about the build project that was created.</p>
467    #[serde(rename = "project")]
468    #[serde(skip_serializing_if = "Option::is_none")]
469    pub project: Option<Project>,
470}
471
472#[derive(Clone, Debug, Default, PartialEq, Serialize)]
473#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
474pub struct CreateReportGroupInput {
475    /// <p> A <code>ReportExportConfig</code> object that contains information about where the report group test results are exported. </p>
476    #[serde(rename = "exportConfig")]
477    pub export_config: ReportExportConfig,
478    /// <p> The name of the report group. </p>
479    #[serde(rename = "name")]
480    pub name: String,
481    /// <p> A list of tag key and value pairs associated with this report group. </p> <p>These tags are available for use by AWS services that support AWS CodeBuild report group tags.</p>
482    #[serde(rename = "tags")]
483    #[serde(skip_serializing_if = "Option::is_none")]
484    pub tags: Option<Vec<Tag>>,
485    /// <p> The type of report group. </p>
486    #[serde(rename = "type")]
487    pub type_: String,
488}
489
490#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
491#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
492pub struct CreateReportGroupOutput {
493    /// <p> Information about the report group that was created. </p>
494    #[serde(rename = "reportGroup")]
495    #[serde(skip_serializing_if = "Option::is_none")]
496    pub report_group: Option<ReportGroup>,
497}
498
499#[derive(Clone, Debug, Default, PartialEq, Serialize)]
500#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
501pub struct CreateWebhookInput {
502    /// <p><p>A regular expression used to determine which repository branches are built when a webhook is triggered. If the name of a branch matches the regular expression, then it is built. If <code>branchFilter</code> is empty, then all branches are built.</p> <note> <p> It is recommended that you use <code>filterGroups</code> instead of <code>branchFilter</code>. </p> </note></p>
503    #[serde(rename = "branchFilter")]
504    #[serde(skip_serializing_if = "Option::is_none")]
505    pub branch_filter: Option<String>,
506    /// <p> An array of arrays of <code>WebhookFilter</code> objects used to determine which webhooks are triggered. At least one <code>WebhookFilter</code> in the array must specify <code>EVENT</code> as its <code>type</code>. </p> <p> For a build to be triggered, at least one filter group in the <code>filterGroups</code> array must pass. For a filter group to pass, each of its filters must pass. </p>
507    #[serde(rename = "filterGroups")]
508    #[serde(skip_serializing_if = "Option::is_none")]
509    pub filter_groups: Option<Vec<Vec<WebhookFilter>>>,
510    /// <p>The name of the AWS CodeBuild project.</p>
511    #[serde(rename = "projectName")]
512    pub project_name: String,
513}
514
515#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
516#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
517pub struct CreateWebhookOutput {
518    /// <p>Information about a webhook that connects repository events to a build project in AWS CodeBuild.</p>
519    #[serde(rename = "webhook")]
520    #[serde(skip_serializing_if = "Option::is_none")]
521    pub webhook: Option<Webhook>,
522}
523
524#[derive(Clone, Debug, Default, PartialEq, Serialize)]
525#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
526pub struct DeleteProjectInput {
527    /// <p>The name of the build project.</p>
528    #[serde(rename = "name")]
529    pub name: String,
530}
531
532#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
533#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
534pub struct DeleteProjectOutput {}
535
536#[derive(Clone, Debug, Default, PartialEq, Serialize)]
537#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
538pub struct DeleteReportGroupInput {
539    /// <p> The ARN of the report group to delete. </p>
540    #[serde(rename = "arn")]
541    pub arn: String,
542}
543
544#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
545#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
546pub struct DeleteReportGroupOutput {}
547
548#[derive(Clone, Debug, Default, PartialEq, Serialize)]
549#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
550pub struct DeleteReportInput {
551    /// <p> The ARN of the report to delete. </p>
552    #[serde(rename = "arn")]
553    pub arn: String,
554}
555
556#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
557#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
558pub struct DeleteReportOutput {}
559
560#[derive(Clone, Debug, Default, PartialEq, Serialize)]
561#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
562pub struct DeleteResourcePolicyInput {
563    /// <p> The ARN of the resource that is associated with the resource policy. </p>
564    #[serde(rename = "resourceArn")]
565    pub resource_arn: String,
566}
567
568#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
569#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
570pub struct DeleteResourcePolicyOutput {}
571
572#[derive(Clone, Debug, Default, PartialEq, Serialize)]
573#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
574pub struct DeleteSourceCredentialsInput {
575    /// <p> The Amazon Resource Name (ARN) of the token.</p>
576    #[serde(rename = "arn")]
577    pub arn: String,
578}
579
580#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
581#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
582pub struct DeleteSourceCredentialsOutput {
583    /// <p> The Amazon Resource Name (ARN) of the token. </p>
584    #[serde(rename = "arn")]
585    #[serde(skip_serializing_if = "Option::is_none")]
586    pub arn: Option<String>,
587}
588
589#[derive(Clone, Debug, Default, PartialEq, Serialize)]
590#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
591pub struct DeleteWebhookInput {
592    /// <p>The name of the AWS CodeBuild project.</p>
593    #[serde(rename = "projectName")]
594    pub project_name: String,
595}
596
597#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
598#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
599pub struct DeleteWebhookOutput {}
600
601#[derive(Clone, Debug, Default, PartialEq, Serialize)]
602#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
603pub struct DescribeTestCasesInput {
604    /// <p> A <code>TestCaseFilter</code> object used to filter the returned reports. </p>
605    #[serde(rename = "filter")]
606    #[serde(skip_serializing_if = "Option::is_none")]
607    pub filter: Option<TestCaseFilter>,
608    /// <p> The maximum number of paginated test cases returned per response. Use <code>nextToken</code> to iterate pages in the list of returned <code>TestCase</code> objects. The default value is 100. </p>
609    #[serde(rename = "maxResults")]
610    #[serde(skip_serializing_if = "Option::is_none")]
611    pub max_results: Option<i64>,
612    /// <p> During a previous call, the maximum number of items that can be returned is the value specified in <code>maxResults</code>. If there more items in the list, then a unique string called a <i>nextToken</i> is returned. To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned. </p>
613    #[serde(rename = "nextToken")]
614    #[serde(skip_serializing_if = "Option::is_none")]
615    pub next_token: Option<String>,
616    /// <p> The ARN of the report for which test cases are returned. </p>
617    #[serde(rename = "reportArn")]
618    pub report_arn: String,
619}
620
621#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
622#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
623pub struct DescribeTestCasesOutput {
624    /// <p> During a previous call, the maximum number of items that can be returned is the value specified in <code>maxResults</code>. If there more items in the list, then a unique string called a <i>nextToken</i> is returned. To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned. </p>
625    #[serde(rename = "nextToken")]
626    #[serde(skip_serializing_if = "Option::is_none")]
627    pub next_token: Option<String>,
628    /// <p> The returned list of test cases. </p>
629    #[serde(rename = "testCases")]
630    #[serde(skip_serializing_if = "Option::is_none")]
631    pub test_cases: Option<Vec<TestCase>>,
632}
633
634/// <p>Information about a Docker image that is managed by AWS CodeBuild.</p>
635#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
636#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
637pub struct EnvironmentImage {
638    /// <p>The description of the Docker image.</p>
639    #[serde(rename = "description")]
640    #[serde(skip_serializing_if = "Option::is_none")]
641    pub description: Option<String>,
642    /// <p>The name of the Docker image.</p>
643    #[serde(rename = "name")]
644    #[serde(skip_serializing_if = "Option::is_none")]
645    pub name: Option<String>,
646    /// <p>A list of environment image versions.</p>
647    #[serde(rename = "versions")]
648    #[serde(skip_serializing_if = "Option::is_none")]
649    pub versions: Option<Vec<String>>,
650}
651
652/// <p>A set of Docker images that are related by programming language and are managed by AWS CodeBuild.</p>
653#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
654#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
655pub struct EnvironmentLanguage {
656    /// <p>The list of Docker images that are related by the specified programming language.</p>
657    #[serde(rename = "images")]
658    #[serde(skip_serializing_if = "Option::is_none")]
659    pub images: Option<Vec<EnvironmentImage>>,
660    /// <p>The programming language for the Docker images.</p>
661    #[serde(rename = "language")]
662    #[serde(skip_serializing_if = "Option::is_none")]
663    pub language: Option<String>,
664}
665
666/// <p>A set of Docker images that are related by platform and are managed by AWS CodeBuild.</p>
667#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
668#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
669pub struct EnvironmentPlatform {
670    /// <p>The list of programming languages that are available for the specified platform.</p>
671    #[serde(rename = "languages")]
672    #[serde(skip_serializing_if = "Option::is_none")]
673    pub languages: Option<Vec<EnvironmentLanguage>>,
674    /// <p>The platform's name.</p>
675    #[serde(rename = "platform")]
676    #[serde(skip_serializing_if = "Option::is_none")]
677    pub platform: Option<String>,
678}
679
680/// <p>Information about an environment variable for a build project or a build.</p>
681#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
682pub struct EnvironmentVariable {
683    /// <p>The name or key of the environment variable.</p>
684    #[serde(rename = "name")]
685    pub name: String,
686    /// <p><p>The type of environment variable. Valid values include:</p> <ul> <li> <p> <code>PARAMETER<em>STORE</code>: An environment variable stored in Amazon EC2 Systems Manager Parameter Store. To learn how to specify a parameter store environment variable, see <a href="https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#parameter-store-build-spec"> parameter store reference-key in the buildspec file</a>.</p> </li> <li> <p> <code>PLAINTEXT</code>: An environment variable in plain text format. This is the default value.</p> </li> <li> <p> <code>SECRETS</em>MANAGER</code>: An environment variable stored in AWS Secrets Manager. To learn how to specify a secrets manager environment variable, see <a href="https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#secrets-manager-build-spec"> secrets manager reference-key in the buildspec file</a>.</p> </li> </ul></p>
687    #[serde(rename = "type")]
688    #[serde(skip_serializing_if = "Option::is_none")]
689    pub type_: Option<String>,
690    /// <p><p>The value of the environment variable.</p> <important> <p>We strongly discourage the use of <code>PLAINTEXT</code> environment variables to store sensitive values, especially AWS secret key IDs and secret access keys. <code>PLAINTEXT</code> environment variables can be displayed in plain text using the AWS CodeBuild console and the AWS Command Line Interface (AWS CLI). For sensitive values, we recommend you use an environment variable of type <code>PARAMETER<em>STORE</code> or <code>SECRETS</em>MANAGER</code>. </p> </important></p>
691    #[serde(rename = "value")]
692    pub value: String,
693}
694
695/// <p> Information about an exported environment variable. </p>
696#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
697#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
698pub struct ExportedEnvironmentVariable {
699    /// <p> The name of this exported environment variable. </p>
700    #[serde(rename = "name")]
701    #[serde(skip_serializing_if = "Option::is_none")]
702    pub name: Option<String>,
703    /// <p><p> The value assigned to this exported environment variable. </p> <note> <p> During a build, the value of a variable is available starting with the <code>install</code> phase. It can be updated between the start of the <code>install</code> phase and the end of the <code>post<em>build</code> phase. After the <code>post</em>build</code> phase ends, the value of exported variables cannot change.</p> </note></p>
704    #[serde(rename = "value")]
705    #[serde(skip_serializing_if = "Option::is_none")]
706    pub value: Option<String>,
707}
708
709#[derive(Clone, Debug, Default, PartialEq, Serialize)]
710#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
711pub struct GetResourcePolicyInput {
712    /// <p> The ARN of the resource that is associated with the resource policy. </p>
713    #[serde(rename = "resourceArn")]
714    pub resource_arn: String,
715}
716
717#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
718#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
719pub struct GetResourcePolicyOutput {
720    /// <p> The resource policy for the resource identified by the input ARN parameter. </p>
721    #[serde(rename = "policy")]
722    #[serde(skip_serializing_if = "Option::is_none")]
723    pub policy: Option<String>,
724}
725
726/// <p> Information about the Git submodules configuration for an AWS CodeBuild build project. </p>
727#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
728pub struct GitSubmodulesConfig {
729    /// <p> Set to true to fetch Git submodules for your AWS CodeBuild build project. </p>
730    #[serde(rename = "fetchSubmodules")]
731    pub fetch_submodules: bool,
732}
733
734#[derive(Clone, Debug, Default, PartialEq, Serialize)]
735#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
736pub struct ImportSourceCredentialsInput {
737    /// <p> The type of authentication used to connect to a GitHub, GitHub Enterprise, or Bitbucket repository. An OAUTH connection is not supported by the API and must be created using the AWS CodeBuild console. </p>
738    #[serde(rename = "authType")]
739    pub auth_type: String,
740    /// <p> The source provider used for this project. </p>
741    #[serde(rename = "serverType")]
742    pub server_type: String,
743    /// <p> Set to <code>false</code> to prevent overwriting the repository source credentials. Set to <code>true</code> to overwrite the repository source credentials. The default value is <code>true</code>. </p>
744    #[serde(rename = "shouldOverwrite")]
745    #[serde(skip_serializing_if = "Option::is_none")]
746    pub should_overwrite: Option<bool>,
747    /// <p> For GitHub or GitHub Enterprise, this is the personal access token. For Bitbucket, this is the app password. </p>
748    #[serde(rename = "token")]
749    pub token: String,
750    /// <p> The Bitbucket username when the <code>authType</code> is BASIC_AUTH. This parameter is not valid for other types of source providers or connections. </p>
751    #[serde(rename = "username")]
752    #[serde(skip_serializing_if = "Option::is_none")]
753    pub username: Option<String>,
754}
755
756#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
757#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
758pub struct ImportSourceCredentialsOutput {
759    /// <p> The Amazon Resource Name (ARN) of the token. </p>
760    #[serde(rename = "arn")]
761    #[serde(skip_serializing_if = "Option::is_none")]
762    pub arn: Option<String>,
763}
764
765#[derive(Clone, Debug, Default, PartialEq, Serialize)]
766#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
767pub struct InvalidateProjectCacheInput {
768    /// <p>The name of the AWS CodeBuild build project that the cache is reset for.</p>
769    #[serde(rename = "projectName")]
770    pub project_name: String,
771}
772
773#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
774#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
775pub struct InvalidateProjectCacheOutput {}
776
777#[derive(Clone, Debug, Default, PartialEq, Serialize)]
778#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
779pub struct ListBuildsForProjectInput {
780    /// <p>During a previous call, if there are more than 100 items in the list, only the first 100 items are returned, along with a unique string called a <i>nextToken</i>. To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned.</p>
781    #[serde(rename = "nextToken")]
782    #[serde(skip_serializing_if = "Option::is_none")]
783    pub next_token: Option<String>,
784    /// <p>The name of the AWS CodeBuild project.</p>
785    #[serde(rename = "projectName")]
786    pub project_name: String,
787    /// <p><p>The order to list build IDs. Valid values include:</p> <ul> <li> <p> <code>ASCENDING</code>: List the build IDs in ascending order by build ID.</p> </li> <li> <p> <code>DESCENDING</code>: List the build IDs in descending order by build ID.</p> </li> </ul></p>
788    #[serde(rename = "sortOrder")]
789    #[serde(skip_serializing_if = "Option::is_none")]
790    pub sort_order: Option<String>,
791}
792
793#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
794#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
795pub struct ListBuildsForProjectOutput {
796    /// <p>A list of build IDs for the specified build project, with each build ID representing a single build.</p>
797    #[serde(rename = "ids")]
798    #[serde(skip_serializing_if = "Option::is_none")]
799    pub ids: Option<Vec<String>>,
800    /// <p>If there are more than 100 items in the list, only the first 100 items are returned, along with a unique string called a <i>nextToken</i>. To get the next batch of items in the list, call this operation again, adding the next token to the call.</p>
801    #[serde(rename = "nextToken")]
802    #[serde(skip_serializing_if = "Option::is_none")]
803    pub next_token: Option<String>,
804}
805
806#[derive(Clone, Debug, Default, PartialEq, Serialize)]
807#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
808pub struct ListBuildsInput {
809    /// <p>During a previous call, if there are more than 100 items in the list, only the first 100 items are returned, along with a unique string called a <i>nextToken</i>. To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned.</p>
810    #[serde(rename = "nextToken")]
811    #[serde(skip_serializing_if = "Option::is_none")]
812    pub next_token: Option<String>,
813    /// <p><p>The order to list build IDs. Valid values include:</p> <ul> <li> <p> <code>ASCENDING</code>: List the build IDs in ascending order by build ID.</p> </li> <li> <p> <code>DESCENDING</code>: List the build IDs in descending order by build ID.</p> </li> </ul></p>
814    #[serde(rename = "sortOrder")]
815    #[serde(skip_serializing_if = "Option::is_none")]
816    pub sort_order: Option<String>,
817}
818
819#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
820#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
821pub struct ListBuildsOutput {
822    /// <p>A list of build IDs, with each build ID representing a single build.</p>
823    #[serde(rename = "ids")]
824    #[serde(skip_serializing_if = "Option::is_none")]
825    pub ids: Option<Vec<String>>,
826    /// <p>If there are more than 100 items in the list, only the first 100 items are returned, along with a unique string called a <i>nextToken</i>. To get the next batch of items in the list, call this operation again, adding the next token to the call.</p>
827    #[serde(rename = "nextToken")]
828    #[serde(skip_serializing_if = "Option::is_none")]
829    pub next_token: Option<String>,
830}
831
832#[derive(Clone, Debug, Default, PartialEq, Serialize)]
833#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
834pub struct ListCuratedEnvironmentImagesInput {}
835
836#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
837#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
838pub struct ListCuratedEnvironmentImagesOutput {
839    /// <p>Information about supported platforms for Docker images that are managed by AWS CodeBuild.</p>
840    #[serde(rename = "platforms")]
841    #[serde(skip_serializing_if = "Option::is_none")]
842    pub platforms: Option<Vec<EnvironmentPlatform>>,
843}
844
845#[derive(Clone, Debug, Default, PartialEq, Serialize)]
846#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
847pub struct ListProjectsInput {
848    /// <p>During a previous call, if there are more than 100 items in the list, only the first 100 items are returned, along with a unique string called a <i>nextToken</i>. To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned.</p>
849    #[serde(rename = "nextToken")]
850    #[serde(skip_serializing_if = "Option::is_none")]
851    pub next_token: Option<String>,
852    /// <p>The criterion to be used to list build project names. Valid values include:</p> <ul> <li> <p> <code>CREATED_TIME</code>: List based on when each build project was created.</p> </li> <li> <p> <code>LAST_MODIFIED_TIME</code>: List based on when information about each build project was last changed.</p> </li> <li> <p> <code>NAME</code>: List based on each build project's name.</p> </li> </ul> <p>Use <code>sortOrder</code> to specify in what order to list the build project names based on the preceding criteria.</p>
853    #[serde(rename = "sortBy")]
854    #[serde(skip_serializing_if = "Option::is_none")]
855    pub sort_by: Option<String>,
856    /// <p>The order in which to list build projects. Valid values include:</p> <ul> <li> <p> <code>ASCENDING</code>: List in ascending order.</p> </li> <li> <p> <code>DESCENDING</code>: List in descending order.</p> </li> </ul> <p>Use <code>sortBy</code> to specify the criterion to be used to list build project names.</p>
857    #[serde(rename = "sortOrder")]
858    #[serde(skip_serializing_if = "Option::is_none")]
859    pub sort_order: Option<String>,
860}
861
862#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
863#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
864pub struct ListProjectsOutput {
865    /// <p>If there are more than 100 items in the list, only the first 100 items are returned, along with a unique string called a <i>nextToken</i>. To get the next batch of items in the list, call this operation again, adding the next token to the call.</p>
866    #[serde(rename = "nextToken")]
867    #[serde(skip_serializing_if = "Option::is_none")]
868    pub next_token: Option<String>,
869    /// <p>The list of build project names, with each build project name representing a single build project.</p>
870    #[serde(rename = "projects")]
871    #[serde(skip_serializing_if = "Option::is_none")]
872    pub projects: Option<Vec<String>>,
873}
874
875#[derive(Clone, Debug, Default, PartialEq, Serialize)]
876#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
877pub struct ListReportGroupsInput {
878    /// <p> The maximum number of paginated report groups returned per response. Use <code>nextToken</code> to iterate pages in the list of returned <code>ReportGroup</code> objects. The default value is 100. </p>
879    #[serde(rename = "maxResults")]
880    #[serde(skip_serializing_if = "Option::is_none")]
881    pub max_results: Option<i64>,
882    /// <p> During a previous call, the maximum number of items that can be returned is the value specified in <code>maxResults</code>. If there more items in the list, then a unique string called a <i>nextToken</i> is returned. To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned. </p>
883    #[serde(rename = "nextToken")]
884    #[serde(skip_serializing_if = "Option::is_none")]
885    pub next_token: Option<String>,
886    /// <p><p> The criterion to be used to list build report groups. Valid values include: </p> <ul> <li> <p> <code>CREATED<em>TIME</code>: List based on when each report group was created.</p> </li> <li> <p> <code>LAST</em>MODIFIED_TIME</code>: List based on when each report group was last changed.</p> </li> <li> <p> <code>NAME</code>: List based on each report group&#39;s name.</p> </li> </ul></p>
887    #[serde(rename = "sortBy")]
888    #[serde(skip_serializing_if = "Option::is_none")]
889    pub sort_by: Option<String>,
890    /// <p> Used to specify the order to sort the list of returned report groups. Valid values are <code>ASCENDING</code> and <code>DESCENDING</code>. </p>
891    #[serde(rename = "sortOrder")]
892    #[serde(skip_serializing_if = "Option::is_none")]
893    pub sort_order: Option<String>,
894}
895
896#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
897#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
898pub struct ListReportGroupsOutput {
899    /// <p> During a previous call, the maximum number of items that can be returned is the value specified in <code>maxResults</code>. If there more items in the list, then a unique string called a <i>nextToken</i> is returned. To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned. </p>
900    #[serde(rename = "nextToken")]
901    #[serde(skip_serializing_if = "Option::is_none")]
902    pub next_token: Option<String>,
903    /// <p> The list of ARNs for the report groups in the current AWS account. </p>
904    #[serde(rename = "reportGroups")]
905    #[serde(skip_serializing_if = "Option::is_none")]
906    pub report_groups: Option<Vec<String>>,
907}
908
909#[derive(Clone, Debug, Default, PartialEq, Serialize)]
910#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
911pub struct ListReportsForReportGroupInput {
912    /// <p> A <code>ReportFilter</code> object used to filter the returned reports. </p>
913    #[serde(rename = "filter")]
914    #[serde(skip_serializing_if = "Option::is_none")]
915    pub filter: Option<ReportFilter>,
916    /// <p> The maximum number of paginated reports in this report group returned per response. Use <code>nextToken</code> to iterate pages in the list of returned <code>Report</code> objects. The default value is 100. </p>
917    #[serde(rename = "maxResults")]
918    #[serde(skip_serializing_if = "Option::is_none")]
919    pub max_results: Option<i64>,
920    /// <p> During a previous call, the maximum number of items that can be returned is the value specified in <code>maxResults</code>. If there more items in the list, then a unique string called a <i>nextToken</i> is returned. To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned. </p>
921    #[serde(rename = "nextToken")]
922    #[serde(skip_serializing_if = "Option::is_none")]
923    pub next_token: Option<String>,
924    /// <p> The ARN of the report group for which you want to return report ARNs. </p>
925    #[serde(rename = "reportGroupArn")]
926    pub report_group_arn: String,
927    /// <p> Use to specify whether the results are returned in ascending or descending order. </p>
928    #[serde(rename = "sortOrder")]
929    #[serde(skip_serializing_if = "Option::is_none")]
930    pub sort_order: Option<String>,
931}
932
933#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
934#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
935pub struct ListReportsForReportGroupOutput {
936    /// <p> During a previous call, the maximum number of items that can be returned is the value specified in <code>maxResults</code>. If there more items in the list, then a unique string called a <i>nextToken</i> is returned. To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned. </p>
937    #[serde(rename = "nextToken")]
938    #[serde(skip_serializing_if = "Option::is_none")]
939    pub next_token: Option<String>,
940    /// <p> The list of returned report group ARNs. </p>
941    #[serde(rename = "reports")]
942    #[serde(skip_serializing_if = "Option::is_none")]
943    pub reports: Option<Vec<String>>,
944}
945
946#[derive(Clone, Debug, Default, PartialEq, Serialize)]
947#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
948pub struct ListReportsInput {
949    /// <p> A <code>ReportFilter</code> object used to filter the returned reports. </p>
950    #[serde(rename = "filter")]
951    #[serde(skip_serializing_if = "Option::is_none")]
952    pub filter: Option<ReportFilter>,
953    /// <p> The maximum number of paginated reports returned per response. Use <code>nextToken</code> to iterate pages in the list of returned <code>Report</code> objects. The default value is 100. </p>
954    #[serde(rename = "maxResults")]
955    #[serde(skip_serializing_if = "Option::is_none")]
956    pub max_results: Option<i64>,
957    /// <p> During a previous call, the maximum number of items that can be returned is the value specified in <code>maxResults</code>. If there more items in the list, then a unique string called a <i>nextToken</i> is returned. To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned. </p>
958    #[serde(rename = "nextToken")]
959    #[serde(skip_serializing_if = "Option::is_none")]
960    pub next_token: Option<String>,
961    /// <p><p> Specifies the sort order for the list of returned reports. Valid values are: </p> <ul> <li> <p> <code>ASCENDING</code>: return reports in chronological order based on their creation date. </p> </li> <li> <p> <code>DESCENDING</code>: return reports in the reverse chronological order based on their creation date. </p> </li> </ul></p>
962    #[serde(rename = "sortOrder")]
963    #[serde(skip_serializing_if = "Option::is_none")]
964    pub sort_order: Option<String>,
965}
966
967#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
968#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
969pub struct ListReportsOutput {
970    /// <p> During a previous call, the maximum number of items that can be returned is the value specified in <code>maxResults</code>. If there more items in the list, then a unique string called a <i>nextToken</i> is returned. To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned. </p>
971    #[serde(rename = "nextToken")]
972    #[serde(skip_serializing_if = "Option::is_none")]
973    pub next_token: Option<String>,
974    /// <p> The list of returned ARNs for the reports in the current AWS account. </p>
975    #[serde(rename = "reports")]
976    #[serde(skip_serializing_if = "Option::is_none")]
977    pub reports: Option<Vec<String>>,
978}
979
980#[derive(Clone, Debug, Default, PartialEq, Serialize)]
981#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
982pub struct ListSharedProjectsInput {
983    /// <p> The maximum number of paginated shared build projects returned per response. Use <code>nextToken</code> to iterate pages in the list of returned <code>Project</code> objects. The default value is 100. </p>
984    #[serde(rename = "maxResults")]
985    #[serde(skip_serializing_if = "Option::is_none")]
986    pub max_results: Option<i64>,
987    /// <p> During a previous call, the maximum number of items that can be returned is the value specified in <code>maxResults</code>. If there more items in the list, then a unique string called a <i>nextToken</i> is returned. To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned. </p>
988    #[serde(rename = "nextToken")]
989    #[serde(skip_serializing_if = "Option::is_none")]
990    pub next_token: Option<String>,
991    /// <p><p> The criterion to be used to list build projects shared with the current AWS account or user. Valid values include: </p> <ul> <li> <p> <code>ARN</code>: List based on the ARN. </p> </li> <li> <p> <code>MODIFIED_TIME</code>: List based on when information about the shared project was last changed. </p> </li> </ul></p>
992    #[serde(rename = "sortBy")]
993    #[serde(skip_serializing_if = "Option::is_none")]
994    pub sort_by: Option<String>,
995    /// <p><p>The order in which to list shared build projects. Valid values include:</p> <ul> <li> <p> <code>ASCENDING</code>: List in ascending order.</p> </li> <li> <p> <code>DESCENDING</code>: List in descending order.</p> </li> </ul></p>
996    #[serde(rename = "sortOrder")]
997    #[serde(skip_serializing_if = "Option::is_none")]
998    pub sort_order: Option<String>,
999}
1000
1001#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1002#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1003pub struct ListSharedProjectsOutput {
1004    /// <p> During a previous call, the maximum number of items that can be returned is the value specified in <code>maxResults</code>. If there more items in the list, then a unique string called a <i>nextToken</i> is returned. To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned. </p>
1005    #[serde(rename = "nextToken")]
1006    #[serde(skip_serializing_if = "Option::is_none")]
1007    pub next_token: Option<String>,
1008    /// <p> The list of ARNs for the build projects shared with the current AWS account or user. </p>
1009    #[serde(rename = "projects")]
1010    #[serde(skip_serializing_if = "Option::is_none")]
1011    pub projects: Option<Vec<String>>,
1012}
1013
1014#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1015#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1016pub struct ListSharedReportGroupsInput {
1017    /// <p> The maximum number of paginated shared report groups per response. Use <code>nextToken</code> to iterate pages in the list of returned <code>ReportGroup</code> objects. The default value is 100. </p>
1018    #[serde(rename = "maxResults")]
1019    #[serde(skip_serializing_if = "Option::is_none")]
1020    pub max_results: Option<i64>,
1021    /// <p> During a previous call, the maximum number of items that can be returned is the value specified in <code>maxResults</code>. If there more items in the list, then a unique string called a <i>nextToken</i> is returned. To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned. </p>
1022    #[serde(rename = "nextToken")]
1023    #[serde(skip_serializing_if = "Option::is_none")]
1024    pub next_token: Option<String>,
1025    /// <p><p> The criterion to be used to list report groups shared with the current AWS account or user. Valid values include: </p> <ul> <li> <p> <code>ARN</code>: List based on the ARN. </p> </li> <li> <p> <code>MODIFIED_TIME</code>: List based on when information about the shared report group was last changed. </p> </li> </ul></p>
1026    #[serde(rename = "sortBy")]
1027    #[serde(skip_serializing_if = "Option::is_none")]
1028    pub sort_by: Option<String>,
1029    /// <p><p>The order in which to list shared report groups. Valid values include:</p> <ul> <li> <p> <code>ASCENDING</code>: List in ascending order.</p> </li> <li> <p> <code>DESCENDING</code>: List in descending order.</p> </li> </ul></p>
1030    #[serde(rename = "sortOrder")]
1031    #[serde(skip_serializing_if = "Option::is_none")]
1032    pub sort_order: Option<String>,
1033}
1034
1035#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1036#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1037pub struct ListSharedReportGroupsOutput {
1038    /// <p> During a previous call, the maximum number of items that can be returned is the value specified in <code>maxResults</code>. If there more items in the list, then a unique string called a <i>nextToken</i> is returned. To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned. </p>
1039    #[serde(rename = "nextToken")]
1040    #[serde(skip_serializing_if = "Option::is_none")]
1041    pub next_token: Option<String>,
1042    /// <p> The list of ARNs for the report groups shared with the current AWS account or user. </p>
1043    #[serde(rename = "reportGroups")]
1044    #[serde(skip_serializing_if = "Option::is_none")]
1045    pub report_groups: Option<Vec<String>>,
1046}
1047
1048#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1049#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1050pub struct ListSourceCredentialsInput {}
1051
1052#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1053#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1054pub struct ListSourceCredentialsOutput {
1055    /// <p> A list of <code>SourceCredentialsInfo</code> objects. Each <code>SourceCredentialsInfo</code> object includes the authentication type, token ARN, and type of source provider for one set of credentials. </p>
1056    #[serde(rename = "sourceCredentialsInfos")]
1057    #[serde(skip_serializing_if = "Option::is_none")]
1058    pub source_credentials_infos: Option<Vec<SourceCredentialsInfo>>,
1059}
1060
1061/// <p> Information about logs for a build project. These can be logs in Amazon CloudWatch Logs, built in a specified S3 bucket, or both. </p>
1062#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1063pub struct LogsConfig {
1064    /// <p> Information about Amazon CloudWatch Logs for a build project. Amazon CloudWatch Logs are enabled by default. </p>
1065    #[serde(rename = "cloudWatchLogs")]
1066    #[serde(skip_serializing_if = "Option::is_none")]
1067    pub cloud_watch_logs: Option<CloudWatchLogsConfig>,
1068    /// <p> Information about logs built to an S3 bucket for a build project. S3 logs are not enabled by default. </p>
1069    #[serde(rename = "s3Logs")]
1070    #[serde(skip_serializing_if = "Option::is_none")]
1071    pub s_3_logs: Option<S3LogsConfig>,
1072}
1073
1074/// <p>Information about build logs in Amazon CloudWatch Logs.</p>
1075#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1076#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1077pub struct LogsLocation {
1078    /// <p> Information about Amazon CloudWatch Logs for a build project. </p>
1079    #[serde(rename = "cloudWatchLogs")]
1080    #[serde(skip_serializing_if = "Option::is_none")]
1081    pub cloud_watch_logs: Option<CloudWatchLogsConfig>,
1082    /// <p> The ARN of Amazon CloudWatch Logs for a build project. Its format is <code>arn:${Partition}:logs:${Region}:${Account}:log-group:${LogGroupName}:log-stream:${LogStreamName}</code>. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazoncloudwatchlogs.html#amazoncloudwatchlogs-resources-for-iam-policies">Resources Defined by Amazon CloudWatch Logs</a>. </p>
1083    #[serde(rename = "cloudWatchLogsArn")]
1084    #[serde(skip_serializing_if = "Option::is_none")]
1085    pub cloud_watch_logs_arn: Option<String>,
1086    /// <p>The URL to an individual build log in Amazon CloudWatch Logs.</p>
1087    #[serde(rename = "deepLink")]
1088    #[serde(skip_serializing_if = "Option::is_none")]
1089    pub deep_link: Option<String>,
1090    /// <p>The name of the Amazon CloudWatch Logs group for the build logs.</p>
1091    #[serde(rename = "groupName")]
1092    #[serde(skip_serializing_if = "Option::is_none")]
1093    pub group_name: Option<String>,
1094    /// <p> The URL to a build log in an S3 bucket. </p>
1095    #[serde(rename = "s3DeepLink")]
1096    #[serde(skip_serializing_if = "Option::is_none")]
1097    pub s_3_deep_link: Option<String>,
1098    /// <p> Information about S3 logs for a build project. </p>
1099    #[serde(rename = "s3Logs")]
1100    #[serde(skip_serializing_if = "Option::is_none")]
1101    pub s_3_logs: Option<S3LogsConfig>,
1102    /// <p> The ARN of S3 logs for a build project. Its format is <code>arn:${Partition}:s3:::${BucketName}/${ObjectName}</code>. For more information, see <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazons3.html#amazons3-resources-for-iam-policies">Resources Defined by Amazon S3</a>. </p>
1103    #[serde(rename = "s3LogsArn")]
1104    #[serde(skip_serializing_if = "Option::is_none")]
1105    pub s_3_logs_arn: Option<String>,
1106    /// <p>The name of the Amazon CloudWatch Logs stream for the build logs.</p>
1107    #[serde(rename = "streamName")]
1108    #[serde(skip_serializing_if = "Option::is_none")]
1109    pub stream_name: Option<String>,
1110}
1111
1112/// <p>Describes a network interface.</p>
1113#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1114#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1115pub struct NetworkInterface {
1116    /// <p>The ID of the network interface.</p>
1117    #[serde(rename = "networkInterfaceId")]
1118    #[serde(skip_serializing_if = "Option::is_none")]
1119    pub network_interface_id: Option<String>,
1120    /// <p>The ID of the subnet.</p>
1121    #[serde(rename = "subnetId")]
1122    #[serde(skip_serializing_if = "Option::is_none")]
1123    pub subnet_id: Option<String>,
1124}
1125
1126/// <p>Additional information about a build phase that has an error. You can use this information for troubleshooting.</p>
1127#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1128#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1129pub struct PhaseContext {
1130    /// <p>An explanation of the build phase's context. This might include a command ID and an exit code.</p>
1131    #[serde(rename = "message")]
1132    #[serde(skip_serializing_if = "Option::is_none")]
1133    pub message: Option<String>,
1134    /// <p>The status code for the context of the build phase.</p>
1135    #[serde(rename = "statusCode")]
1136    #[serde(skip_serializing_if = "Option::is_none")]
1137    pub status_code: Option<String>,
1138}
1139
1140/// <p>Information about a build project.</p>
1141#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1142#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1143pub struct Project {
1144    /// <p>The Amazon Resource Name (ARN) of the build project.</p>
1145    #[serde(rename = "arn")]
1146    #[serde(skip_serializing_if = "Option::is_none")]
1147    pub arn: Option<String>,
1148    /// <p>Information about the build output artifacts for the build project.</p>
1149    #[serde(rename = "artifacts")]
1150    #[serde(skip_serializing_if = "Option::is_none")]
1151    pub artifacts: Option<ProjectArtifacts>,
1152    /// <p>Information about the build badge for the build project.</p>
1153    #[serde(rename = "badge")]
1154    #[serde(skip_serializing_if = "Option::is_none")]
1155    pub badge: Option<ProjectBadge>,
1156    /// <p>Information about the cache for the build project.</p>
1157    #[serde(rename = "cache")]
1158    #[serde(skip_serializing_if = "Option::is_none")]
1159    pub cache: Option<ProjectCache>,
1160    /// <p>When the build project was created, expressed in Unix time format.</p>
1161    #[serde(rename = "created")]
1162    #[serde(skip_serializing_if = "Option::is_none")]
1163    pub created: Option<f64>,
1164    /// <p>A description that makes the build project easy to identify.</p>
1165    #[serde(rename = "description")]
1166    #[serde(skip_serializing_if = "Option::is_none")]
1167    pub description: Option<String>,
1168    /// <p>The AWS Key Management Service (AWS KMS) customer master key (CMK) to be used for encrypting the build output artifacts.</p> <note> <p> You can use a cross-account KMS key to encrypt the build output artifacts if your service role has permission to that key. </p> </note> <p>You can specify either the Amazon Resource Name (ARN) of the CMK or, if available, the CMK's alias (using the format <code>alias/<i>alias-name</i> </code>).</p>
1169    #[serde(rename = "encryptionKey")]
1170    #[serde(skip_serializing_if = "Option::is_none")]
1171    pub encryption_key: Option<String>,
1172    /// <p>Information about the build environment for this build project.</p>
1173    #[serde(rename = "environment")]
1174    #[serde(skip_serializing_if = "Option::is_none")]
1175    pub environment: Option<ProjectEnvironment>,
1176    /// <p> An array of <code>ProjectFileSystemLocation</code> objects for a CodeBuild build project. A <code>ProjectFileSystemLocation</code> object specifies the <code>identifier</code>, <code>location</code>, <code>mountOptions</code>, <code>mountPoint</code>, and <code>type</code> of a file system created using Amazon Elastic File System. </p>
1177    #[serde(rename = "fileSystemLocations")]
1178    #[serde(skip_serializing_if = "Option::is_none")]
1179    pub file_system_locations: Option<Vec<ProjectFileSystemLocation>>,
1180    /// <p>When the build project's settings were last modified, expressed in Unix time format.</p>
1181    #[serde(rename = "lastModified")]
1182    #[serde(skip_serializing_if = "Option::is_none")]
1183    pub last_modified: Option<f64>,
1184    /// <p> Information about logs for the build project. A project can create logs in Amazon CloudWatch Logs, an S3 bucket, or both. </p>
1185    #[serde(rename = "logsConfig")]
1186    #[serde(skip_serializing_if = "Option::is_none")]
1187    pub logs_config: Option<LogsConfig>,
1188    /// <p>The name of the build project.</p>
1189    #[serde(rename = "name")]
1190    #[serde(skip_serializing_if = "Option::is_none")]
1191    pub name: Option<String>,
1192    /// <p> The number of minutes a build is allowed to be queued before it times out. </p>
1193    #[serde(rename = "queuedTimeoutInMinutes")]
1194    #[serde(skip_serializing_if = "Option::is_none")]
1195    pub queued_timeout_in_minutes: Option<i64>,
1196    /// <p> An array of <code>ProjectArtifacts</code> objects. </p>
1197    #[serde(rename = "secondaryArtifacts")]
1198    #[serde(skip_serializing_if = "Option::is_none")]
1199    pub secondary_artifacts: Option<Vec<ProjectArtifacts>>,
1200    /// <p> An array of <code>ProjectSourceVersion</code> objects. If <code>secondarySourceVersions</code> is specified at the build level, then they take over these <code>secondarySourceVersions</code> (at the project level). </p>
1201    #[serde(rename = "secondarySourceVersions")]
1202    #[serde(skip_serializing_if = "Option::is_none")]
1203    pub secondary_source_versions: Option<Vec<ProjectSourceVersion>>,
1204    /// <p> An array of <code>ProjectSource</code> objects. </p>
1205    #[serde(rename = "secondarySources")]
1206    #[serde(skip_serializing_if = "Option::is_none")]
1207    pub secondary_sources: Option<Vec<ProjectSource>>,
1208    /// <p>The ARN of the AWS Identity and Access Management (IAM) role that enables AWS CodeBuild to interact with dependent AWS services on behalf of the AWS account.</p>
1209    #[serde(rename = "serviceRole")]
1210    #[serde(skip_serializing_if = "Option::is_none")]
1211    pub service_role: Option<String>,
1212    /// <p>Information about the build input source code for this build project.</p>
1213    #[serde(rename = "source")]
1214    #[serde(skip_serializing_if = "Option::is_none")]
1215    pub source: Option<ProjectSource>,
1216    /// <p>A version of the build input to be built for this project. If not specified, the latest version is used. If specified, it must be one of:</p> <ul> <li> <p>For AWS CodeCommit: the commit ID, branch, or Git tag to use.</p> </li> <li> <p>For GitHub: the commit ID, pull request ID, branch name, or tag name that corresponds to the version of the source code you want to build. If a pull request ID is specified, it must use the format <code>pr/pull-request-ID</code> (for example <code>pr/25</code>). If a branch name is specified, the branch's HEAD commit ID is used. If not specified, the default branch's HEAD commit ID is used.</p> </li> <li> <p>For Bitbucket: the commit ID, branch name, or tag name that corresponds to the version of the source code you want to build. If a branch name is specified, the branch's HEAD commit ID is used. If not specified, the default branch's HEAD commit ID is used.</p> </li> <li> <p>For Amazon Simple Storage Service (Amazon S3): the version ID of the object that represents the build input ZIP file to use.</p> </li> </ul> <p> If <code>sourceVersion</code> is specified at the build level, then that version takes precedence over this <code>sourceVersion</code> (at the project level). </p> <p> For more information, see <a href="https://docs.aws.amazon.com/codebuild/latest/userguide/sample-source-version.html">Source Version Sample with CodeBuild</a> in the <i>AWS CodeBuild User Guide</i>. </p>
1217    #[serde(rename = "sourceVersion")]
1218    #[serde(skip_serializing_if = "Option::is_none")]
1219    pub source_version: Option<String>,
1220    /// <p>A list of tag key and value pairs associated with this build project.</p> <p>These tags are available for use by AWS services that support AWS CodeBuild build project tags.</p>
1221    #[serde(rename = "tags")]
1222    #[serde(skip_serializing_if = "Option::is_none")]
1223    pub tags: Option<Vec<Tag>>,
1224    /// <p>How long, in minutes, from 5 to 480 (8 hours), for AWS CodeBuild to wait before timing out any related build that did not get marked as completed. The default is 60 minutes.</p>
1225    #[serde(rename = "timeoutInMinutes")]
1226    #[serde(skip_serializing_if = "Option::is_none")]
1227    pub timeout_in_minutes: Option<i64>,
1228    /// <p>Information about the VPC configuration that AWS CodeBuild accesses.</p>
1229    #[serde(rename = "vpcConfig")]
1230    #[serde(skip_serializing_if = "Option::is_none")]
1231    pub vpc_config: Option<VpcConfig>,
1232    /// <p>Information about a webhook that connects repository events to a build project in AWS CodeBuild.</p>
1233    #[serde(rename = "webhook")]
1234    #[serde(skip_serializing_if = "Option::is_none")]
1235    pub webhook: Option<Webhook>,
1236}
1237
1238/// <p>Information about the build output artifacts for the build project.</p>
1239#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1240pub struct ProjectArtifacts {
1241    /// <p> An identifier for this artifact definition. </p>
1242    #[serde(rename = "artifactIdentifier")]
1243    #[serde(skip_serializing_if = "Option::is_none")]
1244    pub artifact_identifier: Option<String>,
1245    /// <p> Set to true if you do not want your output artifacts encrypted. This option is valid only if your artifacts type is Amazon Simple Storage Service (Amazon S3). If this is set with another artifacts type, an invalidInputException is thrown. </p>
1246    #[serde(rename = "encryptionDisabled")]
1247    #[serde(skip_serializing_if = "Option::is_none")]
1248    pub encryption_disabled: Option<bool>,
1249    /// <p><p>Information about the build output artifact location:</p> <ul> <li> <p>If <code>type</code> is set to <code>CODEPIPELINE</code>, AWS CodePipeline ignores this value if specified. This is because AWS CodePipeline manages its build output locations instead of AWS CodeBuild.</p> </li> <li> <p>If <code>type</code> is set to <code>NO_ARTIFACTS</code>, this value is ignored if specified, because no build output is produced.</p> </li> <li> <p>If <code>type</code> is set to <code>S3</code>, this is the name of the output bucket.</p> </li> </ul></p>
1250    #[serde(rename = "location")]
1251    #[serde(skip_serializing_if = "Option::is_none")]
1252    pub location: Option<String>,
1253    /// <p><p>Along with <code>path</code> and <code>namespaceType</code>, the pattern that AWS CodeBuild uses to name and store the output artifact:</p> <ul> <li> <p>If <code>type</code> is set to <code>CODEPIPELINE</code>, AWS CodePipeline ignores this value if specified. This is because AWS CodePipeline manages its build output names instead of AWS CodeBuild.</p> </li> <li> <p>If <code>type</code> is set to <code>NO<em>ARTIFACTS</code>, this value is ignored if specified, because no build output is produced.</p> </li> <li> <p>If <code>type</code> is set to <code>S3</code>, this is the name of the output artifact object. If you set the name to be a forward slash (&quot;/&quot;), the artifact is stored in the root of the output bucket.</p> </li> </ul> <p>For example:</p> <ul> <li> <p> If <code>path</code> is set to <code>MyArtifacts</code>, <code>namespaceType</code> is set to <code>BUILD</em>ID</code>, and <code>name</code> is set to <code>MyArtifact.zip</code>, then the output artifact is stored in <code>MyArtifacts/<i>build-ID</i>/MyArtifact.zip</code>. </p> </li> <li> <p> If <code>path</code> is empty, <code>namespaceType</code> is set to <code>NONE</code>, and <code>name</code> is set to &quot;<code>/</code>&quot;, the output artifact is stored in the root of the output bucket. </p> </li> <li> <p> If <code>path</code> is set to <code>MyArtifacts</code>, <code>namespaceType</code> is set to <code>BUILD_ID</code>, and <code>name</code> is set to &quot;<code>/</code>&quot;, the output artifact is stored in <code>MyArtifacts/<i>build-ID</i> </code>. </p> </li> </ul></p>
1254    #[serde(rename = "name")]
1255    #[serde(skip_serializing_if = "Option::is_none")]
1256    pub name: Option<String>,
1257    /// <p>Along with <code>path</code> and <code>name</code>, the pattern that AWS CodeBuild uses to determine the name and location to store the output artifact:</p> <ul> <li> <p>If <code>type</code> is set to <code>CODEPIPELINE</code>, AWS CodePipeline ignores this value if specified. This is because AWS CodePipeline manages its build output names instead of AWS CodeBuild.</p> </li> <li> <p>If <code>type</code> is set to <code>NO_ARTIFACTS</code>, this value is ignored if specified, because no build output is produced.</p> </li> <li> <p>If <code>type</code> is set to <code>S3</code>, valid values include:</p> <ul> <li> <p> <code>BUILD_ID</code>: Include the build ID in the location of the build output artifact.</p> </li> <li> <p> <code>NONE</code>: Do not include the build ID. This is the default if <code>namespaceType</code> is not specified.</p> </li> </ul> </li> </ul> <p>For example, if <code>path</code> is set to <code>MyArtifacts</code>, <code>namespaceType</code> is set to <code>BUILD_ID</code>, and <code>name</code> is set to <code>MyArtifact.zip</code>, the output artifact is stored in <code>MyArtifacts/<i>build-ID</i>/MyArtifact.zip</code>.</p>
1258    #[serde(rename = "namespaceType")]
1259    #[serde(skip_serializing_if = "Option::is_none")]
1260    pub namespace_type: Option<String>,
1261    /// <p> If this flag is set, a name specified in the buildspec file overrides the artifact name. The name specified in a buildspec file is calculated at build time and uses the Shell Command Language. For example, you can append a date and time to your artifact name so that it is always unique. </p>
1262    #[serde(rename = "overrideArtifactName")]
1263    #[serde(skip_serializing_if = "Option::is_none")]
1264    pub override_artifact_name: Option<bool>,
1265    /// <p><p>The type of build output artifact to create:</p> <ul> <li> <p>If <code>type</code> is set to <code>CODEPIPELINE</code>, AWS CodePipeline ignores this value if specified. This is because AWS CodePipeline manages its build output artifacts instead of AWS CodeBuild.</p> </li> <li> <p>If <code>type</code> is set to <code>NO_ARTIFACTS</code>, this value is ignored if specified, because no build output is produced.</p> </li> <li> <p>If <code>type</code> is set to <code>S3</code>, valid values include:</p> <ul> <li> <p> <code>NONE</code>: AWS CodeBuild creates in the output bucket a folder that contains the build output. This is the default if <code>packaging</code> is not specified.</p> </li> <li> <p> <code>ZIP</code>: AWS CodeBuild creates in the output bucket a ZIP file that contains the build output.</p> </li> </ul> </li> </ul></p>
1266    #[serde(rename = "packaging")]
1267    #[serde(skip_serializing_if = "Option::is_none")]
1268    pub packaging: Option<String>,
1269    /// <p>Along with <code>namespaceType</code> and <code>name</code>, the pattern that AWS CodeBuild uses to name and store the output artifact:</p> <ul> <li> <p>If <code>type</code> is set to <code>CODEPIPELINE</code>, AWS CodePipeline ignores this value if specified. This is because AWS CodePipeline manages its build output names instead of AWS CodeBuild.</p> </li> <li> <p>If <code>type</code> is set to <code>NO_ARTIFACTS</code>, this value is ignored if specified, because no build output is produced.</p> </li> <li> <p>If <code>type</code> is set to <code>S3</code>, this is the path to the output artifact. If <code>path</code> is not specified, <code>path</code> is not used.</p> </li> </ul> <p>For example, if <code>path</code> is set to <code>MyArtifacts</code>, <code>namespaceType</code> is set to <code>NONE</code>, and <code>name</code> is set to <code>MyArtifact.zip</code>, the output artifact is stored in the output bucket at <code>MyArtifacts/MyArtifact.zip</code>.</p>
1270    #[serde(rename = "path")]
1271    #[serde(skip_serializing_if = "Option::is_none")]
1272    pub path: Option<String>,
1273    /// <p><p>The type of build output artifact. Valid values include:</p> <ul> <li> <p> <code>CODEPIPELINE</code>: The build project has build output generated through AWS CodePipeline. </p> <note> <p>The <code>CODEPIPELINE</code> type is not supported for <code>secondaryArtifacts</code>.</p> </note> </li> <li> <p> <code>NO_ARTIFACTS</code>: The build project does not produce any build output.</p> </li> <li> <p> <code>S3</code>: The build project stores build output in Amazon Simple Storage Service (Amazon S3).</p> </li> </ul></p>
1274    #[serde(rename = "type")]
1275    pub type_: String,
1276}
1277
1278/// <p>Information about the build badge for the build project.</p>
1279#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1280#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1281pub struct ProjectBadge {
1282    /// <p>Set this to true to generate a publicly accessible URL for your project's build badge.</p>
1283    #[serde(rename = "badgeEnabled")]
1284    #[serde(skip_serializing_if = "Option::is_none")]
1285    pub badge_enabled: Option<bool>,
1286    /// <p>The publicly-accessible URL through which you can access the build badge for your project. </p> <p>The publicly accessible URL through which you can access the build badge for your project. </p>
1287    #[serde(rename = "badgeRequestUrl")]
1288    #[serde(skip_serializing_if = "Option::is_none")]
1289    pub badge_request_url: Option<String>,
1290}
1291
1292/// <p>Information about the cache for the build project.</p>
1293#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1294pub struct ProjectCache {
1295    /// <p><p>Information about the cache location: </p> <ul> <li> <p> <code>NO_CACHE</code> or <code>LOCAL</code>: This value is ignored.</p> </li> <li> <p> <code>S3</code>: This is the S3 bucket name/prefix.</p> </li> </ul></p>
1296    #[serde(rename = "location")]
1297    #[serde(skip_serializing_if = "Option::is_none")]
1298    pub location: Option<String>,
1299    /// <p><p> If you use a <code>LOCAL</code> cache, the local cache mode. You can use one or more local cache modes at the same time. </p> <ul> <li> <p> <code>LOCAL<em>SOURCE</em>CACHE</code> mode caches Git metadata for primary and secondary sources. After the cache is created, subsequent builds pull only the change between commits. This mode is a good choice for projects with a clean working directory and a source that is a large Git repository. If you choose this option and your project does not use a Git repository (GitHub, GitHub Enterprise, or Bitbucket), the option is ignored. </p> </li> <li> <p> <code>LOCAL<em>DOCKER</em>LAYER<em>CACHE</code> mode caches existing Docker layers. This mode is a good choice for projects that build or pull large Docker images. It can prevent the performance issues caused by pulling large Docker images down from the network. </p> <note> <ul> <li> <p> You can use a Docker layer cache in the Linux environment only. </p> </li> <li> <p> The <code>privileged</code> flag must be set so that your project has the required Docker permissions. </p> </li> <li> <p> You should consider the security implications before you use a Docker layer cache. </p> </li> </ul> </note> </li> </ul> <ul> <li> <p> <code>LOCAL</em>CUSTOM_CACHE</code> mode caches directories you specify in the buildspec file. This mode is a good choice if your build scenario is not suited to one of the other three local cache modes. If you use a custom cache: </p> <ul> <li> <p> Only directories can be specified for caching. You cannot specify individual files. </p> </li> <li> <p> Symlinks are used to reference cached directories. </p> </li> <li> <p> Cached directories are linked to your build before it downloads its project sources. Cached items are overridden if a source item has the same name. Directories are specified using cache paths in the buildspec file. </p> </li> </ul> </li> </ul></p>
1300    #[serde(rename = "modes")]
1301    #[serde(skip_serializing_if = "Option::is_none")]
1302    pub modes: Option<Vec<String>>,
1303    /// <p><p>The type of cache used by the build project. Valid values include:</p> <ul> <li> <p> <code>NO_CACHE</code>: The build project does not use any cache.</p> </li> <li> <p> <code>S3</code>: The build project reads and writes from and to S3.</p> </li> <li> <p> <code>LOCAL</code>: The build project stores a cache locally on a build host that is only available to that build host.</p> </li> </ul></p>
1304    #[serde(rename = "type")]
1305    pub type_: String,
1306}
1307
1308/// <p>Information about the build environment of the build project.</p>
1309#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1310pub struct ProjectEnvironment {
1311    /// <p>The certificate to use with this build project.</p>
1312    #[serde(rename = "certificate")]
1313    #[serde(skip_serializing_if = "Option::is_none")]
1314    pub certificate: Option<String>,
1315    /// <p>Information about the compute resources the build project uses. Available values include:</p> <ul> <li> <p> <code>BUILD_GENERAL1_SMALL</code>: Use up to 3 GB memory and 2 vCPUs for builds.</p> </li> <li> <p> <code>BUILD_GENERAL1_MEDIUM</code>: Use up to 7 GB memory and 4 vCPUs for builds.</p> </li> <li> <p> <code>BUILD_GENERAL1_LARGE</code>: Use up to 16 GB memory and 8 vCPUs for builds, depending on your environment type.</p> </li> <li> <p> <code>BUILD_GENERAL1_2XLARGE</code>: Use up to 145 GB memory, 72 vCPUs, and 824 GB of SSD storage for builds. This compute type supports Docker images up to 100 GB uncompressed.</p> </li> </ul> <p> If you use <code>BUILD_GENERAL1_LARGE</code>: </p> <ul> <li> <p> For environment type <code>LINUX_CONTAINER</code>, you can use up to 15 GB memory and 8 vCPUs for builds. </p> </li> <li> <p> For environment type <code>LINUX_GPU_CONTAINER</code>, you can use up to 255 GB memory, 32 vCPUs, and 4 NVIDIA Tesla V100 GPUs for builds.</p> </li> <li> <p> For environment type <code>ARM_CONTAINER</code>, you can use up to 16 GB memory and 8 vCPUs on ARM-based processors for builds.</p> </li> </ul> <p> For more information, see <a href="https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html">Build Environment Compute Types</a> in the <i>AWS CodeBuild User Guide.</i> </p>
1316    #[serde(rename = "computeType")]
1317    pub compute_type: String,
1318    /// <p>A set of environment variables to make available to builds for this build project.</p>
1319    #[serde(rename = "environmentVariables")]
1320    #[serde(skip_serializing_if = "Option::is_none")]
1321    pub environment_variables: Option<Vec<EnvironmentVariable>>,
1322    /// <p><p>The image tag or image digest that identifies the Docker image to use for this build project. Use the following formats:</p> <ul> <li> <p>For an image tag: <code>registry/repository:tag</code>. For example, to specify an image with the tag &quot;latest,&quot; use <code>registry/repository:latest</code>.</p> </li> <li> <p>For an image digest: <code>registry/repository@digest</code>. For example, to specify an image with the digest &quot;sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf,&quot; use <code>registry/repository@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf</code>.</p> </li> </ul></p>
1323    #[serde(rename = "image")]
1324    pub image: String,
1325    /// <p> The type of credentials AWS CodeBuild uses to pull images in your build. There are two valid values: </p> <ul> <li> <p> <code>CODEBUILD</code> specifies that AWS CodeBuild uses its own credentials. This requires that you modify your ECR repository policy to trust AWS CodeBuild's service principal. </p> </li> <li> <p> <code>SERVICE_ROLE</code> specifies that AWS CodeBuild uses your build project's service role. </p> </li> </ul> <p> When you use a cross-account or private registry image, you must use SERVICE_ROLE credentials. When you use an AWS CodeBuild curated image, you must use CODEBUILD credentials. </p>
1326    #[serde(rename = "imagePullCredentialsType")]
1327    #[serde(skip_serializing_if = "Option::is_none")]
1328    pub image_pull_credentials_type: Option<String>,
1329    /// <p>Enables running the Docker daemon inside a Docker container. Set to true only if the build project is used to build Docker images. Otherwise, a build that attempts to interact with the Docker daemon fails. The default setting is <code>false</code>.</p> <p>You can initialize the Docker daemon during the install phase of your build by adding one of the following sets of commands to the install phase of your buildspec file:</p> <p>If the operating system's base image is Ubuntu Linux:</p> <p> <code>- nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://0.0.0.0:2375 --storage-driver=overlay&amp;</code> </p> <p> <code>- timeout 15 sh -c "until docker info; do echo .; sleep 1; done"</code> </p> <p>If the operating system's base image is Alpine Linux and the previous command does not work, add the <code>-t</code> argument to <code>timeout</code>:</p> <p> <code>- nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://0.0.0.0:2375 --storage-driver=overlay&amp;</code> </p> <p> <code>- timeout -t 15 sh -c "until docker info; do echo .; sleep 1; done"</code> </p>
1330    #[serde(rename = "privilegedMode")]
1331    #[serde(skip_serializing_if = "Option::is_none")]
1332    pub privileged_mode: Option<bool>,
1333    /// <p> The credentials for access to a private registry.</p>
1334    #[serde(rename = "registryCredential")]
1335    #[serde(skip_serializing_if = "Option::is_none")]
1336    pub registry_credential: Option<RegistryCredential>,
1337    /// <p><p>The type of build environment to use for related builds.</p> <ul> <li> <p>The environment type <code>ARM<em>CONTAINER</code> is available only in regions US East (N. Virginia), US East (Ohio), US West (Oregon), EU (Ireland), Asia Pacific (Mumbai), Asia Pacific (Tokyo), Asia Pacific (Sydney), and EU (Frankfurt).</p> </li> <li> <p>The environment type <code>LINUX</em>CONTAINER</code> with compute type <code>build.general1.2xlarge</code> is available only in regions US East (N. Virginia), US East (Ohio), US West (Oregon), Canada (Central), EU (Ireland), EU (London), EU (Frankfurt), Asia Pacific (Tokyo), Asia Pacific (Seoul), Asia Pacific (Singapore), Asia Pacific (Sydney), China (Beijing), and China (Ningxia).</p> </li> <li> <p>The environment type <code>LINUX<em>GPU</em>CONTAINER</code> is available only in regions US East (N. Virginia), US East (Ohio), US West (Oregon), Canada (Central), EU (Ireland), EU (London), EU (Frankfurt), Asia Pacific (Tokyo), Asia Pacific (Seoul), Asia Pacific (Singapore), Asia Pacific (Sydney) , China (Beijing), and China (Ningxia).</p> </li> </ul></p>
1338    #[serde(rename = "type")]
1339    pub type_: String,
1340}
1341
1342/// <p> Information about a file system created by Amazon Elastic File System (EFS). For more information, see <a href="https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html">What Is Amazon Elastic File System?</a> </p>
1343#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1344pub struct ProjectFileSystemLocation {
1345    /// <p> The name used to access a file system created by Amazon EFS. CodeBuild creates an environment variable by appending the <code>identifier</code> in all capital letters to <code>CODEBUILD_</code>. For example, if you specify <code>my-efs</code> for <code>identifier</code>, a new environment variable is create named <code>CODEBUILD_MY-EFS</code>. </p> <p> The <code>identifier</code> is used to mount your file system. </p>
1346    #[serde(rename = "identifier")]
1347    #[serde(skip_serializing_if = "Option::is_none")]
1348    pub identifier: Option<String>,
1349    /// <p> A string that specifies the location of the file system created by Amazon EFS. Its format is <code>efs-dns-name:/directory-path</code>. You can find the DNS name of file system when you view it in the AWS EFS console. The directory path is a path to a directory in the file system that CodeBuild mounts. For example, if the DNS name of a file system is <code>fs-abcd1234.efs.us-west-2.amazonaws.com</code>, and its mount directory is <code>my-efs-mount-directory</code>, then the <code>location</code> is <code>fs-abcd1234.efs.us-west-2.amazonaws.com:/my-efs-mount-directory</code>. </p> <p> The directory path in the format <code>efs-dns-name:/directory-path</code> is optional. If you do not specify a directory path, the location is only the DNS name and CodeBuild mounts the entire file system. </p>
1350    #[serde(rename = "location")]
1351    #[serde(skip_serializing_if = "Option::is_none")]
1352    pub location: Option<String>,
1353    /// <p> The mount options for a file system created by AWS EFS. The default mount options used by CodeBuild are <code>nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2</code>. For more information, see <a href="https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-nfs-mount-settings.html">Recommended NFS Mount Options</a>. </p>
1354    #[serde(rename = "mountOptions")]
1355    #[serde(skip_serializing_if = "Option::is_none")]
1356    pub mount_options: Option<String>,
1357    /// <p> The location in the container where you mount the file system. </p>
1358    #[serde(rename = "mountPoint")]
1359    #[serde(skip_serializing_if = "Option::is_none")]
1360    pub mount_point: Option<String>,
1361    /// <p> The type of the file system. The one supported type is <code>EFS</code>. </p>
1362    #[serde(rename = "type")]
1363    #[serde(skip_serializing_if = "Option::is_none")]
1364    pub type_: Option<String>,
1365}
1366
1367/// <p>Information about the build input source code for the build project.</p>
1368#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1369pub struct ProjectSource {
1370    /// <p>Information about the authorization settings for AWS CodeBuild to access the source code to be built.</p> <p>This information is for the AWS CodeBuild console's use only. Your code should not get or set this information directly.</p>
1371    #[serde(rename = "auth")]
1372    #[serde(skip_serializing_if = "Option::is_none")]
1373    pub auth: Option<SourceAuth>,
1374    /// <p>Contains information that defines how the build project reports the build status to the source provider. This option is only used when the source provider is <code>GITHUB</code>, <code>GITHUB_ENTERPRISE</code>, or <code>BITBUCKET</code>.</p>
1375    #[serde(rename = "buildStatusConfig")]
1376    #[serde(skip_serializing_if = "Option::is_none")]
1377    pub build_status_config: Option<BuildStatusConfig>,
1378    /// <p>The buildspec file declaration to use for the builds in this build project.</p> <p> If this value is set, it can be either an inline buildspec definition, the path to an alternate buildspec file relative to the value of the built-in <code>CODEBUILD_SRC_DIR</code> environment variable, or the path to an S3 bucket. The bucket must be in the same AWS Region as the build project. Specify the buildspec file using its ARN (for example, <code>arn:aws:s3:::my-codebuild-sample2/buildspec.yml</code>). If this value is not provided or is set to an empty string, the source code must contain a buildspec file in its root directory. For more information, see <a href="https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-name-storage">Buildspec File Name and Storage Location</a>. </p>
1379    #[serde(rename = "buildspec")]
1380    #[serde(skip_serializing_if = "Option::is_none")]
1381    pub buildspec: Option<String>,
1382    /// <p>Information about the Git clone depth for the build project.</p>
1383    #[serde(rename = "gitCloneDepth")]
1384    #[serde(skip_serializing_if = "Option::is_none")]
1385    pub git_clone_depth: Option<i64>,
1386    /// <p> Information about the Git submodules configuration for the build project. </p>
1387    #[serde(rename = "gitSubmodulesConfig")]
1388    #[serde(skip_serializing_if = "Option::is_none")]
1389    pub git_submodules_config: Option<GitSubmodulesConfig>,
1390    /// <p>Enable this flag to ignore SSL warnings while connecting to the project source code.</p>
1391    #[serde(rename = "insecureSsl")]
1392    #[serde(skip_serializing_if = "Option::is_none")]
1393    pub insecure_ssl: Option<bool>,
1394    /// <p><p>Information about the location of the source code to be built. Valid values include:</p> <ul> <li> <p>For source code settings that are specified in the source action of a pipeline in AWS CodePipeline, <code>location</code> should not be specified. If it is specified, AWS CodePipeline ignores it. This is because AWS CodePipeline uses the settings in a pipeline&#39;s source action instead of this value.</p> </li> <li> <p>For source code in an AWS CodeCommit repository, the HTTPS clone URL to the repository that contains the source code and the buildspec file (for example, <code>https://git-codecommit.<i>region-ID</i>.amazonaws.com/v1/repos/<i>repo-name</i> </code>).</p> </li> <li> <p>For source code in an Amazon Simple Storage Service (Amazon S3) input bucket, one of the following. </p> <ul> <li> <p> The path to the ZIP file that contains the source code (for example, <code> <i>bucket-name</i>/<i>path</i>/<i>to</i>/<i>object-name</i>.zip</code>). </p> </li> <li> <p> The path to the folder that contains the source code (for example, <code> <i>bucket-name</i>/<i>path</i>/<i>to</i>/<i>source-code</i>/<i>folder</i>/</code>). </p> </li> </ul> </li> <li> <p>For source code in a GitHub repository, the HTTPS clone URL to the repository that contains the source and the buildspec file. You must connect your AWS account to your GitHub account. Use the AWS CodeBuild console to start creating a build project. When you use the console to connect (or reconnect) with GitHub, on the GitHub <b>Authorize application</b> page, for <b>Organization access</b>, choose <b>Request access</b> next to each repository you want to allow AWS CodeBuild to have access to, and then choose <b>Authorize application</b>. (After you have connected to your GitHub account, you do not need to finish creating the build project. You can leave the AWS CodeBuild console.) To instruct AWS CodeBuild to use this connection, in the <code>source</code> object, set the <code>auth</code> object&#39;s <code>type</code> value to <code>OAUTH</code>.</p> </li> <li> <p>For source code in a Bitbucket repository, the HTTPS clone URL to the repository that contains the source and the buildspec file. You must connect your AWS account to your Bitbucket account. Use the AWS CodeBuild console to start creating a build project. When you use the console to connect (or reconnect) with Bitbucket, on the Bitbucket <b>Confirm access to your account</b> page, choose <b>Grant access</b>. (After you have connected to your Bitbucket account, you do not need to finish creating the build project. You can leave the AWS CodeBuild console.) To instruct AWS CodeBuild to use this connection, in the <code>source</code> object, set the <code>auth</code> object&#39;s <code>type</code> value to <code>OAUTH</code>.</p> </li> </ul></p>
1395    #[serde(rename = "location")]
1396    #[serde(skip_serializing_if = "Option::is_none")]
1397    pub location: Option<String>,
1398    /// <p><p> Set to true to report the status of a build&#39;s start and finish to your source provider. This option is valid only when your source provider is GitHub, GitHub Enterprise, or Bitbucket. If this is set and you use a different source provider, an invalidInputException is thrown. </p> <note> <p> The status of a build triggered by a webhook is always reported to your source provider. </p> </note></p>
1399    #[serde(rename = "reportBuildStatus")]
1400    #[serde(skip_serializing_if = "Option::is_none")]
1401    pub report_build_status: Option<bool>,
1402    /// <p> An identifier for this project source. </p>
1403    #[serde(rename = "sourceIdentifier")]
1404    #[serde(skip_serializing_if = "Option::is_none")]
1405    pub source_identifier: Option<String>,
1406    /// <p><p>The type of repository that contains the source code to be built. Valid values include:</p> <ul> <li> <p> <code>BITBUCKET</code>: The source code is in a Bitbucket repository.</p> </li> <li> <p> <code>CODECOMMIT</code>: The source code is in an AWS CodeCommit repository.</p> </li> <li> <p> <code>CODEPIPELINE</code>: The source code settings are specified in the source action of a pipeline in AWS CodePipeline.</p> </li> <li> <p> <code>GITHUB</code>: The source code is in a GitHub or GitHub Enterprise Cloud repository.</p> </li> <li> <p> <code>GITHUB<em>ENTERPRISE</code>: The source code is in a GitHub Enterprise Server repository.</p> </li> <li> <p> <code>NO</em>SOURCE</code>: The project does not have input source code.</p> </li> <li> <p> <code>S3</code>: The source code is in an Amazon Simple Storage Service (Amazon S3) input bucket.</p> </li> </ul></p>
1407    #[serde(rename = "type")]
1408    pub type_: String,
1409}
1410
1411/// <p> A source identifier and its corresponding version. </p>
1412#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1413pub struct ProjectSourceVersion {
1414    /// <p>An identifier for a source in the build project.</p>
1415    #[serde(rename = "sourceIdentifier")]
1416    pub source_identifier: String,
1417    /// <p>The source version for the corresponding source identifier. If specified, must be one of:</p> <ul> <li> <p>For AWS CodeCommit: the commit ID, branch, or Git tag to use.</p> </li> <li> <p>For GitHub: the commit ID, pull request ID, branch name, or tag name that corresponds to the version of the source code you want to build. If a pull request ID is specified, it must use the format <code>pr/pull-request-ID</code> (for example, <code>pr/25</code>). If a branch name is specified, the branch's HEAD commit ID is used. If not specified, the default branch's HEAD commit ID is used.</p> </li> <li> <p>For Bitbucket: the commit ID, branch name, or tag name that corresponds to the version of the source code you want to build. If a branch name is specified, the branch's HEAD commit ID is used. If not specified, the default branch's HEAD commit ID is used.</p> </li> <li> <p>For Amazon Simple Storage Service (Amazon S3): the version ID of the object that represents the build input ZIP file to use.</p> </li> </ul> <p> For more information, see <a href="https://docs.aws.amazon.com/codebuild/latest/userguide/sample-source-version.html">Source Version Sample with CodeBuild</a> in the <i>AWS CodeBuild User Guide</i>. </p>
1418    #[serde(rename = "sourceVersion")]
1419    pub source_version: String,
1420}
1421
1422#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1423#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1424pub struct PutResourcePolicyInput {
1425    /// <p> A JSON-formatted resource policy. For more information, see <a href="https://docs.aws.amazon.com/codebuild/latest/userguide/project-sharing.html#project-sharing-share">Sharing a Project</a> and <a href="https://docs.aws.amazon.com/codebuild/latest/userguide/report-groups-sharing.html#report-groups-sharing-share">Sharing a Report Group</a> in the <i>AWS CodeBuild User Guide</i>. </p>
1426    #[serde(rename = "policy")]
1427    pub policy: String,
1428    /// <p> The ARN of the <code>Project</code> or <code>ReportGroup</code> resource you want to associate with a resource policy. </p>
1429    #[serde(rename = "resourceArn")]
1430    pub resource_arn: String,
1431}
1432
1433#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1434#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1435pub struct PutResourcePolicyOutput {
1436    /// <p> The ARN of the <code>Project</code> or <code>ReportGroup</code> resource that is associated with a resource policy. </p>
1437    #[serde(rename = "resourceArn")]
1438    #[serde(skip_serializing_if = "Option::is_none")]
1439    pub resource_arn: Option<String>,
1440}
1441
1442/// <p> Information about credentials that provide access to a private Docker registry. When this is set: </p> <ul> <li> <p> <code>imagePullCredentialsType</code> must be set to <code>SERVICE_ROLE</code>. </p> </li> <li> <p> images cannot be curated or an Amazon ECR image.</p> </li> </ul> <p> For more information, see <a href="https://docs.aws.amazon.com/codebuild/latest/userguide/sample-private-registry.html">Private Registry with AWS Secrets Manager Sample for AWS CodeBuild</a>. </p>
1443#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1444pub struct RegistryCredential {
1445    /// <p><p> The Amazon Resource Name (ARN) or name of credentials created using AWS Secrets Manager. </p> <note> <p> The <code>credential</code> can use the name of the credentials only if they exist in your current AWS Region. </p> </note></p>
1446    #[serde(rename = "credential")]
1447    pub credential: String,
1448    /// <p> The service that created the credentials to access a private Docker registry. The valid value, SECRETS_MANAGER, is for AWS Secrets Manager. </p>
1449    #[serde(rename = "credentialProvider")]
1450    pub credential_provider: String,
1451}
1452
1453/// <p> Information about the results from running a series of test cases during the run of a build project. The test cases are specified in the buildspec for the build project using one or more paths to the test case files. You can specify any type of tests you want, such as unit tests, integration tests, and functional tests. </p>
1454#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1455#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1456pub struct Report {
1457    /// <p> The ARN of the report run. </p>
1458    #[serde(rename = "arn")]
1459    #[serde(skip_serializing_if = "Option::is_none")]
1460    pub arn: Option<String>,
1461    /// <p> The date and time this report run occurred. </p>
1462    #[serde(rename = "created")]
1463    #[serde(skip_serializing_if = "Option::is_none")]
1464    pub created: Option<f64>,
1465    /// <p> The ARN of the build run that generated this report. </p>
1466    #[serde(rename = "executionId")]
1467    #[serde(skip_serializing_if = "Option::is_none")]
1468    pub execution_id: Option<String>,
1469    /// <p> The date and time a report expires. A report expires 30 days after it is created. An expired report is not available to view in CodeBuild. </p>
1470    #[serde(rename = "expired")]
1471    #[serde(skip_serializing_if = "Option::is_none")]
1472    pub expired: Option<f64>,
1473    /// <p> Information about where the raw data used to generate this report was exported. </p>
1474    #[serde(rename = "exportConfig")]
1475    #[serde(skip_serializing_if = "Option::is_none")]
1476    pub export_config: Option<ReportExportConfig>,
1477    /// <p> The name of the report that was run. </p>
1478    #[serde(rename = "name")]
1479    #[serde(skip_serializing_if = "Option::is_none")]
1480    pub name: Option<String>,
1481    /// <p> The ARN of the report group associated with this report. </p>
1482    #[serde(rename = "reportGroupArn")]
1483    #[serde(skip_serializing_if = "Option::is_none")]
1484    pub report_group_arn: Option<String>,
1485    /// <p> The status of this report. </p>
1486    #[serde(rename = "status")]
1487    #[serde(skip_serializing_if = "Option::is_none")]
1488    pub status: Option<String>,
1489    /// <p> A <code>TestReportSummary</code> object that contains information about this test report. </p>
1490    #[serde(rename = "testSummary")]
1491    #[serde(skip_serializing_if = "Option::is_none")]
1492    pub test_summary: Option<TestReportSummary>,
1493    /// <p> A boolean that specifies if this report run is truncated. The list of test cases is truncated after the maximum number of test cases is reached. </p>
1494    #[serde(rename = "truncated")]
1495    #[serde(skip_serializing_if = "Option::is_none")]
1496    pub truncated: Option<bool>,
1497    /// <p> The type of the report that was run. </p>
1498    #[serde(rename = "type")]
1499    #[serde(skip_serializing_if = "Option::is_none")]
1500    pub type_: Option<String>,
1501}
1502
1503/// <p> Information about the location where the run of a report is exported. </p>
1504#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1505pub struct ReportExportConfig {
1506    /// <p><p> The export configuration type. Valid values are: </p> <ul> <li> <p> <code>S3</code>: The report results are exported to an S3 bucket. </p> </li> <li> <p> <code>NO_EXPORT</code>: The report results are not exported. </p> </li> </ul></p>
1507    #[serde(rename = "exportConfigType")]
1508    #[serde(skip_serializing_if = "Option::is_none")]
1509    pub export_config_type: Option<String>,
1510    /// <p> A <code>S3ReportExportConfig</code> object that contains information about the S3 bucket where the run of a report is exported. </p>
1511    #[serde(rename = "s3Destination")]
1512    #[serde(skip_serializing_if = "Option::is_none")]
1513    pub s_3_destination: Option<S3ReportExportConfig>,
1514}
1515
1516/// <p> A filter used to return reports with the status specified by the input <code>status</code> parameter. </p>
1517#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1518#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1519pub struct ReportFilter {
1520    /// <p> The status used to filter reports. You can filter using one status only. </p>
1521    #[serde(rename = "status")]
1522    #[serde(skip_serializing_if = "Option::is_none")]
1523    pub status: Option<String>,
1524}
1525
1526/// <p> A series of reports. Each report contains information about the results from running a series of test cases. You specify the test cases for a report group in the buildspec for a build project using one or more paths to the test case files. </p>
1527#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1528#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1529pub struct ReportGroup {
1530    /// <p> The ARN of a <code>ReportGroup</code>. </p>
1531    #[serde(rename = "arn")]
1532    #[serde(skip_serializing_if = "Option::is_none")]
1533    pub arn: Option<String>,
1534    /// <p> The date and time this <code>ReportGroup</code> was created. </p>
1535    #[serde(rename = "created")]
1536    #[serde(skip_serializing_if = "Option::is_none")]
1537    pub created: Option<f64>,
1538    /// <p> Information about the destination where the raw data of this <code>ReportGroup</code> is exported. </p>
1539    #[serde(rename = "exportConfig")]
1540    #[serde(skip_serializing_if = "Option::is_none")]
1541    pub export_config: Option<ReportExportConfig>,
1542    /// <p> The date and time this <code>ReportGroup</code> was last modified. </p>
1543    #[serde(rename = "lastModified")]
1544    #[serde(skip_serializing_if = "Option::is_none")]
1545    pub last_modified: Option<f64>,
1546    /// <p> The name of a <code>ReportGroup</code>. </p>
1547    #[serde(rename = "name")]
1548    #[serde(skip_serializing_if = "Option::is_none")]
1549    pub name: Option<String>,
1550    /// <p> A list of tag key and value pairs associated with this report group. </p> <p>These tags are available for use by AWS services that support AWS CodeBuild report group tags.</p>
1551    #[serde(rename = "tags")]
1552    #[serde(skip_serializing_if = "Option::is_none")]
1553    pub tags: Option<Vec<Tag>>,
1554    /// <p> The type of the <code>ReportGroup</code>. The one valid value is <code>TEST</code>. </p>
1555    #[serde(rename = "type")]
1556    #[serde(skip_serializing_if = "Option::is_none")]
1557    pub type_: Option<String>,
1558}
1559
1560/// <p> Information about S3 logs for a build project. </p>
1561#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1562pub struct S3LogsConfig {
1563    /// <p> Set to true if you do not want your S3 build log output encrypted. By default S3 build logs are encrypted. </p>
1564    #[serde(rename = "encryptionDisabled")]
1565    #[serde(skip_serializing_if = "Option::is_none")]
1566    pub encryption_disabled: Option<bool>,
1567    /// <p> The ARN of an S3 bucket and the path prefix for S3 logs. If your Amazon S3 bucket name is <code>my-bucket</code>, and your path prefix is <code>build-log</code>, then acceptable formats are <code>my-bucket/build-log</code> or <code>arn:aws:s3:::my-bucket/build-log</code>. </p>
1568    #[serde(rename = "location")]
1569    #[serde(skip_serializing_if = "Option::is_none")]
1570    pub location: Option<String>,
1571    /// <p><p>The current status of the S3 build logs. Valid values are:</p> <ul> <li> <p> <code>ENABLED</code>: S3 build logs are enabled for this build project.</p> </li> <li> <p> <code>DISABLED</code>: S3 build logs are not enabled for this build project.</p> </li> </ul></p>
1572    #[serde(rename = "status")]
1573    pub status: String,
1574}
1575
1576/// <p> Information about the S3 bucket where the raw data of a report are exported. </p>
1577#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1578pub struct S3ReportExportConfig {
1579    /// <p> The name of the S3 bucket where the raw data of a report are exported. </p>
1580    #[serde(rename = "bucket")]
1581    #[serde(skip_serializing_if = "Option::is_none")]
1582    pub bucket: Option<String>,
1583    /// <p> A boolean value that specifies if the results of a report are encrypted. </p>
1584    #[serde(rename = "encryptionDisabled")]
1585    #[serde(skip_serializing_if = "Option::is_none")]
1586    pub encryption_disabled: Option<bool>,
1587    /// <p> The encryption key for the report's encrypted raw data. </p>
1588    #[serde(rename = "encryptionKey")]
1589    #[serde(skip_serializing_if = "Option::is_none")]
1590    pub encryption_key: Option<String>,
1591    /// <p><p> The type of build output artifact to create. Valid values include: </p> <ul> <li> <p> <code>NONE</code>: AWS CodeBuild creates the raw data in the output bucket. This is the default if packaging is not specified. </p> </li> <li> <p> <code>ZIP</code>: AWS CodeBuild creates a ZIP file with the raw data in the output bucket. </p> </li> </ul></p>
1592    #[serde(rename = "packaging")]
1593    #[serde(skip_serializing_if = "Option::is_none")]
1594    pub packaging: Option<String>,
1595    /// <p> The path to the exported report's raw data results. </p>
1596    #[serde(rename = "path")]
1597    #[serde(skip_serializing_if = "Option::is_none")]
1598    pub path: Option<String>,
1599}
1600
1601/// <p>Information about the authorization settings for AWS CodeBuild to access the source code to be built.</p> <p>This information is for the AWS CodeBuild console's use only. Your code should not get or set this information directly.</p>
1602#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1603pub struct SourceAuth {
1604    /// <p>The resource value that applies to the specified authorization type.</p>
1605    #[serde(rename = "resource")]
1606    #[serde(skip_serializing_if = "Option::is_none")]
1607    pub resource: Option<String>,
1608    /// <p><note> <p> This data type is deprecated and is no longer accurate or used. </p> </note> <p>The authorization type to use. The only valid value is <code>OAUTH</code>, which represents the OAuth authorization type.</p></p>
1609    #[serde(rename = "type")]
1610    pub type_: String,
1611}
1612
1613/// <p> Information about the credentials for a GitHub, GitHub Enterprise, or Bitbucket repository. </p>
1614#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1615#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1616pub struct SourceCredentialsInfo {
1617    /// <p> The Amazon Resource Name (ARN) of the token. </p>
1618    #[serde(rename = "arn")]
1619    #[serde(skip_serializing_if = "Option::is_none")]
1620    pub arn: Option<String>,
1621    /// <p> The type of authentication used by the credentials. Valid options are OAUTH, BASIC_AUTH, or PERSONAL_ACCESS_TOKEN. </p>
1622    #[serde(rename = "authType")]
1623    #[serde(skip_serializing_if = "Option::is_none")]
1624    pub auth_type: Option<String>,
1625    /// <p> The type of source provider. The valid options are GITHUB, GITHUB_ENTERPRISE, or BITBUCKET. </p>
1626    #[serde(rename = "serverType")]
1627    #[serde(skip_serializing_if = "Option::is_none")]
1628    pub server_type: Option<String>,
1629}
1630
1631#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1632#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1633pub struct StartBuildInput {
1634    /// <p>Build output artifact settings that override, for this build only, the latest ones already defined in the build project.</p>
1635    #[serde(rename = "artifactsOverride")]
1636    #[serde(skip_serializing_if = "Option::is_none")]
1637    pub artifacts_override: Option<ProjectArtifacts>,
1638    /// <p>Contains information that defines how the build project reports the build status to the source provider. This option is only used when the source provider is <code>GITHUB</code>, <code>GITHUB_ENTERPRISE</code>, or <code>BITBUCKET</code>.</p>
1639    #[serde(rename = "buildStatusConfigOverride")]
1640    #[serde(skip_serializing_if = "Option::is_none")]
1641    pub build_status_config_override: Option<BuildStatusConfig>,
1642    /// <p>A buildspec file declaration that overrides, for this build only, the latest one already defined in the build project.</p> <p> If this value is set, it can be either an inline buildspec definition, the path to an alternate buildspec file relative to the value of the built-in <code>CODEBUILD_SRC_DIR</code> environment variable, or the path to an S3 bucket. The bucket must be in the same AWS Region as the build project. Specify the buildspec file using its ARN (for example, <code>arn:aws:s3:::my-codebuild-sample2/buildspec.yml</code>). If this value is not provided or is set to an empty string, the source code must contain a buildspec file in its root directory. For more information, see <a href="https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-name-storage">Buildspec File Name and Storage Location</a>. </p>
1643    #[serde(rename = "buildspecOverride")]
1644    #[serde(skip_serializing_if = "Option::is_none")]
1645    pub buildspec_override: Option<String>,
1646    /// <p>A ProjectCache object specified for this build that overrides the one defined in the build project.</p>
1647    #[serde(rename = "cacheOverride")]
1648    #[serde(skip_serializing_if = "Option::is_none")]
1649    pub cache_override: Option<ProjectCache>,
1650    /// <p>The name of a certificate for this build that overrides the one specified in the build project.</p>
1651    #[serde(rename = "certificateOverride")]
1652    #[serde(skip_serializing_if = "Option::is_none")]
1653    pub certificate_override: Option<String>,
1654    /// <p>The name of a compute type for this build that overrides the one specified in the build project.</p>
1655    #[serde(rename = "computeTypeOverride")]
1656    #[serde(skip_serializing_if = "Option::is_none")]
1657    pub compute_type_override: Option<String>,
1658    /// <p>The AWS Key Management Service (AWS KMS) customer master key (CMK) that overrides the one specified in the build project. The CMK key encrypts the build output artifacts.</p> <note> <p> You can use a cross-account KMS key to encrypt the build output artifacts if your service role has permission to that key. </p> </note> <p>You can specify either the Amazon Resource Name (ARN) of the CMK or, if available, the CMK's alias (using the format <code>alias/<i>alias-name</i> </code>).</p>
1659    #[serde(rename = "encryptionKeyOverride")]
1660    #[serde(skip_serializing_if = "Option::is_none")]
1661    pub encryption_key_override: Option<String>,
1662    /// <p>A container type for this build that overrides the one specified in the build project.</p>
1663    #[serde(rename = "environmentTypeOverride")]
1664    #[serde(skip_serializing_if = "Option::is_none")]
1665    pub environment_type_override: Option<String>,
1666    /// <p>A set of environment variables that overrides, for this build only, the latest ones already defined in the build project.</p>
1667    #[serde(rename = "environmentVariablesOverride")]
1668    #[serde(skip_serializing_if = "Option::is_none")]
1669    pub environment_variables_override: Option<Vec<EnvironmentVariable>>,
1670    /// <p>The user-defined depth of history, with a minimum value of 0, that overrides, for this build only, any previous depth of history defined in the build project.</p>
1671    #[serde(rename = "gitCloneDepthOverride")]
1672    #[serde(skip_serializing_if = "Option::is_none")]
1673    pub git_clone_depth_override: Option<i64>,
1674    /// <p> Information about the Git submodules configuration for this build of an AWS CodeBuild build project. </p>
1675    #[serde(rename = "gitSubmodulesConfigOverride")]
1676    #[serde(skip_serializing_if = "Option::is_none")]
1677    pub git_submodules_config_override: Option<GitSubmodulesConfig>,
1678    /// <p>A unique, case sensitive identifier you provide to ensure the idempotency of the StartBuild request. The token is included in the StartBuild request and is valid for 5 minutes. If you repeat the StartBuild request with the same token, but change a parameter, AWS CodeBuild returns a parameter mismatch error. </p>
1679    #[serde(rename = "idempotencyToken")]
1680    #[serde(skip_serializing_if = "Option::is_none")]
1681    pub idempotency_token: Option<String>,
1682    /// <p>The name of an image for this build that overrides the one specified in the build project.</p>
1683    #[serde(rename = "imageOverride")]
1684    #[serde(skip_serializing_if = "Option::is_none")]
1685    pub image_override: Option<String>,
1686    /// <p> The type of credentials AWS CodeBuild uses to pull images in your build. There are two valid values: </p> <ul> <li> <p> <code>CODEBUILD</code> specifies that AWS CodeBuild uses its own credentials. This requires that you modify your ECR repository policy to trust AWS CodeBuild's service principal.</p> </li> <li> <p> <code>SERVICE_ROLE</code> specifies that AWS CodeBuild uses your build project's service role. </p> </li> </ul> <p> When using a cross-account or private registry image, you must use SERVICE_ROLE credentials. When using an AWS CodeBuild curated image, you must use CODEBUILD credentials. </p>
1687    #[serde(rename = "imagePullCredentialsTypeOverride")]
1688    #[serde(skip_serializing_if = "Option::is_none")]
1689    pub image_pull_credentials_type_override: Option<String>,
1690    /// <p>Enable this flag to override the insecure SSL setting that is specified in the build project. The insecure SSL setting determines whether to ignore SSL warnings while connecting to the project source code. This override applies only if the build's source is GitHub Enterprise.</p>
1691    #[serde(rename = "insecureSslOverride")]
1692    #[serde(skip_serializing_if = "Option::is_none")]
1693    pub insecure_ssl_override: Option<bool>,
1694    /// <p> Log settings for this build that override the log settings defined in the build project. </p>
1695    #[serde(rename = "logsConfigOverride")]
1696    #[serde(skip_serializing_if = "Option::is_none")]
1697    pub logs_config_override: Option<LogsConfig>,
1698    /// <p>Enable this flag to override privileged mode in the build project.</p>
1699    #[serde(rename = "privilegedModeOverride")]
1700    #[serde(skip_serializing_if = "Option::is_none")]
1701    pub privileged_mode_override: Option<bool>,
1702    /// <p>The name of the AWS CodeBuild build project to start running a build.</p>
1703    #[serde(rename = "projectName")]
1704    pub project_name: String,
1705    /// <p> The number of minutes a build is allowed to be queued before it times out. </p>
1706    #[serde(rename = "queuedTimeoutInMinutesOverride")]
1707    #[serde(skip_serializing_if = "Option::is_none")]
1708    pub queued_timeout_in_minutes_override: Option<i64>,
1709    /// <p> The credentials for access to a private registry. </p>
1710    #[serde(rename = "registryCredentialOverride")]
1711    #[serde(skip_serializing_if = "Option::is_none")]
1712    pub registry_credential_override: Option<RegistryCredential>,
1713    /// <p><p> Set to true to report to your source provider the status of a build&#39;s start and completion. If you use this option with a source provider other than GitHub, GitHub Enterprise, or Bitbucket, an invalidInputException is thrown. </p> <note> <p> The status of a build triggered by a webhook is always reported to your source provider. </p> </note></p>
1714    #[serde(rename = "reportBuildStatusOverride")]
1715    #[serde(skip_serializing_if = "Option::is_none")]
1716    pub report_build_status_override: Option<bool>,
1717    /// <p> An array of <code>ProjectArtifacts</code> objects. </p>
1718    #[serde(rename = "secondaryArtifactsOverride")]
1719    #[serde(skip_serializing_if = "Option::is_none")]
1720    pub secondary_artifacts_override: Option<Vec<ProjectArtifacts>>,
1721    /// <p> An array of <code>ProjectSource</code> objects. </p>
1722    #[serde(rename = "secondarySourcesOverride")]
1723    #[serde(skip_serializing_if = "Option::is_none")]
1724    pub secondary_sources_override: Option<Vec<ProjectSource>>,
1725    /// <p> An array of <code>ProjectSourceVersion</code> objects that specify one or more versions of the project's secondary sources to be used for this build only. </p>
1726    #[serde(rename = "secondarySourcesVersionOverride")]
1727    #[serde(skip_serializing_if = "Option::is_none")]
1728    pub secondary_sources_version_override: Option<Vec<ProjectSourceVersion>>,
1729    /// <p>The name of a service role for this build that overrides the one specified in the build project.</p>
1730    #[serde(rename = "serviceRoleOverride")]
1731    #[serde(skip_serializing_if = "Option::is_none")]
1732    pub service_role_override: Option<String>,
1733    /// <p>An authorization type for this build that overrides the one defined in the build project. This override applies only if the build project's source is BitBucket or GitHub.</p>
1734    #[serde(rename = "sourceAuthOverride")]
1735    #[serde(skip_serializing_if = "Option::is_none")]
1736    pub source_auth_override: Option<SourceAuth>,
1737    /// <p>A location that overrides, for this build, the source location for the one defined in the build project.</p>
1738    #[serde(rename = "sourceLocationOverride")]
1739    #[serde(skip_serializing_if = "Option::is_none")]
1740    pub source_location_override: Option<String>,
1741    /// <p>A source input type, for this build, that overrides the source input defined in the build project.</p>
1742    #[serde(rename = "sourceTypeOverride")]
1743    #[serde(skip_serializing_if = "Option::is_none")]
1744    pub source_type_override: Option<String>,
1745    /// <p>A version of the build input to be built, for this build only. If not specified, the latest version is used. If specified, must be one of:</p> <ul> <li> <p>For AWS CodeCommit: the commit ID, branch, or Git tag to use.</p> </li> <li> <p>For GitHub: the commit ID, pull request ID, branch name, or tag name that corresponds to the version of the source code you want to build. If a pull request ID is specified, it must use the format <code>pr/pull-request-ID</code> (for example <code>pr/25</code>). If a branch name is specified, the branch's HEAD commit ID is used. If not specified, the default branch's HEAD commit ID is used.</p> </li> <li> <p>For Bitbucket: the commit ID, branch name, or tag name that corresponds to the version of the source code you want to build. If a branch name is specified, the branch's HEAD commit ID is used. If not specified, the default branch's HEAD commit ID is used.</p> </li> <li> <p>For Amazon Simple Storage Service (Amazon S3): the version ID of the object that represents the build input ZIP file to use.</p> </li> </ul> <p> If <code>sourceVersion</code> is specified at the project level, then this <code>sourceVersion</code> (at the build level) takes precedence. </p> <p> For more information, see <a href="https://docs.aws.amazon.com/codebuild/latest/userguide/sample-source-version.html">Source Version Sample with CodeBuild</a> in the <i>AWS CodeBuild User Guide</i>. </p>
1746    #[serde(rename = "sourceVersion")]
1747    #[serde(skip_serializing_if = "Option::is_none")]
1748    pub source_version: Option<String>,
1749    /// <p>The number of build timeout minutes, from 5 to 480 (8 hours), that overrides, for this build only, the latest setting already defined in the build project.</p>
1750    #[serde(rename = "timeoutInMinutesOverride")]
1751    #[serde(skip_serializing_if = "Option::is_none")]
1752    pub timeout_in_minutes_override: Option<i64>,
1753}
1754
1755#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1756#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1757pub struct StartBuildOutput {
1758    /// <p>Information about the build to be run.</p>
1759    #[serde(rename = "build")]
1760    #[serde(skip_serializing_if = "Option::is_none")]
1761    pub build: Option<Build>,
1762}
1763
1764#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1765#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1766pub struct StopBuildInput {
1767    /// <p>The ID of the build.</p>
1768    #[serde(rename = "id")]
1769    pub id: String,
1770}
1771
1772#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1773#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1774pub struct StopBuildOutput {
1775    /// <p>Information about the build.</p>
1776    #[serde(rename = "build")]
1777    #[serde(skip_serializing_if = "Option::is_none")]
1778    pub build: Option<Build>,
1779}
1780
1781/// <p>A tag, consisting of a key and a value.</p> <p>This tag is available for use by AWS services that support tags in AWS CodeBuild.</p>
1782#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1783pub struct Tag {
1784    /// <p>The tag's key.</p>
1785    #[serde(rename = "key")]
1786    #[serde(skip_serializing_if = "Option::is_none")]
1787    pub key: Option<String>,
1788    /// <p>The tag's value.</p>
1789    #[serde(rename = "value")]
1790    #[serde(skip_serializing_if = "Option::is_none")]
1791    pub value: Option<String>,
1792}
1793
1794/// <p> Information about a test case created using a framework such as NUnit or Cucumber. A test case might be a unit test or a configuration test. </p>
1795#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1796#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1797pub struct TestCase {
1798    /// <p> The number of nanoseconds it took to run this test case. </p>
1799    #[serde(rename = "durationInNanoSeconds")]
1800    #[serde(skip_serializing_if = "Option::is_none")]
1801    pub duration_in_nano_seconds: Option<i64>,
1802    /// <p> The date and time a test case expires. A test case expires 30 days after it is created. An expired test case is not available to view in CodeBuild. </p>
1803    #[serde(rename = "expired")]
1804    #[serde(skip_serializing_if = "Option::is_none")]
1805    pub expired: Option<f64>,
1806    /// <p> A message associated with a test case. For example, an error message or stack trace. </p>
1807    #[serde(rename = "message")]
1808    #[serde(skip_serializing_if = "Option::is_none")]
1809    pub message: Option<String>,
1810    /// <p> The name of the test case. </p>
1811    #[serde(rename = "name")]
1812    #[serde(skip_serializing_if = "Option::is_none")]
1813    pub name: Option<String>,
1814    /// <p> A string that is applied to a series of related test cases. CodeBuild generates the prefix. The prefix depends on the framework used to generate the tests. </p>
1815    #[serde(rename = "prefix")]
1816    #[serde(skip_serializing_if = "Option::is_none")]
1817    pub prefix: Option<String>,
1818    /// <p> The ARN of the report to which the test case belongs. </p>
1819    #[serde(rename = "reportArn")]
1820    #[serde(skip_serializing_if = "Option::is_none")]
1821    pub report_arn: Option<String>,
1822    /// <p> The status returned by the test case after it was run. Valid statuses are <code>SUCCEEDED</code>, <code>FAILED</code>, <code>ERROR</code>, <code>SKIPPED</code>, and <code>UNKNOWN</code>. </p>
1823    #[serde(rename = "status")]
1824    #[serde(skip_serializing_if = "Option::is_none")]
1825    pub status: Option<String>,
1826    /// <p> The path to the raw data file that contains the test result. </p>
1827    #[serde(rename = "testRawDataPath")]
1828    #[serde(skip_serializing_if = "Option::is_none")]
1829    pub test_raw_data_path: Option<String>,
1830}
1831
1832/// <p> A filter used to return specific types of test cases. </p>
1833#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1834#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1835pub struct TestCaseFilter {
1836    /// <p> The status used to filter test cases. Valid statuses are <code>SUCCEEDED</code>, <code>FAILED</code>, <code>ERROR</code>, <code>SKIPPED</code>, and <code>UNKNOWN</code>. A <code>TestCaseFilter</code> can have one status. </p>
1837    #[serde(rename = "status")]
1838    #[serde(skip_serializing_if = "Option::is_none")]
1839    pub status: Option<String>,
1840}
1841
1842/// <p> Information about a test report. </p>
1843#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1844#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1845pub struct TestReportSummary {
1846    /// <p> The number of nanoseconds it took to run all of the test cases in this report. </p>
1847    #[serde(rename = "durationInNanoSeconds")]
1848    pub duration_in_nano_seconds: i64,
1849    /// <p> A map that contains the number of each type of status returned by the test results in this <code>TestReportSummary</code>. </p>
1850    #[serde(rename = "statusCounts")]
1851    pub status_counts: ::std::collections::HashMap<String, i64>,
1852    /// <p> The number of test cases in this <code>TestReportSummary</code>. The total includes truncated test cases. </p>
1853    #[serde(rename = "total")]
1854    pub total: i64,
1855}
1856
1857#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1858#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1859pub struct UpdateProjectInput {
1860    /// <p>Information to be changed about the build output artifacts for the build project.</p>
1861    #[serde(rename = "artifacts")]
1862    #[serde(skip_serializing_if = "Option::is_none")]
1863    pub artifacts: Option<ProjectArtifacts>,
1864    /// <p>Set this to true to generate a publicly accessible URL for your project's build badge.</p>
1865    #[serde(rename = "badgeEnabled")]
1866    #[serde(skip_serializing_if = "Option::is_none")]
1867    pub badge_enabled: Option<bool>,
1868    /// <p>Stores recently used information so that it can be quickly accessed at a later time.</p>
1869    #[serde(rename = "cache")]
1870    #[serde(skip_serializing_if = "Option::is_none")]
1871    pub cache: Option<ProjectCache>,
1872    /// <p>A new or replacement description of the build project.</p>
1873    #[serde(rename = "description")]
1874    #[serde(skip_serializing_if = "Option::is_none")]
1875    pub description: Option<String>,
1876    /// <p>The AWS Key Management Service (AWS KMS) customer master key (CMK) to be used for encrypting the build output artifacts.</p> <note> <p> You can use a cross-account KMS key to encrypt the build output artifacts if your service role has permission to that key. </p> </note> <p>You can specify either the Amazon Resource Name (ARN) of the CMK or, if available, the CMK's alias (using the format <code>alias/<i>alias-name</i> </code>).</p>
1877    #[serde(rename = "encryptionKey")]
1878    #[serde(skip_serializing_if = "Option::is_none")]
1879    pub encryption_key: Option<String>,
1880    /// <p>Information to be changed about the build environment for the build project.</p>
1881    #[serde(rename = "environment")]
1882    #[serde(skip_serializing_if = "Option::is_none")]
1883    pub environment: Option<ProjectEnvironment>,
1884    /// <p> An array of <code>ProjectFileSystemLocation</code> objects for a CodeBuild build project. A <code>ProjectFileSystemLocation</code> object specifies the <code>identifier</code>, <code>location</code>, <code>mountOptions</code>, <code>mountPoint</code>, and <code>type</code> of a file system created using Amazon Elastic File System. </p>
1885    #[serde(rename = "fileSystemLocations")]
1886    #[serde(skip_serializing_if = "Option::is_none")]
1887    pub file_system_locations: Option<Vec<ProjectFileSystemLocation>>,
1888    /// <p> Information about logs for the build project. A project can create logs in Amazon CloudWatch Logs, logs in an S3 bucket, or both. </p>
1889    #[serde(rename = "logsConfig")]
1890    #[serde(skip_serializing_if = "Option::is_none")]
1891    pub logs_config: Option<LogsConfig>,
1892    /// <p><p>The name of the build project.</p> <note> <p>You cannot change a build project&#39;s name.</p> </note></p>
1893    #[serde(rename = "name")]
1894    pub name: String,
1895    /// <p> The number of minutes a build is allowed to be queued before it times out. </p>
1896    #[serde(rename = "queuedTimeoutInMinutes")]
1897    #[serde(skip_serializing_if = "Option::is_none")]
1898    pub queued_timeout_in_minutes: Option<i64>,
1899    /// <p> An array of <code>ProjectSource</code> objects. </p>
1900    #[serde(rename = "secondaryArtifacts")]
1901    #[serde(skip_serializing_if = "Option::is_none")]
1902    pub secondary_artifacts: Option<Vec<ProjectArtifacts>>,
1903    /// <p> An array of <code>ProjectSourceVersion</code> objects. If <code>secondarySourceVersions</code> is specified at the build level, then they take over these <code>secondarySourceVersions</code> (at the project level). </p>
1904    #[serde(rename = "secondarySourceVersions")]
1905    #[serde(skip_serializing_if = "Option::is_none")]
1906    pub secondary_source_versions: Option<Vec<ProjectSourceVersion>>,
1907    /// <p> An array of <code>ProjectSource</code> objects. </p>
1908    #[serde(rename = "secondarySources")]
1909    #[serde(skip_serializing_if = "Option::is_none")]
1910    pub secondary_sources: Option<Vec<ProjectSource>>,
1911    /// <p>The replacement ARN of the AWS Identity and Access Management (IAM) role that enables AWS CodeBuild to interact with dependent AWS services on behalf of the AWS account.</p>
1912    #[serde(rename = "serviceRole")]
1913    #[serde(skip_serializing_if = "Option::is_none")]
1914    pub service_role: Option<String>,
1915    /// <p>Information to be changed about the build input source code for the build project.</p>
1916    #[serde(rename = "source")]
1917    #[serde(skip_serializing_if = "Option::is_none")]
1918    pub source: Option<ProjectSource>,
1919    /// <p> A version of the build input to be built for this project. If not specified, the latest version is used. If specified, it must be one of: </p> <ul> <li> <p>For AWS CodeCommit: the commit ID, branch, or Git tag to use.</p> </li> <li> <p>For GitHub: the commit ID, pull request ID, branch name, or tag name that corresponds to the version of the source code you want to build. If a pull request ID is specified, it must use the format <code>pr/pull-request-ID</code> (for example <code>pr/25</code>). If a branch name is specified, the branch's HEAD commit ID is used. If not specified, the default branch's HEAD commit ID is used.</p> </li> <li> <p>For Bitbucket: the commit ID, branch name, or tag name that corresponds to the version of the source code you want to build. If a branch name is specified, the branch's HEAD commit ID is used. If not specified, the default branch's HEAD commit ID is used.</p> </li> <li> <p>For Amazon Simple Storage Service (Amazon S3): the version ID of the object that represents the build input ZIP file to use.</p> </li> </ul> <p> If <code>sourceVersion</code> is specified at the build level, then that version takes precedence over this <code>sourceVersion</code> (at the project level). </p> <p> For more information, see <a href="https://docs.aws.amazon.com/codebuild/latest/userguide/sample-source-version.html">Source Version Sample with CodeBuild</a> in the <i>AWS CodeBuild User Guide</i>. </p>
1920    #[serde(rename = "sourceVersion")]
1921    #[serde(skip_serializing_if = "Option::is_none")]
1922    pub source_version: Option<String>,
1923    /// <p>An updated list of tag key and value pairs associated with this build project.</p> <p>These tags are available for use by AWS services that support AWS CodeBuild build project tags.</p>
1924    #[serde(rename = "tags")]
1925    #[serde(skip_serializing_if = "Option::is_none")]
1926    pub tags: Option<Vec<Tag>>,
1927    /// <p>The replacement value in minutes, from 5 to 480 (8 hours), for AWS CodeBuild to wait before timing out any related build that did not get marked as completed.</p>
1928    #[serde(rename = "timeoutInMinutes")]
1929    #[serde(skip_serializing_if = "Option::is_none")]
1930    pub timeout_in_minutes: Option<i64>,
1931    /// <p>VpcConfig enables AWS CodeBuild to access resources in an Amazon VPC.</p>
1932    #[serde(rename = "vpcConfig")]
1933    #[serde(skip_serializing_if = "Option::is_none")]
1934    pub vpc_config: Option<VpcConfig>,
1935}
1936
1937#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1938#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1939pub struct UpdateProjectOutput {
1940    /// <p>Information about the build project that was changed.</p>
1941    #[serde(rename = "project")]
1942    #[serde(skip_serializing_if = "Option::is_none")]
1943    pub project: Option<Project>,
1944}
1945
1946#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1947#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1948pub struct UpdateReportGroupInput {
1949    /// <p> The ARN of the report group to update. </p>
1950    #[serde(rename = "arn")]
1951    pub arn: String,
1952    /// <p><p> Used to specify an updated export type. Valid values are: </p> <ul> <li> <p> <code>S3</code>: The report results are exported to an S3 bucket. </p> </li> <li> <p> <code>NO_EXPORT</code>: The report results are not exported. </p> </li> </ul></p>
1953    #[serde(rename = "exportConfig")]
1954    #[serde(skip_serializing_if = "Option::is_none")]
1955    pub export_config: Option<ReportExportConfig>,
1956    /// <p> An updated list of tag key and value pairs associated with this report group. </p> <p>These tags are available for use by AWS services that support AWS CodeBuild report group tags.</p>
1957    #[serde(rename = "tags")]
1958    #[serde(skip_serializing_if = "Option::is_none")]
1959    pub tags: Option<Vec<Tag>>,
1960}
1961
1962#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1963#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1964pub struct UpdateReportGroupOutput {
1965    /// <p> Information about the updated report group. </p>
1966    #[serde(rename = "reportGroup")]
1967    #[serde(skip_serializing_if = "Option::is_none")]
1968    pub report_group: Option<ReportGroup>,
1969}
1970
1971#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1972#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1973pub struct UpdateWebhookInput {
1974    /// <p><p>A regular expression used to determine which repository branches are built when a webhook is triggered. If the name of a branch matches the regular expression, then it is built. If <code>branchFilter</code> is empty, then all branches are built.</p> <note> <p> It is recommended that you use <code>filterGroups</code> instead of <code>branchFilter</code>. </p> </note></p>
1975    #[serde(rename = "branchFilter")]
1976    #[serde(skip_serializing_if = "Option::is_none")]
1977    pub branch_filter: Option<String>,
1978    /// <p> An array of arrays of <code>WebhookFilter</code> objects used to determine if a webhook event can trigger a build. A filter group must contain at least one <code>EVENT</code> <code>WebhookFilter</code>. </p>
1979    #[serde(rename = "filterGroups")]
1980    #[serde(skip_serializing_if = "Option::is_none")]
1981    pub filter_groups: Option<Vec<Vec<WebhookFilter>>>,
1982    /// <p>The name of the AWS CodeBuild project.</p>
1983    #[serde(rename = "projectName")]
1984    pub project_name: String,
1985    /// <p> A boolean value that specifies whether the associated GitHub repository's secret token should be updated. If you use Bitbucket for your repository, <code>rotateSecret</code> is ignored. </p>
1986    #[serde(rename = "rotateSecret")]
1987    #[serde(skip_serializing_if = "Option::is_none")]
1988    pub rotate_secret: Option<bool>,
1989}
1990
1991#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1992#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1993pub struct UpdateWebhookOutput {
1994    /// <p> Information about a repository's webhook that is associated with a project in AWS CodeBuild. </p>
1995    #[serde(rename = "webhook")]
1996    #[serde(skip_serializing_if = "Option::is_none")]
1997    pub webhook: Option<Webhook>,
1998}
1999
2000/// <p>Information about the VPC configuration that AWS CodeBuild accesses.</p>
2001#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2002pub struct VpcConfig {
2003    /// <p>A list of one or more security groups IDs in your Amazon VPC.</p>
2004    #[serde(rename = "securityGroupIds")]
2005    #[serde(skip_serializing_if = "Option::is_none")]
2006    pub security_group_ids: Option<Vec<String>>,
2007    /// <p>A list of one or more subnet IDs in your Amazon VPC.</p>
2008    #[serde(rename = "subnets")]
2009    #[serde(skip_serializing_if = "Option::is_none")]
2010    pub subnets: Option<Vec<String>>,
2011    /// <p>The ID of the Amazon VPC.</p>
2012    #[serde(rename = "vpcId")]
2013    #[serde(skip_serializing_if = "Option::is_none")]
2014    pub vpc_id: Option<String>,
2015}
2016
2017/// <p>Information about a webhook that connects repository events to a build project in AWS CodeBuild.</p>
2018#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2019#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2020pub struct Webhook {
2021    /// <p><p>A regular expression used to determine which repository branches are built when a webhook is triggered. If the name of a branch matches the regular expression, then it is built. If <code>branchFilter</code> is empty, then all branches are built.</p> <note> <p> It is recommended that you use <code>filterGroups</code> instead of <code>branchFilter</code>. </p> </note></p>
2022    #[serde(rename = "branchFilter")]
2023    #[serde(skip_serializing_if = "Option::is_none")]
2024    pub branch_filter: Option<String>,
2025    /// <p> An array of arrays of <code>WebhookFilter</code> objects used to determine which webhooks are triggered. At least one <code>WebhookFilter</code> in the array must specify <code>EVENT</code> as its <code>type</code>. </p> <p> For a build to be triggered, at least one filter group in the <code>filterGroups</code> array must pass. For a filter group to pass, each of its filters must pass. </p>
2026    #[serde(rename = "filterGroups")]
2027    #[serde(skip_serializing_if = "Option::is_none")]
2028    pub filter_groups: Option<Vec<Vec<WebhookFilter>>>,
2029    /// <p> A timestamp that indicates the last time a repository's secret token was modified. </p>
2030    #[serde(rename = "lastModifiedSecret")]
2031    #[serde(skip_serializing_if = "Option::is_none")]
2032    pub last_modified_secret: Option<f64>,
2033    /// <p> The AWS CodeBuild endpoint where webhook events are sent.</p>
2034    #[serde(rename = "payloadUrl")]
2035    #[serde(skip_serializing_if = "Option::is_none")]
2036    pub payload_url: Option<String>,
2037    /// <p><p> The secret token of the associated repository. </p> <note> <p> A Bitbucket webhook does not support <code>secret</code>. </p> </note></p>
2038    #[serde(rename = "secret")]
2039    #[serde(skip_serializing_if = "Option::is_none")]
2040    pub secret: Option<String>,
2041    /// <p>The URL to the webhook.</p>
2042    #[serde(rename = "url")]
2043    #[serde(skip_serializing_if = "Option::is_none")]
2044    pub url: Option<String>,
2045}
2046
2047/// <p> A filter used to determine which webhooks trigger a build. </p>
2048#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2049pub struct WebhookFilter {
2050    /// <p> Used to indicate that the <code>pattern</code> determines which webhook events do not trigger a build. If true, then a webhook event that does not match the <code>pattern</code> triggers a build. If false, then a webhook event that matches the <code>pattern</code> triggers a build. </p>
2051    #[serde(rename = "excludeMatchedPattern")]
2052    #[serde(skip_serializing_if = "Option::is_none")]
2053    pub exclude_matched_pattern: Option<bool>,
2054    /// <p> For a <code>WebHookFilter</code> that uses <code>EVENT</code> type, a comma-separated string that specifies one or more events. For example, the webhook filter <code>PUSH, PULL_REQUEST_CREATED, PULL_REQUEST_UPDATED</code> allows all push, pull request created, and pull request updated events to trigger a build. </p> <p> For a <code>WebHookFilter</code> that uses any of the other filter types, a regular expression pattern. For example, a <code>WebHookFilter</code> that uses <code>HEAD_REF</code> for its <code>type</code> and the pattern <code>^refs/heads/</code> triggers a build when the head reference is a branch with a reference name <code>refs/heads/branch-name</code>. </p>
2055    #[serde(rename = "pattern")]
2056    pub pattern: String,
2057    /// <p><p> The type of webhook filter. There are six webhook filter types: <code>EVENT</code>, <code>ACTOR<em>ACCOUNT</em>ID</code>, <code>HEAD<em>REF</code>, <code>BASE</em>REF</code>, <code>FILE<em>PATH</code>, and <code>COMMIT</em>MESSAGE</code>. </p> <dl> <dt> EVENT </dt> <dd> <p> A webhook event triggers a build when the provided <code>pattern</code> matches one of five event types: <code>PUSH</code>, <code>PULL<em>REQUEST</em>CREATED</code>, <code>PULL<em>REQUEST</em>UPDATED</code>, <code>PULL<em>REQUEST</em>REOPENED</code>, and <code>PULL<em>REQUEST</em>MERGED</code>. The <code>EVENT</code> patterns are specified as a comma-separated string. For example, <code>PUSH, PULL<em>REQUEST</em>CREATED, PULL<em>REQUEST</em>UPDATED</code> filters all push, pull request created, and pull request updated events. </p> <note> <p> The <code>PULL<em>REQUEST</em>REOPENED</code> works with GitHub and GitHub Enterprise only. </p> </note> </dd> <dt> ACTOR<em>ACCOUNT</em>ID </dt> <dd> <p> A webhook event triggers a build when a GitHub, GitHub Enterprise, or Bitbucket account ID matches the regular expression <code>pattern</code>. </p> </dd> <dt> HEAD<em>REF </dt> <dd> <p> A webhook event triggers a build when the head reference matches the regular expression <code>pattern</code>. For example, <code>refs/heads/branch-name</code> and <code>refs/tags/tag-name</code>. </p> <p> Works with GitHub and GitHub Enterprise push, GitHub and GitHub Enterprise pull request, Bitbucket push, and Bitbucket pull request events. </p> </dd> <dt> BASE</em>REF </dt> <dd> <p> A webhook event triggers a build when the base reference matches the regular expression <code>pattern</code>. For example, <code>refs/heads/branch-name</code>. </p> <note> <p> Works with pull request events only. </p> </note> </dd> <dt> FILE<em>PATH </dt> <dd> <p> A webhook triggers a build when the path of a changed file matches the regular expression <code>pattern</code>. </p> <note> <p> Works with GitHub and Bitbucket events push and pull requests events. Also works with GitHub Enterprise push events, but does not work with GitHub Enterprise pull request events. </p> </note> </dd> <dt>COMMIT</em>MESSAGE</dt> <dd> <p>A webhook triggers a build when the head commit message matches the regular expression <code>pattern</code>.</p> <note> <p> Works with GitHub and Bitbucket events push and pull requests events. Also works with GitHub Enterprise push events, but does not work with GitHub Enterprise pull request events. </p> </note> </dd> </dl></p>
2058    #[serde(rename = "type")]
2059    pub type_: String,
2060}
2061
2062/// Errors returned by BatchDeleteBuilds
2063#[derive(Debug, PartialEq)]
2064pub enum BatchDeleteBuildsError {
2065    /// <p>The input value that was provided is not valid.</p>
2066    InvalidInput(String),
2067}
2068
2069impl BatchDeleteBuildsError {
2070    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<BatchDeleteBuildsError> {
2071        if let Some(err) = proto::json::Error::parse(&res) {
2072            match err.typ.as_str() {
2073                "InvalidInputException" => {
2074                    return RusotoError::Service(BatchDeleteBuildsError::InvalidInput(err.msg))
2075                }
2076                "ValidationException" => return RusotoError::Validation(err.msg),
2077                _ => {}
2078            }
2079        }
2080        RusotoError::Unknown(res)
2081    }
2082}
2083impl fmt::Display for BatchDeleteBuildsError {
2084    #[allow(unused_variables)]
2085    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2086        match *self {
2087            BatchDeleteBuildsError::InvalidInput(ref cause) => write!(f, "{}", cause),
2088        }
2089    }
2090}
2091impl Error for BatchDeleteBuildsError {}
2092/// Errors returned by BatchGetBuilds
2093#[derive(Debug, PartialEq)]
2094pub enum BatchGetBuildsError {
2095    /// <p>The input value that was provided is not valid.</p>
2096    InvalidInput(String),
2097}
2098
2099impl BatchGetBuildsError {
2100    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<BatchGetBuildsError> {
2101        if let Some(err) = proto::json::Error::parse(&res) {
2102            match err.typ.as_str() {
2103                "InvalidInputException" => {
2104                    return RusotoError::Service(BatchGetBuildsError::InvalidInput(err.msg))
2105                }
2106                "ValidationException" => return RusotoError::Validation(err.msg),
2107                _ => {}
2108            }
2109        }
2110        RusotoError::Unknown(res)
2111    }
2112}
2113impl fmt::Display for BatchGetBuildsError {
2114    #[allow(unused_variables)]
2115    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2116        match *self {
2117            BatchGetBuildsError::InvalidInput(ref cause) => write!(f, "{}", cause),
2118        }
2119    }
2120}
2121impl Error for BatchGetBuildsError {}
2122/// Errors returned by BatchGetProjects
2123#[derive(Debug, PartialEq)]
2124pub enum BatchGetProjectsError {
2125    /// <p>The input value that was provided is not valid.</p>
2126    InvalidInput(String),
2127}
2128
2129impl BatchGetProjectsError {
2130    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<BatchGetProjectsError> {
2131        if let Some(err) = proto::json::Error::parse(&res) {
2132            match err.typ.as_str() {
2133                "InvalidInputException" => {
2134                    return RusotoError::Service(BatchGetProjectsError::InvalidInput(err.msg))
2135                }
2136                "ValidationException" => return RusotoError::Validation(err.msg),
2137                _ => {}
2138            }
2139        }
2140        RusotoError::Unknown(res)
2141    }
2142}
2143impl fmt::Display for BatchGetProjectsError {
2144    #[allow(unused_variables)]
2145    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2146        match *self {
2147            BatchGetProjectsError::InvalidInput(ref cause) => write!(f, "{}", cause),
2148        }
2149    }
2150}
2151impl Error for BatchGetProjectsError {}
2152/// Errors returned by BatchGetReportGroups
2153#[derive(Debug, PartialEq)]
2154pub enum BatchGetReportGroupsError {
2155    /// <p>The input value that was provided is not valid.</p>
2156    InvalidInput(String),
2157}
2158
2159impl BatchGetReportGroupsError {
2160    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<BatchGetReportGroupsError> {
2161        if let Some(err) = proto::json::Error::parse(&res) {
2162            match err.typ.as_str() {
2163                "InvalidInputException" => {
2164                    return RusotoError::Service(BatchGetReportGroupsError::InvalidInput(err.msg))
2165                }
2166                "ValidationException" => return RusotoError::Validation(err.msg),
2167                _ => {}
2168            }
2169        }
2170        RusotoError::Unknown(res)
2171    }
2172}
2173impl fmt::Display for BatchGetReportGroupsError {
2174    #[allow(unused_variables)]
2175    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2176        match *self {
2177            BatchGetReportGroupsError::InvalidInput(ref cause) => write!(f, "{}", cause),
2178        }
2179    }
2180}
2181impl Error for BatchGetReportGroupsError {}
2182/// Errors returned by BatchGetReports
2183#[derive(Debug, PartialEq)]
2184pub enum BatchGetReportsError {
2185    /// <p>The input value that was provided is not valid.</p>
2186    InvalidInput(String),
2187}
2188
2189impl BatchGetReportsError {
2190    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<BatchGetReportsError> {
2191        if let Some(err) = proto::json::Error::parse(&res) {
2192            match err.typ.as_str() {
2193                "InvalidInputException" => {
2194                    return RusotoError::Service(BatchGetReportsError::InvalidInput(err.msg))
2195                }
2196                "ValidationException" => return RusotoError::Validation(err.msg),
2197                _ => {}
2198            }
2199        }
2200        RusotoError::Unknown(res)
2201    }
2202}
2203impl fmt::Display for BatchGetReportsError {
2204    #[allow(unused_variables)]
2205    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2206        match *self {
2207            BatchGetReportsError::InvalidInput(ref cause) => write!(f, "{}", cause),
2208        }
2209    }
2210}
2211impl Error for BatchGetReportsError {}
2212/// Errors returned by CreateProject
2213#[derive(Debug, PartialEq)]
2214pub enum CreateProjectError {
2215    /// <p>An AWS service limit was exceeded for the calling AWS account.</p>
2216    AccountLimitExceeded(String),
2217    /// <p>The input value that was provided is not valid.</p>
2218    InvalidInput(String),
2219    /// <p>The specified AWS resource cannot be created, because an AWS resource with the same settings already exists.</p>
2220    ResourceAlreadyExists(String),
2221}
2222
2223impl CreateProjectError {
2224    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateProjectError> {
2225        if let Some(err) = proto::json::Error::parse(&res) {
2226            match err.typ.as_str() {
2227                "AccountLimitExceededException" => {
2228                    return RusotoError::Service(CreateProjectError::AccountLimitExceeded(err.msg))
2229                }
2230                "InvalidInputException" => {
2231                    return RusotoError::Service(CreateProjectError::InvalidInput(err.msg))
2232                }
2233                "ResourceAlreadyExistsException" => {
2234                    return RusotoError::Service(CreateProjectError::ResourceAlreadyExists(err.msg))
2235                }
2236                "ValidationException" => return RusotoError::Validation(err.msg),
2237                _ => {}
2238            }
2239        }
2240        RusotoError::Unknown(res)
2241    }
2242}
2243impl fmt::Display for CreateProjectError {
2244    #[allow(unused_variables)]
2245    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2246        match *self {
2247            CreateProjectError::AccountLimitExceeded(ref cause) => write!(f, "{}", cause),
2248            CreateProjectError::InvalidInput(ref cause) => write!(f, "{}", cause),
2249            CreateProjectError::ResourceAlreadyExists(ref cause) => write!(f, "{}", cause),
2250        }
2251    }
2252}
2253impl Error for CreateProjectError {}
2254/// Errors returned by CreateReportGroup
2255#[derive(Debug, PartialEq)]
2256pub enum CreateReportGroupError {
2257    /// <p>An AWS service limit was exceeded for the calling AWS account.</p>
2258    AccountLimitExceeded(String),
2259    /// <p>The input value that was provided is not valid.</p>
2260    InvalidInput(String),
2261    /// <p>The specified AWS resource cannot be created, because an AWS resource with the same settings already exists.</p>
2262    ResourceAlreadyExists(String),
2263}
2264
2265impl CreateReportGroupError {
2266    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateReportGroupError> {
2267        if let Some(err) = proto::json::Error::parse(&res) {
2268            match err.typ.as_str() {
2269                "AccountLimitExceededException" => {
2270                    return RusotoError::Service(CreateReportGroupError::AccountLimitExceeded(
2271                        err.msg,
2272                    ))
2273                }
2274                "InvalidInputException" => {
2275                    return RusotoError::Service(CreateReportGroupError::InvalidInput(err.msg))
2276                }
2277                "ResourceAlreadyExistsException" => {
2278                    return RusotoError::Service(CreateReportGroupError::ResourceAlreadyExists(
2279                        err.msg,
2280                    ))
2281                }
2282                "ValidationException" => return RusotoError::Validation(err.msg),
2283                _ => {}
2284            }
2285        }
2286        RusotoError::Unknown(res)
2287    }
2288}
2289impl fmt::Display for CreateReportGroupError {
2290    #[allow(unused_variables)]
2291    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2292        match *self {
2293            CreateReportGroupError::AccountLimitExceeded(ref cause) => write!(f, "{}", cause),
2294            CreateReportGroupError::InvalidInput(ref cause) => write!(f, "{}", cause),
2295            CreateReportGroupError::ResourceAlreadyExists(ref cause) => write!(f, "{}", cause),
2296        }
2297    }
2298}
2299impl Error for CreateReportGroupError {}
2300/// Errors returned by CreateWebhook
2301#[derive(Debug, PartialEq)]
2302pub enum CreateWebhookError {
2303    /// <p>The input value that was provided is not valid.</p>
2304    InvalidInput(String),
2305    /// <p>There was a problem with the underlying OAuth provider.</p>
2306    OAuthProvider(String),
2307    /// <p>The specified AWS resource cannot be created, because an AWS resource with the same settings already exists.</p>
2308    ResourceAlreadyExists(String),
2309    /// <p>The specified AWS resource cannot be found.</p>
2310    ResourceNotFound(String),
2311}
2312
2313impl CreateWebhookError {
2314    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateWebhookError> {
2315        if let Some(err) = proto::json::Error::parse(&res) {
2316            match err.typ.as_str() {
2317                "InvalidInputException" => {
2318                    return RusotoError::Service(CreateWebhookError::InvalidInput(err.msg))
2319                }
2320                "OAuthProviderException" => {
2321                    return RusotoError::Service(CreateWebhookError::OAuthProvider(err.msg))
2322                }
2323                "ResourceAlreadyExistsException" => {
2324                    return RusotoError::Service(CreateWebhookError::ResourceAlreadyExists(err.msg))
2325                }
2326                "ResourceNotFoundException" => {
2327                    return RusotoError::Service(CreateWebhookError::ResourceNotFound(err.msg))
2328                }
2329                "ValidationException" => return RusotoError::Validation(err.msg),
2330                _ => {}
2331            }
2332        }
2333        RusotoError::Unknown(res)
2334    }
2335}
2336impl fmt::Display for CreateWebhookError {
2337    #[allow(unused_variables)]
2338    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2339        match *self {
2340            CreateWebhookError::InvalidInput(ref cause) => write!(f, "{}", cause),
2341            CreateWebhookError::OAuthProvider(ref cause) => write!(f, "{}", cause),
2342            CreateWebhookError::ResourceAlreadyExists(ref cause) => write!(f, "{}", cause),
2343            CreateWebhookError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2344        }
2345    }
2346}
2347impl Error for CreateWebhookError {}
2348/// Errors returned by DeleteProject
2349#[derive(Debug, PartialEq)]
2350pub enum DeleteProjectError {
2351    /// <p>The input value that was provided is not valid.</p>
2352    InvalidInput(String),
2353}
2354
2355impl DeleteProjectError {
2356    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteProjectError> {
2357        if let Some(err) = proto::json::Error::parse(&res) {
2358            match err.typ.as_str() {
2359                "InvalidInputException" => {
2360                    return RusotoError::Service(DeleteProjectError::InvalidInput(err.msg))
2361                }
2362                "ValidationException" => return RusotoError::Validation(err.msg),
2363                _ => {}
2364            }
2365        }
2366        RusotoError::Unknown(res)
2367    }
2368}
2369impl fmt::Display for DeleteProjectError {
2370    #[allow(unused_variables)]
2371    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2372        match *self {
2373            DeleteProjectError::InvalidInput(ref cause) => write!(f, "{}", cause),
2374        }
2375    }
2376}
2377impl Error for DeleteProjectError {}
2378/// Errors returned by DeleteReport
2379#[derive(Debug, PartialEq)]
2380pub enum DeleteReportError {
2381    /// <p>The input value that was provided is not valid.</p>
2382    InvalidInput(String),
2383}
2384
2385impl DeleteReportError {
2386    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteReportError> {
2387        if let Some(err) = proto::json::Error::parse(&res) {
2388            match err.typ.as_str() {
2389                "InvalidInputException" => {
2390                    return RusotoError::Service(DeleteReportError::InvalidInput(err.msg))
2391                }
2392                "ValidationException" => return RusotoError::Validation(err.msg),
2393                _ => {}
2394            }
2395        }
2396        RusotoError::Unknown(res)
2397    }
2398}
2399impl fmt::Display for DeleteReportError {
2400    #[allow(unused_variables)]
2401    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2402        match *self {
2403            DeleteReportError::InvalidInput(ref cause) => write!(f, "{}", cause),
2404        }
2405    }
2406}
2407impl Error for DeleteReportError {}
2408/// Errors returned by DeleteReportGroup
2409#[derive(Debug, PartialEq)]
2410pub enum DeleteReportGroupError {
2411    /// <p>The input value that was provided is not valid.</p>
2412    InvalidInput(String),
2413}
2414
2415impl DeleteReportGroupError {
2416    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteReportGroupError> {
2417        if let Some(err) = proto::json::Error::parse(&res) {
2418            match err.typ.as_str() {
2419                "InvalidInputException" => {
2420                    return RusotoError::Service(DeleteReportGroupError::InvalidInput(err.msg))
2421                }
2422                "ValidationException" => return RusotoError::Validation(err.msg),
2423                _ => {}
2424            }
2425        }
2426        RusotoError::Unknown(res)
2427    }
2428}
2429impl fmt::Display for DeleteReportGroupError {
2430    #[allow(unused_variables)]
2431    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2432        match *self {
2433            DeleteReportGroupError::InvalidInput(ref cause) => write!(f, "{}", cause),
2434        }
2435    }
2436}
2437impl Error for DeleteReportGroupError {}
2438/// Errors returned by DeleteResourcePolicy
2439#[derive(Debug, PartialEq)]
2440pub enum DeleteResourcePolicyError {
2441    /// <p>The input value that was provided is not valid.</p>
2442    InvalidInput(String),
2443}
2444
2445impl DeleteResourcePolicyError {
2446    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteResourcePolicyError> {
2447        if let Some(err) = proto::json::Error::parse(&res) {
2448            match err.typ.as_str() {
2449                "InvalidInputException" => {
2450                    return RusotoError::Service(DeleteResourcePolicyError::InvalidInput(err.msg))
2451                }
2452                "ValidationException" => return RusotoError::Validation(err.msg),
2453                _ => {}
2454            }
2455        }
2456        RusotoError::Unknown(res)
2457    }
2458}
2459impl fmt::Display for DeleteResourcePolicyError {
2460    #[allow(unused_variables)]
2461    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2462        match *self {
2463            DeleteResourcePolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
2464        }
2465    }
2466}
2467impl Error for DeleteResourcePolicyError {}
2468/// Errors returned by DeleteSourceCredentials
2469#[derive(Debug, PartialEq)]
2470pub enum DeleteSourceCredentialsError {
2471    /// <p>The input value that was provided is not valid.</p>
2472    InvalidInput(String),
2473    /// <p>The specified AWS resource cannot be found.</p>
2474    ResourceNotFound(String),
2475}
2476
2477impl DeleteSourceCredentialsError {
2478    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteSourceCredentialsError> {
2479        if let Some(err) = proto::json::Error::parse(&res) {
2480            match err.typ.as_str() {
2481                "InvalidInputException" => {
2482                    return RusotoError::Service(DeleteSourceCredentialsError::InvalidInput(
2483                        err.msg,
2484                    ))
2485                }
2486                "ResourceNotFoundException" => {
2487                    return RusotoError::Service(DeleteSourceCredentialsError::ResourceNotFound(
2488                        err.msg,
2489                    ))
2490                }
2491                "ValidationException" => return RusotoError::Validation(err.msg),
2492                _ => {}
2493            }
2494        }
2495        RusotoError::Unknown(res)
2496    }
2497}
2498impl fmt::Display for DeleteSourceCredentialsError {
2499    #[allow(unused_variables)]
2500    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2501        match *self {
2502            DeleteSourceCredentialsError::InvalidInput(ref cause) => write!(f, "{}", cause),
2503            DeleteSourceCredentialsError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2504        }
2505    }
2506}
2507impl Error for DeleteSourceCredentialsError {}
2508/// Errors returned by DeleteWebhook
2509#[derive(Debug, PartialEq)]
2510pub enum DeleteWebhookError {
2511    /// <p>The input value that was provided is not valid.</p>
2512    InvalidInput(String),
2513    /// <p>There was a problem with the underlying OAuth provider.</p>
2514    OAuthProvider(String),
2515    /// <p>The specified AWS resource cannot be found.</p>
2516    ResourceNotFound(String),
2517}
2518
2519impl DeleteWebhookError {
2520    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteWebhookError> {
2521        if let Some(err) = proto::json::Error::parse(&res) {
2522            match err.typ.as_str() {
2523                "InvalidInputException" => {
2524                    return RusotoError::Service(DeleteWebhookError::InvalidInput(err.msg))
2525                }
2526                "OAuthProviderException" => {
2527                    return RusotoError::Service(DeleteWebhookError::OAuthProvider(err.msg))
2528                }
2529                "ResourceNotFoundException" => {
2530                    return RusotoError::Service(DeleteWebhookError::ResourceNotFound(err.msg))
2531                }
2532                "ValidationException" => return RusotoError::Validation(err.msg),
2533                _ => {}
2534            }
2535        }
2536        RusotoError::Unknown(res)
2537    }
2538}
2539impl fmt::Display for DeleteWebhookError {
2540    #[allow(unused_variables)]
2541    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2542        match *self {
2543            DeleteWebhookError::InvalidInput(ref cause) => write!(f, "{}", cause),
2544            DeleteWebhookError::OAuthProvider(ref cause) => write!(f, "{}", cause),
2545            DeleteWebhookError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2546        }
2547    }
2548}
2549impl Error for DeleteWebhookError {}
2550/// Errors returned by DescribeTestCases
2551#[derive(Debug, PartialEq)]
2552pub enum DescribeTestCasesError {
2553    /// <p>The input value that was provided is not valid.</p>
2554    InvalidInput(String),
2555    /// <p>The specified AWS resource cannot be found.</p>
2556    ResourceNotFound(String),
2557}
2558
2559impl DescribeTestCasesError {
2560    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeTestCasesError> {
2561        if let Some(err) = proto::json::Error::parse(&res) {
2562            match err.typ.as_str() {
2563                "InvalidInputException" => {
2564                    return RusotoError::Service(DescribeTestCasesError::InvalidInput(err.msg))
2565                }
2566                "ResourceNotFoundException" => {
2567                    return RusotoError::Service(DescribeTestCasesError::ResourceNotFound(err.msg))
2568                }
2569                "ValidationException" => return RusotoError::Validation(err.msg),
2570                _ => {}
2571            }
2572        }
2573        RusotoError::Unknown(res)
2574    }
2575}
2576impl fmt::Display for DescribeTestCasesError {
2577    #[allow(unused_variables)]
2578    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2579        match *self {
2580            DescribeTestCasesError::InvalidInput(ref cause) => write!(f, "{}", cause),
2581            DescribeTestCasesError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2582        }
2583    }
2584}
2585impl Error for DescribeTestCasesError {}
2586/// Errors returned by GetResourcePolicy
2587#[derive(Debug, PartialEq)]
2588pub enum GetResourcePolicyError {
2589    /// <p>The input value that was provided is not valid.</p>
2590    InvalidInput(String),
2591    /// <p>The specified AWS resource cannot be found.</p>
2592    ResourceNotFound(String),
2593}
2594
2595impl GetResourcePolicyError {
2596    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetResourcePolicyError> {
2597        if let Some(err) = proto::json::Error::parse(&res) {
2598            match err.typ.as_str() {
2599                "InvalidInputException" => {
2600                    return RusotoError::Service(GetResourcePolicyError::InvalidInput(err.msg))
2601                }
2602                "ResourceNotFoundException" => {
2603                    return RusotoError::Service(GetResourcePolicyError::ResourceNotFound(err.msg))
2604                }
2605                "ValidationException" => return RusotoError::Validation(err.msg),
2606                _ => {}
2607            }
2608        }
2609        RusotoError::Unknown(res)
2610    }
2611}
2612impl fmt::Display for GetResourcePolicyError {
2613    #[allow(unused_variables)]
2614    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2615        match *self {
2616            GetResourcePolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
2617            GetResourcePolicyError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2618        }
2619    }
2620}
2621impl Error for GetResourcePolicyError {}
2622/// Errors returned by ImportSourceCredentials
2623#[derive(Debug, PartialEq)]
2624pub enum ImportSourceCredentialsError {
2625    /// <p>An AWS service limit was exceeded for the calling AWS account.</p>
2626    AccountLimitExceeded(String),
2627    /// <p>The input value that was provided is not valid.</p>
2628    InvalidInput(String),
2629    /// <p>The specified AWS resource cannot be created, because an AWS resource with the same settings already exists.</p>
2630    ResourceAlreadyExists(String),
2631}
2632
2633impl ImportSourceCredentialsError {
2634    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ImportSourceCredentialsError> {
2635        if let Some(err) = proto::json::Error::parse(&res) {
2636            match err.typ.as_str() {
2637                "AccountLimitExceededException" => {
2638                    return RusotoError::Service(
2639                        ImportSourceCredentialsError::AccountLimitExceeded(err.msg),
2640                    )
2641                }
2642                "InvalidInputException" => {
2643                    return RusotoError::Service(ImportSourceCredentialsError::InvalidInput(
2644                        err.msg,
2645                    ))
2646                }
2647                "ResourceAlreadyExistsException" => {
2648                    return RusotoError::Service(
2649                        ImportSourceCredentialsError::ResourceAlreadyExists(err.msg),
2650                    )
2651                }
2652                "ValidationException" => return RusotoError::Validation(err.msg),
2653                _ => {}
2654            }
2655        }
2656        RusotoError::Unknown(res)
2657    }
2658}
2659impl fmt::Display for ImportSourceCredentialsError {
2660    #[allow(unused_variables)]
2661    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2662        match *self {
2663            ImportSourceCredentialsError::AccountLimitExceeded(ref cause) => write!(f, "{}", cause),
2664            ImportSourceCredentialsError::InvalidInput(ref cause) => write!(f, "{}", cause),
2665            ImportSourceCredentialsError::ResourceAlreadyExists(ref cause) => {
2666                write!(f, "{}", cause)
2667            }
2668        }
2669    }
2670}
2671impl Error for ImportSourceCredentialsError {}
2672/// Errors returned by InvalidateProjectCache
2673#[derive(Debug, PartialEq)]
2674pub enum InvalidateProjectCacheError {
2675    /// <p>The input value that was provided is not valid.</p>
2676    InvalidInput(String),
2677    /// <p>The specified AWS resource cannot be found.</p>
2678    ResourceNotFound(String),
2679}
2680
2681impl InvalidateProjectCacheError {
2682    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<InvalidateProjectCacheError> {
2683        if let Some(err) = proto::json::Error::parse(&res) {
2684            match err.typ.as_str() {
2685                "InvalidInputException" => {
2686                    return RusotoError::Service(InvalidateProjectCacheError::InvalidInput(err.msg))
2687                }
2688                "ResourceNotFoundException" => {
2689                    return RusotoError::Service(InvalidateProjectCacheError::ResourceNotFound(
2690                        err.msg,
2691                    ))
2692                }
2693                "ValidationException" => return RusotoError::Validation(err.msg),
2694                _ => {}
2695            }
2696        }
2697        RusotoError::Unknown(res)
2698    }
2699}
2700impl fmt::Display for InvalidateProjectCacheError {
2701    #[allow(unused_variables)]
2702    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2703        match *self {
2704            InvalidateProjectCacheError::InvalidInput(ref cause) => write!(f, "{}", cause),
2705            InvalidateProjectCacheError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2706        }
2707    }
2708}
2709impl Error for InvalidateProjectCacheError {}
2710/// Errors returned by ListBuilds
2711#[derive(Debug, PartialEq)]
2712pub enum ListBuildsError {
2713    /// <p>The input value that was provided is not valid.</p>
2714    InvalidInput(String),
2715}
2716
2717impl ListBuildsError {
2718    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListBuildsError> {
2719        if let Some(err) = proto::json::Error::parse(&res) {
2720            match err.typ.as_str() {
2721                "InvalidInputException" => {
2722                    return RusotoError::Service(ListBuildsError::InvalidInput(err.msg))
2723                }
2724                "ValidationException" => return RusotoError::Validation(err.msg),
2725                _ => {}
2726            }
2727        }
2728        RusotoError::Unknown(res)
2729    }
2730}
2731impl fmt::Display for ListBuildsError {
2732    #[allow(unused_variables)]
2733    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2734        match *self {
2735            ListBuildsError::InvalidInput(ref cause) => write!(f, "{}", cause),
2736        }
2737    }
2738}
2739impl Error for ListBuildsError {}
2740/// Errors returned by ListBuildsForProject
2741#[derive(Debug, PartialEq)]
2742pub enum ListBuildsForProjectError {
2743    /// <p>The input value that was provided is not valid.</p>
2744    InvalidInput(String),
2745    /// <p>The specified AWS resource cannot be found.</p>
2746    ResourceNotFound(String),
2747}
2748
2749impl ListBuildsForProjectError {
2750    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListBuildsForProjectError> {
2751        if let Some(err) = proto::json::Error::parse(&res) {
2752            match err.typ.as_str() {
2753                "InvalidInputException" => {
2754                    return RusotoError::Service(ListBuildsForProjectError::InvalidInput(err.msg))
2755                }
2756                "ResourceNotFoundException" => {
2757                    return RusotoError::Service(ListBuildsForProjectError::ResourceNotFound(
2758                        err.msg,
2759                    ))
2760                }
2761                "ValidationException" => return RusotoError::Validation(err.msg),
2762                _ => {}
2763            }
2764        }
2765        RusotoError::Unknown(res)
2766    }
2767}
2768impl fmt::Display for ListBuildsForProjectError {
2769    #[allow(unused_variables)]
2770    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2771        match *self {
2772            ListBuildsForProjectError::InvalidInput(ref cause) => write!(f, "{}", cause),
2773            ListBuildsForProjectError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2774        }
2775    }
2776}
2777impl Error for ListBuildsForProjectError {}
2778/// Errors returned by ListCuratedEnvironmentImages
2779#[derive(Debug, PartialEq)]
2780pub enum ListCuratedEnvironmentImagesError {}
2781
2782impl ListCuratedEnvironmentImagesError {
2783    pub fn from_response(
2784        res: BufferedHttpResponse,
2785    ) -> RusotoError<ListCuratedEnvironmentImagesError> {
2786        if let Some(err) = proto::json::Error::parse(&res) {
2787            match err.typ.as_str() {
2788                "ValidationException" => return RusotoError::Validation(err.msg),
2789                _ => {}
2790            }
2791        }
2792        RusotoError::Unknown(res)
2793    }
2794}
2795impl fmt::Display for ListCuratedEnvironmentImagesError {
2796    #[allow(unused_variables)]
2797    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2798        match *self {}
2799    }
2800}
2801impl Error for ListCuratedEnvironmentImagesError {}
2802/// Errors returned by ListProjects
2803#[derive(Debug, PartialEq)]
2804pub enum ListProjectsError {
2805    /// <p>The input value that was provided is not valid.</p>
2806    InvalidInput(String),
2807}
2808
2809impl ListProjectsError {
2810    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListProjectsError> {
2811        if let Some(err) = proto::json::Error::parse(&res) {
2812            match err.typ.as_str() {
2813                "InvalidInputException" => {
2814                    return RusotoError::Service(ListProjectsError::InvalidInput(err.msg))
2815                }
2816                "ValidationException" => return RusotoError::Validation(err.msg),
2817                _ => {}
2818            }
2819        }
2820        RusotoError::Unknown(res)
2821    }
2822}
2823impl fmt::Display for ListProjectsError {
2824    #[allow(unused_variables)]
2825    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2826        match *self {
2827            ListProjectsError::InvalidInput(ref cause) => write!(f, "{}", cause),
2828        }
2829    }
2830}
2831impl Error for ListProjectsError {}
2832/// Errors returned by ListReportGroups
2833#[derive(Debug, PartialEq)]
2834pub enum ListReportGroupsError {
2835    /// <p>The input value that was provided is not valid.</p>
2836    InvalidInput(String),
2837}
2838
2839impl ListReportGroupsError {
2840    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListReportGroupsError> {
2841        if let Some(err) = proto::json::Error::parse(&res) {
2842            match err.typ.as_str() {
2843                "InvalidInputException" => {
2844                    return RusotoError::Service(ListReportGroupsError::InvalidInput(err.msg))
2845                }
2846                "ValidationException" => return RusotoError::Validation(err.msg),
2847                _ => {}
2848            }
2849        }
2850        RusotoError::Unknown(res)
2851    }
2852}
2853impl fmt::Display for ListReportGroupsError {
2854    #[allow(unused_variables)]
2855    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2856        match *self {
2857            ListReportGroupsError::InvalidInput(ref cause) => write!(f, "{}", cause),
2858        }
2859    }
2860}
2861impl Error for ListReportGroupsError {}
2862/// Errors returned by ListReports
2863#[derive(Debug, PartialEq)]
2864pub enum ListReportsError {
2865    /// <p>The input value that was provided is not valid.</p>
2866    InvalidInput(String),
2867}
2868
2869impl ListReportsError {
2870    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListReportsError> {
2871        if let Some(err) = proto::json::Error::parse(&res) {
2872            match err.typ.as_str() {
2873                "InvalidInputException" => {
2874                    return RusotoError::Service(ListReportsError::InvalidInput(err.msg))
2875                }
2876                "ValidationException" => return RusotoError::Validation(err.msg),
2877                _ => {}
2878            }
2879        }
2880        RusotoError::Unknown(res)
2881    }
2882}
2883impl fmt::Display for ListReportsError {
2884    #[allow(unused_variables)]
2885    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2886        match *self {
2887            ListReportsError::InvalidInput(ref cause) => write!(f, "{}", cause),
2888        }
2889    }
2890}
2891impl Error for ListReportsError {}
2892/// Errors returned by ListReportsForReportGroup
2893#[derive(Debug, PartialEq)]
2894pub enum ListReportsForReportGroupError {
2895    /// <p>The input value that was provided is not valid.</p>
2896    InvalidInput(String),
2897    /// <p>The specified AWS resource cannot be found.</p>
2898    ResourceNotFound(String),
2899}
2900
2901impl ListReportsForReportGroupError {
2902    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListReportsForReportGroupError> {
2903        if let Some(err) = proto::json::Error::parse(&res) {
2904            match err.typ.as_str() {
2905                "InvalidInputException" => {
2906                    return RusotoError::Service(ListReportsForReportGroupError::InvalidInput(
2907                        err.msg,
2908                    ))
2909                }
2910                "ResourceNotFoundException" => {
2911                    return RusotoError::Service(ListReportsForReportGroupError::ResourceNotFound(
2912                        err.msg,
2913                    ))
2914                }
2915                "ValidationException" => return RusotoError::Validation(err.msg),
2916                _ => {}
2917            }
2918        }
2919        RusotoError::Unknown(res)
2920    }
2921}
2922impl fmt::Display for ListReportsForReportGroupError {
2923    #[allow(unused_variables)]
2924    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2925        match *self {
2926            ListReportsForReportGroupError::InvalidInput(ref cause) => write!(f, "{}", cause),
2927            ListReportsForReportGroupError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2928        }
2929    }
2930}
2931impl Error for ListReportsForReportGroupError {}
2932/// Errors returned by ListSharedProjects
2933#[derive(Debug, PartialEq)]
2934pub enum ListSharedProjectsError {
2935    /// <p>The input value that was provided is not valid.</p>
2936    InvalidInput(String),
2937}
2938
2939impl ListSharedProjectsError {
2940    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListSharedProjectsError> {
2941        if let Some(err) = proto::json::Error::parse(&res) {
2942            match err.typ.as_str() {
2943                "InvalidInputException" => {
2944                    return RusotoError::Service(ListSharedProjectsError::InvalidInput(err.msg))
2945                }
2946                "ValidationException" => return RusotoError::Validation(err.msg),
2947                _ => {}
2948            }
2949        }
2950        RusotoError::Unknown(res)
2951    }
2952}
2953impl fmt::Display for ListSharedProjectsError {
2954    #[allow(unused_variables)]
2955    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2956        match *self {
2957            ListSharedProjectsError::InvalidInput(ref cause) => write!(f, "{}", cause),
2958        }
2959    }
2960}
2961impl Error for ListSharedProjectsError {}
2962/// Errors returned by ListSharedReportGroups
2963#[derive(Debug, PartialEq)]
2964pub enum ListSharedReportGroupsError {
2965    /// <p>The input value that was provided is not valid.</p>
2966    InvalidInput(String),
2967}
2968
2969impl ListSharedReportGroupsError {
2970    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListSharedReportGroupsError> {
2971        if let Some(err) = proto::json::Error::parse(&res) {
2972            match err.typ.as_str() {
2973                "InvalidInputException" => {
2974                    return RusotoError::Service(ListSharedReportGroupsError::InvalidInput(err.msg))
2975                }
2976                "ValidationException" => return RusotoError::Validation(err.msg),
2977                _ => {}
2978            }
2979        }
2980        RusotoError::Unknown(res)
2981    }
2982}
2983impl fmt::Display for ListSharedReportGroupsError {
2984    #[allow(unused_variables)]
2985    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2986        match *self {
2987            ListSharedReportGroupsError::InvalidInput(ref cause) => write!(f, "{}", cause),
2988        }
2989    }
2990}
2991impl Error for ListSharedReportGroupsError {}
2992/// Errors returned by ListSourceCredentials
2993#[derive(Debug, PartialEq)]
2994pub enum ListSourceCredentialsError {}
2995
2996impl ListSourceCredentialsError {
2997    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListSourceCredentialsError> {
2998        if let Some(err) = proto::json::Error::parse(&res) {
2999            match err.typ.as_str() {
3000                "ValidationException" => return RusotoError::Validation(err.msg),
3001                _ => {}
3002            }
3003        }
3004        RusotoError::Unknown(res)
3005    }
3006}
3007impl fmt::Display for ListSourceCredentialsError {
3008    #[allow(unused_variables)]
3009    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3010        match *self {}
3011    }
3012}
3013impl Error for ListSourceCredentialsError {}
3014/// Errors returned by PutResourcePolicy
3015#[derive(Debug, PartialEq)]
3016pub enum PutResourcePolicyError {
3017    /// <p>The input value that was provided is not valid.</p>
3018    InvalidInput(String),
3019    /// <p>The specified AWS resource cannot be found.</p>
3020    ResourceNotFound(String),
3021}
3022
3023impl PutResourcePolicyError {
3024    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<PutResourcePolicyError> {
3025        if let Some(err) = proto::json::Error::parse(&res) {
3026            match err.typ.as_str() {
3027                "InvalidInputException" => {
3028                    return RusotoError::Service(PutResourcePolicyError::InvalidInput(err.msg))
3029                }
3030                "ResourceNotFoundException" => {
3031                    return RusotoError::Service(PutResourcePolicyError::ResourceNotFound(err.msg))
3032                }
3033                "ValidationException" => return RusotoError::Validation(err.msg),
3034                _ => {}
3035            }
3036        }
3037        RusotoError::Unknown(res)
3038    }
3039}
3040impl fmt::Display for PutResourcePolicyError {
3041    #[allow(unused_variables)]
3042    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3043        match *self {
3044            PutResourcePolicyError::InvalidInput(ref cause) => write!(f, "{}", cause),
3045            PutResourcePolicyError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3046        }
3047    }
3048}
3049impl Error for PutResourcePolicyError {}
3050/// Errors returned by StartBuild
3051#[derive(Debug, PartialEq)]
3052pub enum StartBuildError {
3053    /// <p>An AWS service limit was exceeded for the calling AWS account.</p>
3054    AccountLimitExceeded(String),
3055    /// <p>The input value that was provided is not valid.</p>
3056    InvalidInput(String),
3057    /// <p>The specified AWS resource cannot be found.</p>
3058    ResourceNotFound(String),
3059}
3060
3061impl StartBuildError {
3062    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<StartBuildError> {
3063        if let Some(err) = proto::json::Error::parse(&res) {
3064            match err.typ.as_str() {
3065                "AccountLimitExceededException" => {
3066                    return RusotoError::Service(StartBuildError::AccountLimitExceeded(err.msg))
3067                }
3068                "InvalidInputException" => {
3069                    return RusotoError::Service(StartBuildError::InvalidInput(err.msg))
3070                }
3071                "ResourceNotFoundException" => {
3072                    return RusotoError::Service(StartBuildError::ResourceNotFound(err.msg))
3073                }
3074                "ValidationException" => return RusotoError::Validation(err.msg),
3075                _ => {}
3076            }
3077        }
3078        RusotoError::Unknown(res)
3079    }
3080}
3081impl fmt::Display for StartBuildError {
3082    #[allow(unused_variables)]
3083    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3084        match *self {
3085            StartBuildError::AccountLimitExceeded(ref cause) => write!(f, "{}", cause),
3086            StartBuildError::InvalidInput(ref cause) => write!(f, "{}", cause),
3087            StartBuildError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3088        }
3089    }
3090}
3091impl Error for StartBuildError {}
3092/// Errors returned by StopBuild
3093#[derive(Debug, PartialEq)]
3094pub enum StopBuildError {
3095    /// <p>The input value that was provided is not valid.</p>
3096    InvalidInput(String),
3097    /// <p>The specified AWS resource cannot be found.</p>
3098    ResourceNotFound(String),
3099}
3100
3101impl StopBuildError {
3102    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<StopBuildError> {
3103        if let Some(err) = proto::json::Error::parse(&res) {
3104            match err.typ.as_str() {
3105                "InvalidInputException" => {
3106                    return RusotoError::Service(StopBuildError::InvalidInput(err.msg))
3107                }
3108                "ResourceNotFoundException" => {
3109                    return RusotoError::Service(StopBuildError::ResourceNotFound(err.msg))
3110                }
3111                "ValidationException" => return RusotoError::Validation(err.msg),
3112                _ => {}
3113            }
3114        }
3115        RusotoError::Unknown(res)
3116    }
3117}
3118impl fmt::Display for StopBuildError {
3119    #[allow(unused_variables)]
3120    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3121        match *self {
3122            StopBuildError::InvalidInput(ref cause) => write!(f, "{}", cause),
3123            StopBuildError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3124        }
3125    }
3126}
3127impl Error for StopBuildError {}
3128/// Errors returned by UpdateProject
3129#[derive(Debug, PartialEq)]
3130pub enum UpdateProjectError {
3131    /// <p>The input value that was provided is not valid.</p>
3132    InvalidInput(String),
3133    /// <p>The specified AWS resource cannot be found.</p>
3134    ResourceNotFound(String),
3135}
3136
3137impl UpdateProjectError {
3138    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateProjectError> {
3139        if let Some(err) = proto::json::Error::parse(&res) {
3140            match err.typ.as_str() {
3141                "InvalidInputException" => {
3142                    return RusotoError::Service(UpdateProjectError::InvalidInput(err.msg))
3143                }
3144                "ResourceNotFoundException" => {
3145                    return RusotoError::Service(UpdateProjectError::ResourceNotFound(err.msg))
3146                }
3147                "ValidationException" => return RusotoError::Validation(err.msg),
3148                _ => {}
3149            }
3150        }
3151        RusotoError::Unknown(res)
3152    }
3153}
3154impl fmt::Display for UpdateProjectError {
3155    #[allow(unused_variables)]
3156    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3157        match *self {
3158            UpdateProjectError::InvalidInput(ref cause) => write!(f, "{}", cause),
3159            UpdateProjectError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3160        }
3161    }
3162}
3163impl Error for UpdateProjectError {}
3164/// Errors returned by UpdateReportGroup
3165#[derive(Debug, PartialEq)]
3166pub enum UpdateReportGroupError {
3167    /// <p>The input value that was provided is not valid.</p>
3168    InvalidInput(String),
3169    /// <p>The specified AWS resource cannot be found.</p>
3170    ResourceNotFound(String),
3171}
3172
3173impl UpdateReportGroupError {
3174    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateReportGroupError> {
3175        if let Some(err) = proto::json::Error::parse(&res) {
3176            match err.typ.as_str() {
3177                "InvalidInputException" => {
3178                    return RusotoError::Service(UpdateReportGroupError::InvalidInput(err.msg))
3179                }
3180                "ResourceNotFoundException" => {
3181                    return RusotoError::Service(UpdateReportGroupError::ResourceNotFound(err.msg))
3182                }
3183                "ValidationException" => return RusotoError::Validation(err.msg),
3184                _ => {}
3185            }
3186        }
3187        RusotoError::Unknown(res)
3188    }
3189}
3190impl fmt::Display for UpdateReportGroupError {
3191    #[allow(unused_variables)]
3192    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3193        match *self {
3194            UpdateReportGroupError::InvalidInput(ref cause) => write!(f, "{}", cause),
3195            UpdateReportGroupError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3196        }
3197    }
3198}
3199impl Error for UpdateReportGroupError {}
3200/// Errors returned by UpdateWebhook
3201#[derive(Debug, PartialEq)]
3202pub enum UpdateWebhookError {
3203    /// <p>The input value that was provided is not valid.</p>
3204    InvalidInput(String),
3205    /// <p>There was a problem with the underlying OAuth provider.</p>
3206    OAuthProvider(String),
3207    /// <p>The specified AWS resource cannot be found.</p>
3208    ResourceNotFound(String),
3209}
3210
3211impl UpdateWebhookError {
3212    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateWebhookError> {
3213        if let Some(err) = proto::json::Error::parse(&res) {
3214            match err.typ.as_str() {
3215                "InvalidInputException" => {
3216                    return RusotoError::Service(UpdateWebhookError::InvalidInput(err.msg))
3217                }
3218                "OAuthProviderException" => {
3219                    return RusotoError::Service(UpdateWebhookError::OAuthProvider(err.msg))
3220                }
3221                "ResourceNotFoundException" => {
3222                    return RusotoError::Service(UpdateWebhookError::ResourceNotFound(err.msg))
3223                }
3224                "ValidationException" => return RusotoError::Validation(err.msg),
3225                _ => {}
3226            }
3227        }
3228        RusotoError::Unknown(res)
3229    }
3230}
3231impl fmt::Display for UpdateWebhookError {
3232    #[allow(unused_variables)]
3233    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3234        match *self {
3235            UpdateWebhookError::InvalidInput(ref cause) => write!(f, "{}", cause),
3236            UpdateWebhookError::OAuthProvider(ref cause) => write!(f, "{}", cause),
3237            UpdateWebhookError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3238        }
3239    }
3240}
3241impl Error for UpdateWebhookError {}
3242/// Trait representing the capabilities of the AWS CodeBuild API. AWS CodeBuild clients implement this trait.
3243#[async_trait]
3244pub trait CodeBuild {
3245    /// <p>Deletes one or more builds.</p>
3246    async fn batch_delete_builds(
3247        &self,
3248        input: BatchDeleteBuildsInput,
3249    ) -> Result<BatchDeleteBuildsOutput, RusotoError<BatchDeleteBuildsError>>;
3250
3251    /// <p>Gets information about one or more builds.</p>
3252    async fn batch_get_builds(
3253        &self,
3254        input: BatchGetBuildsInput,
3255    ) -> Result<BatchGetBuildsOutput, RusotoError<BatchGetBuildsError>>;
3256
3257    /// <p>Gets information about one or more build projects.</p>
3258    async fn batch_get_projects(
3259        &self,
3260        input: BatchGetProjectsInput,
3261    ) -> Result<BatchGetProjectsOutput, RusotoError<BatchGetProjectsError>>;
3262
3263    /// <p> Returns an array of report groups. </p>
3264    async fn batch_get_report_groups(
3265        &self,
3266        input: BatchGetReportGroupsInput,
3267    ) -> Result<BatchGetReportGroupsOutput, RusotoError<BatchGetReportGroupsError>>;
3268
3269    /// <p> Returns an array of reports. </p>
3270    async fn batch_get_reports(
3271        &self,
3272        input: BatchGetReportsInput,
3273    ) -> Result<BatchGetReportsOutput, RusotoError<BatchGetReportsError>>;
3274
3275    /// <p>Creates a build project.</p>
3276    async fn create_project(
3277        &self,
3278        input: CreateProjectInput,
3279    ) -> Result<CreateProjectOutput, RusotoError<CreateProjectError>>;
3280
3281    /// <p> Creates a report group. A report group contains a collection of reports. </p>
3282    async fn create_report_group(
3283        &self,
3284        input: CreateReportGroupInput,
3285    ) -> Result<CreateReportGroupOutput, RusotoError<CreateReportGroupError>>;
3286
3287    /// <p><p>For an existing AWS CodeBuild build project that has its source code stored in a GitHub or Bitbucket repository, enables AWS CodeBuild to start rebuilding the source code every time a code change is pushed to the repository.</p> <important> <p>If you enable webhooks for an AWS CodeBuild project, and the project is used as a build step in AWS CodePipeline, then two identical builds are created for each commit. One build is triggered through webhooks, and one through AWS CodePipeline. Because billing is on a per-build basis, you are billed for both builds. Therefore, if you are using AWS CodePipeline, we recommend that you disable webhooks in AWS CodeBuild. In the AWS CodeBuild console, clear the Webhook box. For more information, see step 5 in <a href="https://docs.aws.amazon.com/codebuild/latest/userguide/change-project.html#change-project-console">Change a Build Project&#39;s Settings</a>.</p> </important></p>
3288    async fn create_webhook(
3289        &self,
3290        input: CreateWebhookInput,
3291    ) -> Result<CreateWebhookOutput, RusotoError<CreateWebhookError>>;
3292
3293    /// <p> Deletes a build project. When you delete a project, its builds are not deleted. </p>
3294    async fn delete_project(
3295        &self,
3296        input: DeleteProjectInput,
3297    ) -> Result<DeleteProjectOutput, RusotoError<DeleteProjectError>>;
3298
3299    /// <p> Deletes a report. </p>
3300    async fn delete_report(
3301        &self,
3302        input: DeleteReportInput,
3303    ) -> Result<DeleteReportOutput, RusotoError<DeleteReportError>>;
3304
3305    /// <p> <code>DeleteReportGroup</code>: Deletes a report group. Before you delete a report group, you must delete its reports. Use <a href="https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ListReportsForReportGroup.html">ListReportsForReportGroup</a> to get the reports in a report group. Use <a href="https://docs.aws.amazon.com/codebuild/latest/APIReference/API_DeleteReport.html">DeleteReport</a> to delete the reports. If you call <code>DeleteReportGroup</code> for a report group that contains one or more reports, an exception is thrown. </p>
3306    async fn delete_report_group(
3307        &self,
3308        input: DeleteReportGroupInput,
3309    ) -> Result<DeleteReportGroupOutput, RusotoError<DeleteReportGroupError>>;
3310
3311    /// <p> Deletes a resource policy that is identified by its resource ARN. </p>
3312    async fn delete_resource_policy(
3313        &self,
3314        input: DeleteResourcePolicyInput,
3315    ) -> Result<DeleteResourcePolicyOutput, RusotoError<DeleteResourcePolicyError>>;
3316
3317    /// <p> Deletes a set of GitHub, GitHub Enterprise, or Bitbucket source credentials. </p>
3318    async fn delete_source_credentials(
3319        &self,
3320        input: DeleteSourceCredentialsInput,
3321    ) -> Result<DeleteSourceCredentialsOutput, RusotoError<DeleteSourceCredentialsError>>;
3322
3323    /// <p>For an existing AWS CodeBuild build project that has its source code stored in a GitHub or Bitbucket repository, stops AWS CodeBuild from rebuilding the source code every time a code change is pushed to the repository.</p>
3324    async fn delete_webhook(
3325        &self,
3326        input: DeleteWebhookInput,
3327    ) -> Result<DeleteWebhookOutput, RusotoError<DeleteWebhookError>>;
3328
3329    /// <p> Returns a list of details about test cases for a report. </p>
3330    async fn describe_test_cases(
3331        &self,
3332        input: DescribeTestCasesInput,
3333    ) -> Result<DescribeTestCasesOutput, RusotoError<DescribeTestCasesError>>;
3334
3335    /// <p> Gets a resource policy that is identified by its resource ARN. </p>
3336    async fn get_resource_policy(
3337        &self,
3338        input: GetResourcePolicyInput,
3339    ) -> Result<GetResourcePolicyOutput, RusotoError<GetResourcePolicyError>>;
3340
3341    /// <p> Imports the source repository credentials for an AWS CodeBuild project that has its source code stored in a GitHub, GitHub Enterprise, or Bitbucket repository. </p>
3342    async fn import_source_credentials(
3343        &self,
3344        input: ImportSourceCredentialsInput,
3345    ) -> Result<ImportSourceCredentialsOutput, RusotoError<ImportSourceCredentialsError>>;
3346
3347    /// <p>Resets the cache for a project.</p>
3348    async fn invalidate_project_cache(
3349        &self,
3350        input: InvalidateProjectCacheInput,
3351    ) -> Result<InvalidateProjectCacheOutput, RusotoError<InvalidateProjectCacheError>>;
3352
3353    /// <p>Gets a list of build IDs, with each build ID representing a single build.</p>
3354    async fn list_builds(
3355        &self,
3356        input: ListBuildsInput,
3357    ) -> Result<ListBuildsOutput, RusotoError<ListBuildsError>>;
3358
3359    /// <p>Gets a list of build IDs for the specified build project, with each build ID representing a single build.</p>
3360    async fn list_builds_for_project(
3361        &self,
3362        input: ListBuildsForProjectInput,
3363    ) -> Result<ListBuildsForProjectOutput, RusotoError<ListBuildsForProjectError>>;
3364
3365    /// <p>Gets information about Docker images that are managed by AWS CodeBuild.</p>
3366    async fn list_curated_environment_images(
3367        &self,
3368    ) -> Result<ListCuratedEnvironmentImagesOutput, RusotoError<ListCuratedEnvironmentImagesError>>;
3369
3370    /// <p>Gets a list of build project names, with each build project name representing a single build project.</p>
3371    async fn list_projects(
3372        &self,
3373        input: ListProjectsInput,
3374    ) -> Result<ListProjectsOutput, RusotoError<ListProjectsError>>;
3375
3376    /// <p> Gets a list ARNs for the report groups in the current AWS account. </p>
3377    async fn list_report_groups(
3378        &self,
3379        input: ListReportGroupsInput,
3380    ) -> Result<ListReportGroupsOutput, RusotoError<ListReportGroupsError>>;
3381
3382    /// <p> Returns a list of ARNs for the reports in the current AWS account. </p>
3383    async fn list_reports(
3384        &self,
3385        input: ListReportsInput,
3386    ) -> Result<ListReportsOutput, RusotoError<ListReportsError>>;
3387
3388    /// <p> Returns a list of ARNs for the reports that belong to a <code>ReportGroup</code>. </p>
3389    async fn list_reports_for_report_group(
3390        &self,
3391        input: ListReportsForReportGroupInput,
3392    ) -> Result<ListReportsForReportGroupOutput, RusotoError<ListReportsForReportGroupError>>;
3393
3394    /// <p> Gets a list of projects that are shared with other AWS accounts or users. </p>
3395    async fn list_shared_projects(
3396        &self,
3397        input: ListSharedProjectsInput,
3398    ) -> Result<ListSharedProjectsOutput, RusotoError<ListSharedProjectsError>>;
3399
3400    /// <p> Gets a list of report groups that are shared with other AWS accounts or users. </p>
3401    async fn list_shared_report_groups(
3402        &self,
3403        input: ListSharedReportGroupsInput,
3404    ) -> Result<ListSharedReportGroupsOutput, RusotoError<ListSharedReportGroupsError>>;
3405
3406    /// <p> Returns a list of <code>SourceCredentialsInfo</code> objects. </p>
3407    async fn list_source_credentials(
3408        &self,
3409    ) -> Result<ListSourceCredentialsOutput, RusotoError<ListSourceCredentialsError>>;
3410
3411    /// <p> Stores a resource policy for the ARN of a <code>Project</code> or <code>ReportGroup</code> object. </p>
3412    async fn put_resource_policy(
3413        &self,
3414        input: PutResourcePolicyInput,
3415    ) -> Result<PutResourcePolicyOutput, RusotoError<PutResourcePolicyError>>;
3416
3417    /// <p>Starts running a build.</p>
3418    async fn start_build(
3419        &self,
3420        input: StartBuildInput,
3421    ) -> Result<StartBuildOutput, RusotoError<StartBuildError>>;
3422
3423    /// <p>Attempts to stop running a build.</p>
3424    async fn stop_build(
3425        &self,
3426        input: StopBuildInput,
3427    ) -> Result<StopBuildOutput, RusotoError<StopBuildError>>;
3428
3429    /// <p>Changes the settings of a build project.</p>
3430    async fn update_project(
3431        &self,
3432        input: UpdateProjectInput,
3433    ) -> Result<UpdateProjectOutput, RusotoError<UpdateProjectError>>;
3434
3435    /// <p> Updates a report group. </p>
3436    async fn update_report_group(
3437        &self,
3438        input: UpdateReportGroupInput,
3439    ) -> Result<UpdateReportGroupOutput, RusotoError<UpdateReportGroupError>>;
3440
3441    /// <p><p> Updates the webhook associated with an AWS CodeBuild build project. </p> <note> <p> If you use Bitbucket for your repository, <code>rotateSecret</code> is ignored. </p> </note></p>
3442    async fn update_webhook(
3443        &self,
3444        input: UpdateWebhookInput,
3445    ) -> Result<UpdateWebhookOutput, RusotoError<UpdateWebhookError>>;
3446}
3447/// A client for the AWS CodeBuild API.
3448#[derive(Clone)]
3449pub struct CodeBuildClient {
3450    client: Client,
3451    region: region::Region,
3452}
3453
3454impl CodeBuildClient {
3455    /// Creates a client backed by the default tokio event loop.
3456    ///
3457    /// The client will use the default credentials provider and tls client.
3458    pub fn new(region: region::Region) -> CodeBuildClient {
3459        CodeBuildClient {
3460            client: Client::shared(),
3461            region,
3462        }
3463    }
3464
3465    pub fn new_with<P, D>(
3466        request_dispatcher: D,
3467        credentials_provider: P,
3468        region: region::Region,
3469    ) -> CodeBuildClient
3470    where
3471        P: ProvideAwsCredentials + Send + Sync + 'static,
3472        D: DispatchSignedRequest + Send + Sync + 'static,
3473    {
3474        CodeBuildClient {
3475            client: Client::new_with(credentials_provider, request_dispatcher),
3476            region,
3477        }
3478    }
3479
3480    pub fn new_with_client(client: Client, region: region::Region) -> CodeBuildClient {
3481        CodeBuildClient { client, region }
3482    }
3483}
3484
3485#[async_trait]
3486impl CodeBuild for CodeBuildClient {
3487    /// <p>Deletes one or more builds.</p>
3488    async fn batch_delete_builds(
3489        &self,
3490        input: BatchDeleteBuildsInput,
3491    ) -> Result<BatchDeleteBuildsOutput, RusotoError<BatchDeleteBuildsError>> {
3492        let mut request = self.new_signed_request("POST", "/");
3493        request.add_header("x-amz-target", "CodeBuild_20161006.BatchDeleteBuilds");
3494        let encoded = serde_json::to_string(&input).unwrap();
3495        request.set_payload(Some(encoded));
3496
3497        let response = self
3498            .sign_and_dispatch(request, BatchDeleteBuildsError::from_response)
3499            .await?;
3500        let mut response = response;
3501        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3502        proto::json::ResponsePayload::new(&response).deserialize::<BatchDeleteBuildsOutput, _>()
3503    }
3504
3505    /// <p>Gets information about one or more builds.</p>
3506    async fn batch_get_builds(
3507        &self,
3508        input: BatchGetBuildsInput,
3509    ) -> Result<BatchGetBuildsOutput, RusotoError<BatchGetBuildsError>> {
3510        let mut request = self.new_signed_request("POST", "/");
3511        request.add_header("x-amz-target", "CodeBuild_20161006.BatchGetBuilds");
3512        let encoded = serde_json::to_string(&input).unwrap();
3513        request.set_payload(Some(encoded));
3514
3515        let response = self
3516            .sign_and_dispatch(request, BatchGetBuildsError::from_response)
3517            .await?;
3518        let mut response = response;
3519        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3520        proto::json::ResponsePayload::new(&response).deserialize::<BatchGetBuildsOutput, _>()
3521    }
3522
3523    /// <p>Gets information about one or more build projects.</p>
3524    async fn batch_get_projects(
3525        &self,
3526        input: BatchGetProjectsInput,
3527    ) -> Result<BatchGetProjectsOutput, RusotoError<BatchGetProjectsError>> {
3528        let mut request = self.new_signed_request("POST", "/");
3529        request.add_header("x-amz-target", "CodeBuild_20161006.BatchGetProjects");
3530        let encoded = serde_json::to_string(&input).unwrap();
3531        request.set_payload(Some(encoded));
3532
3533        let response = self
3534            .sign_and_dispatch(request, BatchGetProjectsError::from_response)
3535            .await?;
3536        let mut response = response;
3537        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3538        proto::json::ResponsePayload::new(&response).deserialize::<BatchGetProjectsOutput, _>()
3539    }
3540
3541    /// <p> Returns an array of report groups. </p>
3542    async fn batch_get_report_groups(
3543        &self,
3544        input: BatchGetReportGroupsInput,
3545    ) -> Result<BatchGetReportGroupsOutput, RusotoError<BatchGetReportGroupsError>> {
3546        let mut request = self.new_signed_request("POST", "/");
3547        request.add_header("x-amz-target", "CodeBuild_20161006.BatchGetReportGroups");
3548        let encoded = serde_json::to_string(&input).unwrap();
3549        request.set_payload(Some(encoded));
3550
3551        let response = self
3552            .sign_and_dispatch(request, BatchGetReportGroupsError::from_response)
3553            .await?;
3554        let mut response = response;
3555        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3556        proto::json::ResponsePayload::new(&response).deserialize::<BatchGetReportGroupsOutput, _>()
3557    }
3558
3559    /// <p> Returns an array of reports. </p>
3560    async fn batch_get_reports(
3561        &self,
3562        input: BatchGetReportsInput,
3563    ) -> Result<BatchGetReportsOutput, RusotoError<BatchGetReportsError>> {
3564        let mut request = self.new_signed_request("POST", "/");
3565        request.add_header("x-amz-target", "CodeBuild_20161006.BatchGetReports");
3566        let encoded = serde_json::to_string(&input).unwrap();
3567        request.set_payload(Some(encoded));
3568
3569        let response = self
3570            .sign_and_dispatch(request, BatchGetReportsError::from_response)
3571            .await?;
3572        let mut response = response;
3573        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3574        proto::json::ResponsePayload::new(&response).deserialize::<BatchGetReportsOutput, _>()
3575    }
3576
3577    /// <p>Creates a build project.</p>
3578    async fn create_project(
3579        &self,
3580        input: CreateProjectInput,
3581    ) -> Result<CreateProjectOutput, RusotoError<CreateProjectError>> {
3582        let mut request = self.new_signed_request("POST", "/");
3583        request.add_header("x-amz-target", "CodeBuild_20161006.CreateProject");
3584        let encoded = serde_json::to_string(&input).unwrap();
3585        request.set_payload(Some(encoded));
3586
3587        let response = self
3588            .sign_and_dispatch(request, CreateProjectError::from_response)
3589            .await?;
3590        let mut response = response;
3591        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3592        proto::json::ResponsePayload::new(&response).deserialize::<CreateProjectOutput, _>()
3593    }
3594
3595    /// <p> Creates a report group. A report group contains a collection of reports. </p>
3596    async fn create_report_group(
3597        &self,
3598        input: CreateReportGroupInput,
3599    ) -> Result<CreateReportGroupOutput, RusotoError<CreateReportGroupError>> {
3600        let mut request = self.new_signed_request("POST", "/");
3601        request.add_header("x-amz-target", "CodeBuild_20161006.CreateReportGroup");
3602        let encoded = serde_json::to_string(&input).unwrap();
3603        request.set_payload(Some(encoded));
3604
3605        let response = self
3606            .sign_and_dispatch(request, CreateReportGroupError::from_response)
3607            .await?;
3608        let mut response = response;
3609        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3610        proto::json::ResponsePayload::new(&response).deserialize::<CreateReportGroupOutput, _>()
3611    }
3612
3613    /// <p><p>For an existing AWS CodeBuild build project that has its source code stored in a GitHub or Bitbucket repository, enables AWS CodeBuild to start rebuilding the source code every time a code change is pushed to the repository.</p> <important> <p>If you enable webhooks for an AWS CodeBuild project, and the project is used as a build step in AWS CodePipeline, then two identical builds are created for each commit. One build is triggered through webhooks, and one through AWS CodePipeline. Because billing is on a per-build basis, you are billed for both builds. Therefore, if you are using AWS CodePipeline, we recommend that you disable webhooks in AWS CodeBuild. In the AWS CodeBuild console, clear the Webhook box. For more information, see step 5 in <a href="https://docs.aws.amazon.com/codebuild/latest/userguide/change-project.html#change-project-console">Change a Build Project&#39;s Settings</a>.</p> </important></p>
3614    async fn create_webhook(
3615        &self,
3616        input: CreateWebhookInput,
3617    ) -> Result<CreateWebhookOutput, RusotoError<CreateWebhookError>> {
3618        let mut request = self.new_signed_request("POST", "/");
3619        request.add_header("x-amz-target", "CodeBuild_20161006.CreateWebhook");
3620        let encoded = serde_json::to_string(&input).unwrap();
3621        request.set_payload(Some(encoded));
3622
3623        let response = self
3624            .sign_and_dispatch(request, CreateWebhookError::from_response)
3625            .await?;
3626        let mut response = response;
3627        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3628        proto::json::ResponsePayload::new(&response).deserialize::<CreateWebhookOutput, _>()
3629    }
3630
3631    /// <p> Deletes a build project. When you delete a project, its builds are not deleted. </p>
3632    async fn delete_project(
3633        &self,
3634        input: DeleteProjectInput,
3635    ) -> Result<DeleteProjectOutput, RusotoError<DeleteProjectError>> {
3636        let mut request = self.new_signed_request("POST", "/");
3637        request.add_header("x-amz-target", "CodeBuild_20161006.DeleteProject");
3638        let encoded = serde_json::to_string(&input).unwrap();
3639        request.set_payload(Some(encoded));
3640
3641        let response = self
3642            .sign_and_dispatch(request, DeleteProjectError::from_response)
3643            .await?;
3644        let mut response = response;
3645        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3646        proto::json::ResponsePayload::new(&response).deserialize::<DeleteProjectOutput, _>()
3647    }
3648
3649    /// <p> Deletes a report. </p>
3650    async fn delete_report(
3651        &self,
3652        input: DeleteReportInput,
3653    ) -> Result<DeleteReportOutput, RusotoError<DeleteReportError>> {
3654        let mut request = self.new_signed_request("POST", "/");
3655        request.add_header("x-amz-target", "CodeBuild_20161006.DeleteReport");
3656        let encoded = serde_json::to_string(&input).unwrap();
3657        request.set_payload(Some(encoded));
3658
3659        let response = self
3660            .sign_and_dispatch(request, DeleteReportError::from_response)
3661            .await?;
3662        let mut response = response;
3663        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3664        proto::json::ResponsePayload::new(&response).deserialize::<DeleteReportOutput, _>()
3665    }
3666
3667    /// <p> <code>DeleteReportGroup</code>: Deletes a report group. Before you delete a report group, you must delete its reports. Use <a href="https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ListReportsForReportGroup.html">ListReportsForReportGroup</a> to get the reports in a report group. Use <a href="https://docs.aws.amazon.com/codebuild/latest/APIReference/API_DeleteReport.html">DeleteReport</a> to delete the reports. If you call <code>DeleteReportGroup</code> for a report group that contains one or more reports, an exception is thrown. </p>
3668    async fn delete_report_group(
3669        &self,
3670        input: DeleteReportGroupInput,
3671    ) -> Result<DeleteReportGroupOutput, RusotoError<DeleteReportGroupError>> {
3672        let mut request = self.new_signed_request("POST", "/");
3673        request.add_header("x-amz-target", "CodeBuild_20161006.DeleteReportGroup");
3674        let encoded = serde_json::to_string(&input).unwrap();
3675        request.set_payload(Some(encoded));
3676
3677        let response = self
3678            .sign_and_dispatch(request, DeleteReportGroupError::from_response)
3679            .await?;
3680        let mut response = response;
3681        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3682        proto::json::ResponsePayload::new(&response).deserialize::<DeleteReportGroupOutput, _>()
3683    }
3684
3685    /// <p> Deletes a resource policy that is identified by its resource ARN. </p>
3686    async fn delete_resource_policy(
3687        &self,
3688        input: DeleteResourcePolicyInput,
3689    ) -> Result<DeleteResourcePolicyOutput, RusotoError<DeleteResourcePolicyError>> {
3690        let mut request = self.new_signed_request("POST", "/");
3691        request.add_header("x-amz-target", "CodeBuild_20161006.DeleteResourcePolicy");
3692        let encoded = serde_json::to_string(&input).unwrap();
3693        request.set_payload(Some(encoded));
3694
3695        let response = self
3696            .sign_and_dispatch(request, DeleteResourcePolicyError::from_response)
3697            .await?;
3698        let mut response = response;
3699        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3700        proto::json::ResponsePayload::new(&response).deserialize::<DeleteResourcePolicyOutput, _>()
3701    }
3702
3703    /// <p> Deletes a set of GitHub, GitHub Enterprise, or Bitbucket source credentials. </p>
3704    async fn delete_source_credentials(
3705        &self,
3706        input: DeleteSourceCredentialsInput,
3707    ) -> Result<DeleteSourceCredentialsOutput, RusotoError<DeleteSourceCredentialsError>> {
3708        let mut request = self.new_signed_request("POST", "/");
3709        request.add_header("x-amz-target", "CodeBuild_20161006.DeleteSourceCredentials");
3710        let encoded = serde_json::to_string(&input).unwrap();
3711        request.set_payload(Some(encoded));
3712
3713        let response = self
3714            .sign_and_dispatch(request, DeleteSourceCredentialsError::from_response)
3715            .await?;
3716        let mut response = response;
3717        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3718        proto::json::ResponsePayload::new(&response)
3719            .deserialize::<DeleteSourceCredentialsOutput, _>()
3720    }
3721
3722    /// <p>For an existing AWS CodeBuild build project that has its source code stored in a GitHub or Bitbucket repository, stops AWS CodeBuild from rebuilding the source code every time a code change is pushed to the repository.</p>
3723    async fn delete_webhook(
3724        &self,
3725        input: DeleteWebhookInput,
3726    ) -> Result<DeleteWebhookOutput, RusotoError<DeleteWebhookError>> {
3727        let mut request = self.new_signed_request("POST", "/");
3728        request.add_header("x-amz-target", "CodeBuild_20161006.DeleteWebhook");
3729        let encoded = serde_json::to_string(&input).unwrap();
3730        request.set_payload(Some(encoded));
3731
3732        let response = self
3733            .sign_and_dispatch(request, DeleteWebhookError::from_response)
3734            .await?;
3735        let mut response = response;
3736        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3737        proto::json::ResponsePayload::new(&response).deserialize::<DeleteWebhookOutput, _>()
3738    }
3739
3740    /// <p> Returns a list of details about test cases for a report. </p>
3741    async fn describe_test_cases(
3742        &self,
3743        input: DescribeTestCasesInput,
3744    ) -> Result<DescribeTestCasesOutput, RusotoError<DescribeTestCasesError>> {
3745        let mut request = self.new_signed_request("POST", "/");
3746        request.add_header("x-amz-target", "CodeBuild_20161006.DescribeTestCases");
3747        let encoded = serde_json::to_string(&input).unwrap();
3748        request.set_payload(Some(encoded));
3749
3750        let response = self
3751            .sign_and_dispatch(request, DescribeTestCasesError::from_response)
3752            .await?;
3753        let mut response = response;
3754        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3755        proto::json::ResponsePayload::new(&response).deserialize::<DescribeTestCasesOutput, _>()
3756    }
3757
3758    /// <p> Gets a resource policy that is identified by its resource ARN. </p>
3759    async fn get_resource_policy(
3760        &self,
3761        input: GetResourcePolicyInput,
3762    ) -> Result<GetResourcePolicyOutput, RusotoError<GetResourcePolicyError>> {
3763        let mut request = self.new_signed_request("POST", "/");
3764        request.add_header("x-amz-target", "CodeBuild_20161006.GetResourcePolicy");
3765        let encoded = serde_json::to_string(&input).unwrap();
3766        request.set_payload(Some(encoded));
3767
3768        let response = self
3769            .sign_and_dispatch(request, GetResourcePolicyError::from_response)
3770            .await?;
3771        let mut response = response;
3772        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3773        proto::json::ResponsePayload::new(&response).deserialize::<GetResourcePolicyOutput, _>()
3774    }
3775
3776    /// <p> Imports the source repository credentials for an AWS CodeBuild project that has its source code stored in a GitHub, GitHub Enterprise, or Bitbucket repository. </p>
3777    async fn import_source_credentials(
3778        &self,
3779        input: ImportSourceCredentialsInput,
3780    ) -> Result<ImportSourceCredentialsOutput, RusotoError<ImportSourceCredentialsError>> {
3781        let mut request = self.new_signed_request("POST", "/");
3782        request.add_header("x-amz-target", "CodeBuild_20161006.ImportSourceCredentials");
3783        let encoded = serde_json::to_string(&input).unwrap();
3784        request.set_payload(Some(encoded));
3785
3786        let response = self
3787            .sign_and_dispatch(request, ImportSourceCredentialsError::from_response)
3788            .await?;
3789        let mut response = response;
3790        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3791        proto::json::ResponsePayload::new(&response)
3792            .deserialize::<ImportSourceCredentialsOutput, _>()
3793    }
3794
3795    /// <p>Resets the cache for a project.</p>
3796    async fn invalidate_project_cache(
3797        &self,
3798        input: InvalidateProjectCacheInput,
3799    ) -> Result<InvalidateProjectCacheOutput, RusotoError<InvalidateProjectCacheError>> {
3800        let mut request = self.new_signed_request("POST", "/");
3801        request.add_header("x-amz-target", "CodeBuild_20161006.InvalidateProjectCache");
3802        let encoded = serde_json::to_string(&input).unwrap();
3803        request.set_payload(Some(encoded));
3804
3805        let response = self
3806            .sign_and_dispatch(request, InvalidateProjectCacheError::from_response)
3807            .await?;
3808        let mut response = response;
3809        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3810        proto::json::ResponsePayload::new(&response)
3811            .deserialize::<InvalidateProjectCacheOutput, _>()
3812    }
3813
3814    /// <p>Gets a list of build IDs, with each build ID representing a single build.</p>
3815    async fn list_builds(
3816        &self,
3817        input: ListBuildsInput,
3818    ) -> Result<ListBuildsOutput, RusotoError<ListBuildsError>> {
3819        let mut request = self.new_signed_request("POST", "/");
3820        request.add_header("x-amz-target", "CodeBuild_20161006.ListBuilds");
3821        let encoded = serde_json::to_string(&input).unwrap();
3822        request.set_payload(Some(encoded));
3823
3824        let response = self
3825            .sign_and_dispatch(request, ListBuildsError::from_response)
3826            .await?;
3827        let mut response = response;
3828        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3829        proto::json::ResponsePayload::new(&response).deserialize::<ListBuildsOutput, _>()
3830    }
3831
3832    /// <p>Gets a list of build IDs for the specified build project, with each build ID representing a single build.</p>
3833    async fn list_builds_for_project(
3834        &self,
3835        input: ListBuildsForProjectInput,
3836    ) -> Result<ListBuildsForProjectOutput, RusotoError<ListBuildsForProjectError>> {
3837        let mut request = self.new_signed_request("POST", "/");
3838        request.add_header("x-amz-target", "CodeBuild_20161006.ListBuildsForProject");
3839        let encoded = serde_json::to_string(&input).unwrap();
3840        request.set_payload(Some(encoded));
3841
3842        let response = self
3843            .sign_and_dispatch(request, ListBuildsForProjectError::from_response)
3844            .await?;
3845        let mut response = response;
3846        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3847        proto::json::ResponsePayload::new(&response).deserialize::<ListBuildsForProjectOutput, _>()
3848    }
3849
3850    /// <p>Gets information about Docker images that are managed by AWS CodeBuild.</p>
3851    async fn list_curated_environment_images(
3852        &self,
3853    ) -> Result<ListCuratedEnvironmentImagesOutput, RusotoError<ListCuratedEnvironmentImagesError>>
3854    {
3855        let mut request = self.new_signed_request("POST", "/");
3856        request.add_header(
3857            "x-amz-target",
3858            "CodeBuild_20161006.ListCuratedEnvironmentImages",
3859        );
3860        request.set_payload(Some(bytes::Bytes::from_static(b"{}")));
3861
3862        let response = self
3863            .sign_and_dispatch(request, ListCuratedEnvironmentImagesError::from_response)
3864            .await?;
3865        let mut response = response;
3866        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3867        proto::json::ResponsePayload::new(&response)
3868            .deserialize::<ListCuratedEnvironmentImagesOutput, _>()
3869    }
3870
3871    /// <p>Gets a list of build project names, with each build project name representing a single build project.</p>
3872    async fn list_projects(
3873        &self,
3874        input: ListProjectsInput,
3875    ) -> Result<ListProjectsOutput, RusotoError<ListProjectsError>> {
3876        let mut request = self.new_signed_request("POST", "/");
3877        request.add_header("x-amz-target", "CodeBuild_20161006.ListProjects");
3878        let encoded = serde_json::to_string(&input).unwrap();
3879        request.set_payload(Some(encoded));
3880
3881        let response = self
3882            .sign_and_dispatch(request, ListProjectsError::from_response)
3883            .await?;
3884        let mut response = response;
3885        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3886        proto::json::ResponsePayload::new(&response).deserialize::<ListProjectsOutput, _>()
3887    }
3888
3889    /// <p> Gets a list ARNs for the report groups in the current AWS account. </p>
3890    async fn list_report_groups(
3891        &self,
3892        input: ListReportGroupsInput,
3893    ) -> Result<ListReportGroupsOutput, RusotoError<ListReportGroupsError>> {
3894        let mut request = self.new_signed_request("POST", "/");
3895        request.add_header("x-amz-target", "CodeBuild_20161006.ListReportGroups");
3896        let encoded = serde_json::to_string(&input).unwrap();
3897        request.set_payload(Some(encoded));
3898
3899        let response = self
3900            .sign_and_dispatch(request, ListReportGroupsError::from_response)
3901            .await?;
3902        let mut response = response;
3903        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3904        proto::json::ResponsePayload::new(&response).deserialize::<ListReportGroupsOutput, _>()
3905    }
3906
3907    /// <p> Returns a list of ARNs for the reports in the current AWS account. </p>
3908    async fn list_reports(
3909        &self,
3910        input: ListReportsInput,
3911    ) -> Result<ListReportsOutput, RusotoError<ListReportsError>> {
3912        let mut request = self.new_signed_request("POST", "/");
3913        request.add_header("x-amz-target", "CodeBuild_20161006.ListReports");
3914        let encoded = serde_json::to_string(&input).unwrap();
3915        request.set_payload(Some(encoded));
3916
3917        let response = self
3918            .sign_and_dispatch(request, ListReportsError::from_response)
3919            .await?;
3920        let mut response = response;
3921        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3922        proto::json::ResponsePayload::new(&response).deserialize::<ListReportsOutput, _>()
3923    }
3924
3925    /// <p> Returns a list of ARNs for the reports that belong to a <code>ReportGroup</code>. </p>
3926    async fn list_reports_for_report_group(
3927        &self,
3928        input: ListReportsForReportGroupInput,
3929    ) -> Result<ListReportsForReportGroupOutput, RusotoError<ListReportsForReportGroupError>> {
3930        let mut request = self.new_signed_request("POST", "/");
3931        request.add_header(
3932            "x-amz-target",
3933            "CodeBuild_20161006.ListReportsForReportGroup",
3934        );
3935        let encoded = serde_json::to_string(&input).unwrap();
3936        request.set_payload(Some(encoded));
3937
3938        let response = self
3939            .sign_and_dispatch(request, ListReportsForReportGroupError::from_response)
3940            .await?;
3941        let mut response = response;
3942        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3943        proto::json::ResponsePayload::new(&response)
3944            .deserialize::<ListReportsForReportGroupOutput, _>()
3945    }
3946
3947    /// <p> Gets a list of projects that are shared with other AWS accounts or users. </p>
3948    async fn list_shared_projects(
3949        &self,
3950        input: ListSharedProjectsInput,
3951    ) -> Result<ListSharedProjectsOutput, RusotoError<ListSharedProjectsError>> {
3952        let mut request = self.new_signed_request("POST", "/");
3953        request.add_header("x-amz-target", "CodeBuild_20161006.ListSharedProjects");
3954        let encoded = serde_json::to_string(&input).unwrap();
3955        request.set_payload(Some(encoded));
3956
3957        let response = self
3958            .sign_and_dispatch(request, ListSharedProjectsError::from_response)
3959            .await?;
3960        let mut response = response;
3961        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3962        proto::json::ResponsePayload::new(&response).deserialize::<ListSharedProjectsOutput, _>()
3963    }
3964
3965    /// <p> Gets a list of report groups that are shared with other AWS accounts or users. </p>
3966    async fn list_shared_report_groups(
3967        &self,
3968        input: ListSharedReportGroupsInput,
3969    ) -> Result<ListSharedReportGroupsOutput, RusotoError<ListSharedReportGroupsError>> {
3970        let mut request = self.new_signed_request("POST", "/");
3971        request.add_header("x-amz-target", "CodeBuild_20161006.ListSharedReportGroups");
3972        let encoded = serde_json::to_string(&input).unwrap();
3973        request.set_payload(Some(encoded));
3974
3975        let response = self
3976            .sign_and_dispatch(request, ListSharedReportGroupsError::from_response)
3977            .await?;
3978        let mut response = response;
3979        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3980        proto::json::ResponsePayload::new(&response)
3981            .deserialize::<ListSharedReportGroupsOutput, _>()
3982    }
3983
3984    /// <p> Returns a list of <code>SourceCredentialsInfo</code> objects. </p>
3985    async fn list_source_credentials(
3986        &self,
3987    ) -> Result<ListSourceCredentialsOutput, RusotoError<ListSourceCredentialsError>> {
3988        let mut request = self.new_signed_request("POST", "/");
3989        request.add_header("x-amz-target", "CodeBuild_20161006.ListSourceCredentials");
3990        request.set_payload(Some(bytes::Bytes::from_static(b"{}")));
3991
3992        let response = self
3993            .sign_and_dispatch(request, ListSourceCredentialsError::from_response)
3994            .await?;
3995        let mut response = response;
3996        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3997        proto::json::ResponsePayload::new(&response).deserialize::<ListSourceCredentialsOutput, _>()
3998    }
3999
4000    /// <p> Stores a resource policy for the ARN of a <code>Project</code> or <code>ReportGroup</code> object. </p>
4001    async fn put_resource_policy(
4002        &self,
4003        input: PutResourcePolicyInput,
4004    ) -> Result<PutResourcePolicyOutput, RusotoError<PutResourcePolicyError>> {
4005        let mut request = self.new_signed_request("POST", "/");
4006        request.add_header("x-amz-target", "CodeBuild_20161006.PutResourcePolicy");
4007        let encoded = serde_json::to_string(&input).unwrap();
4008        request.set_payload(Some(encoded));
4009
4010        let response = self
4011            .sign_and_dispatch(request, PutResourcePolicyError::from_response)
4012            .await?;
4013        let mut response = response;
4014        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4015        proto::json::ResponsePayload::new(&response).deserialize::<PutResourcePolicyOutput, _>()
4016    }
4017
4018    /// <p>Starts running a build.</p>
4019    async fn start_build(
4020        &self,
4021        input: StartBuildInput,
4022    ) -> Result<StartBuildOutput, RusotoError<StartBuildError>> {
4023        let mut request = self.new_signed_request("POST", "/");
4024        request.add_header("x-amz-target", "CodeBuild_20161006.StartBuild");
4025        let encoded = serde_json::to_string(&input).unwrap();
4026        request.set_payload(Some(encoded));
4027
4028        let response = self
4029            .sign_and_dispatch(request, StartBuildError::from_response)
4030            .await?;
4031        let mut response = response;
4032        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4033        proto::json::ResponsePayload::new(&response).deserialize::<StartBuildOutput, _>()
4034    }
4035
4036    /// <p>Attempts to stop running a build.</p>
4037    async fn stop_build(
4038        &self,
4039        input: StopBuildInput,
4040    ) -> Result<StopBuildOutput, RusotoError<StopBuildError>> {
4041        let mut request = self.new_signed_request("POST", "/");
4042        request.add_header("x-amz-target", "CodeBuild_20161006.StopBuild");
4043        let encoded = serde_json::to_string(&input).unwrap();
4044        request.set_payload(Some(encoded));
4045
4046        let response = self
4047            .sign_and_dispatch(request, StopBuildError::from_response)
4048            .await?;
4049        let mut response = response;
4050        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4051        proto::json::ResponsePayload::new(&response).deserialize::<StopBuildOutput, _>()
4052    }
4053
4054    /// <p>Changes the settings of a build project.</p>
4055    async fn update_project(
4056        &self,
4057        input: UpdateProjectInput,
4058    ) -> Result<UpdateProjectOutput, RusotoError<UpdateProjectError>> {
4059        let mut request = self.new_signed_request("POST", "/");
4060        request.add_header("x-amz-target", "CodeBuild_20161006.UpdateProject");
4061        let encoded = serde_json::to_string(&input).unwrap();
4062        request.set_payload(Some(encoded));
4063
4064        let response = self
4065            .sign_and_dispatch(request, UpdateProjectError::from_response)
4066            .await?;
4067        let mut response = response;
4068        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4069        proto::json::ResponsePayload::new(&response).deserialize::<UpdateProjectOutput, _>()
4070    }
4071
4072    /// <p> Updates a report group. </p>
4073    async fn update_report_group(
4074        &self,
4075        input: UpdateReportGroupInput,
4076    ) -> Result<UpdateReportGroupOutput, RusotoError<UpdateReportGroupError>> {
4077        let mut request = self.new_signed_request("POST", "/");
4078        request.add_header("x-amz-target", "CodeBuild_20161006.UpdateReportGroup");
4079        let encoded = serde_json::to_string(&input).unwrap();
4080        request.set_payload(Some(encoded));
4081
4082        let response = self
4083            .sign_and_dispatch(request, UpdateReportGroupError::from_response)
4084            .await?;
4085        let mut response = response;
4086        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4087        proto::json::ResponsePayload::new(&response).deserialize::<UpdateReportGroupOutput, _>()
4088    }
4089
4090    /// <p><p> Updates the webhook associated with an AWS CodeBuild build project. </p> <note> <p> If you use Bitbucket for your repository, <code>rotateSecret</code> is ignored. </p> </note></p>
4091    async fn update_webhook(
4092        &self,
4093        input: UpdateWebhookInput,
4094    ) -> Result<UpdateWebhookOutput, RusotoError<UpdateWebhookError>> {
4095        let mut request = self.new_signed_request("POST", "/");
4096        request.add_header("x-amz-target", "CodeBuild_20161006.UpdateWebhook");
4097        let encoded = serde_json::to_string(&input).unwrap();
4098        request.set_payload(Some(encoded));
4099
4100        let response = self
4101            .sign_and_dispatch(request, UpdateWebhookError::from_response)
4102            .await?;
4103        let mut response = response;
4104        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4105        proto::json::ResponsePayload::new(&response).deserialize::<UpdateWebhookOutput, _>()
4106    }
4107}