diff --git a/Package.swift b/Package.swift index b472e531b30..73f6b928f7c 100644 --- a/Package.swift +++ b/Package.swift @@ -22,6 +22,7 @@ extension Target.Dependency { static var awsSDKEventStreamsAuth: Self { "AWSSDKEventStreamsAuth" } static var awsSDKHTTPAuth: Self { "AWSSDKHTTPAuth" } static var awsSDKIdentity: Self { "AWSSDKIdentity" } + static var awsSDKChecksums: Self { "AWSSDKChecksums" } // CRT module static var crt: Self { .product(name: "AwsCommonRuntimeKit", package: "aws-crt-swift") } @@ -30,6 +31,7 @@ extension Target.Dependency { static var clientRuntime: Self { .product(name: "ClientRuntime", package: "smithy-swift") } static var smithy: Self { .product(name: "Smithy", package: "smithy-swift") } static var smithyChecksumsAPI: Self { .product(name: "SmithyChecksumsAPI", package: "smithy-swift") } + static var smithyChecksums: Self { .product(name: "SmithyChecksums", package: "smithy-swift") } static var smithyEventStreams: Self { .product(name: "SmithyEventStreams", package: "smithy-swift") } static var smithyEventStreamsAPI: Self { .product(name: "SmithyEventStreamsAPI", package: "smithy-swift") } static var smithyEventStreamsAuthAPI: Self { .product(name: "SmithyEventStreamsAuthAPI", package: "smithy-swift") } @@ -41,6 +43,7 @@ extension Target.Dependency { static var smithyRetriesAPI: Self { .product(name: "SmithyRetriesAPI", package: "smithy-swift") } static var smithyWaitersAPI: Self { .product(name: "SmithyWaitersAPI", package: "smithy-swift") } static var smithyTestUtils: Self { .product(name: "SmithyTestUtil", package: "smithy-swift") } + static var smithyStreams: Self { .product(name: "SmithyStreams", package: "smithy-swift") } } // MARK: - Base Package @@ -59,6 +62,7 @@ let package = Package( .library(name: "AWSSDKEventStreamsAuth", targets: ["AWSSDKEventStreamsAuth"]), .library(name: "AWSSDKHTTPAuth", targets: ["AWSSDKHTTPAuth"]), .library(name: "AWSSDKIdentity", targets: ["AWSSDKIdentity"]), + .library(name: "AWSSDKChecksums", targets: ["AWSSDKChecksums"]), ], targets: [ .target( @@ -96,7 +100,7 @@ let package = Package( ), .target( name: "AWSSDKHTTPAuth", - dependencies: [.crt, .smithy, .clientRuntime, .smithyHTTPAuth, "AWSSDKIdentity"], + dependencies: [.crt, .smithy, .clientRuntime, .smithyHTTPAuth, "AWSSDKIdentity", "AWSSDKChecksums"], path: "./Sources/Core/AWSSDKHTTPAuth" ), .target( @@ -104,6 +108,11 @@ let package = Package( dependencies: [.crt, .smithy, .clientRuntime, .smithyIdentity, .smithyIdentityAPI, .smithyHTTPAPI, .awsSDKCommon], path: "./Sources/Core/AWSSDKIdentity" ), + .target( + name: "AWSSDKChecksums", + dependencies: [.crt, .smithy, .clientRuntime, .smithyChecksumsAPI, .smithyChecksums, .smithyHTTPAPI], + path: "./Sources/Core/AWSSDKChecksums" + ), .testTarget( name: "AWSClientRuntimeTests", dependencies: [.awsClientRuntime, .clientRuntime, .smithyTestUtils, .awsSDKCommon], @@ -112,7 +121,7 @@ let package = Package( ), .testTarget( name: "AWSSDKEventStreamsAuthTests", - dependencies: ["AWSClientRuntime", "AWSSDKEventStreamsAuth"], + dependencies: ["AWSClientRuntime", "AWSSDKEventStreamsAuth", .smithyStreams], path: "./Tests/Core/AWSSDKEventStreamsAuthTests" ), .testTarget( @@ -186,11 +195,13 @@ let serviceTargetDependencies: [Target.Dependency] = [ .smithyEventStreamsAuthAPI, .smithyEventStreams, .smithyChecksumsAPI, + .smithyChecksums, .smithyWaitersAPI, .awsSDKCommon, .awsSDKIdentity, .awsSDKHTTPAuth, .awsSDKEventStreamsAuth, + .awsSDKChecksums, ] func addServiceTarget(_ name: String) { @@ -325,7 +336,7 @@ func addProtocolTests() { ) let testTarget = protocolTest.buildOnly ? nil : Target.testTarget( name: "\(protocolTest.name)Tests", - dependencies: [.smithyTestUtils, .smithyWaitersAPI, .byNameItem(name: protocolTest.name, condition: nil)], + dependencies: [.smithyTestUtils, .smithyStreams, .smithyWaitersAPI, .byNameItem(name: protocolTest.name, condition: nil)], path: "\(protocolTest.testPath ?? protocolTest.sourcePath)/swift-codegen/Tests/\(protocolTest.name)Tests" ) package.targets += [target, testTarget].compactMap { $0 } @@ -369,11 +380,13 @@ let serviceTargets: [String] = [ "AWSAppRunner", "AWSAppStream", "AWSAppSync", + "AWSAppTest", "AWSAppflow", "AWSApplicationAutoScaling", "AWSApplicationCostProfiler", "AWSApplicationDiscoveryService", "AWSApplicationInsights", + "AWSApplicationSignals", "AWSArtifact", "AWSAthena", "AWSAuditManager", @@ -383,7 +396,6 @@ let serviceTargets: [String] = [ "AWSBCMDataExports", "AWSBackup", "AWSBackupGateway", - "AWSBackupStorage", "AWSBatch", "AWSBedrock", "AWSBedrockAgent", @@ -618,6 +630,7 @@ let serviceTargets: [String] = [ "AWSPaymentCryptography", "AWSPaymentCryptographyData", "AWSPcaConnectorAd", + "AWSPcaConnectorScep", "AWSPersonalize", "AWSPersonalizeEvents", "AWSPersonalizeRuntime", diff --git a/Sources/Core/AWSSDKForSwift/Documentation.docc/AWSSDKForSwift.md b/Sources/Core/AWSSDKForSwift/Documentation.docc/AWSSDKForSwift.md index ebd4d8a716a..0df5cab4fda 100644 --- a/Sources/Core/AWSSDKForSwift/Documentation.docc/AWSSDKForSwift.md +++ b/Sources/Core/AWSSDKForSwift/Documentation.docc/AWSSDKForSwift.md @@ -51,6 +51,8 @@ This SDK is open-source. Code is available on Github [here](https://github.com/ [AWSAppSync](../../../../../swift/api/awsappsync/latest) +[AWSAppTest](../../../../../swift/api/awsapptest/latest) + [AWSAppflow](../../../../../swift/api/awsappflow/latest) [AWSApplicationAutoScaling](../../../../../swift/api/awsapplicationautoscaling/latest) @@ -61,6 +63,8 @@ This SDK is open-source. Code is available on Github [here](https://github.com/ [AWSApplicationInsights](../../../../../swift/api/awsapplicationinsights/latest) +[AWSApplicationSignals](../../../../../swift/api/awsapplicationsignals/latest) + [AWSArtifact](../../../../../swift/api/awsartifact/latest) [AWSAthena](../../../../../swift/api/awsathena/latest) @@ -79,8 +83,6 @@ This SDK is open-source. Code is available on Github [here](https://github.com/ [AWSBackupGateway](../../../../../swift/api/awsbackupgateway/latest) -[AWSBackupStorage](../../../../../swift/api/awsbackupstorage/latest) - [AWSBatch](../../../../../swift/api/awsbatch/latest) [AWSBedrock](../../../../../swift/api/awsbedrock/latest) @@ -549,6 +551,8 @@ This SDK is open-source. Code is available on Github [here](https://github.com/ [AWSPcaConnectorAd](../../../../../swift/api/awspcaconnectorad/latest) +[AWSPcaConnectorScep](../../../../../swift/api/awspcaconnectorscep/latest) + [AWSPersonalize](../../../../../swift/api/awspersonalize/latest) [AWSPersonalizeEvents](../../../../../swift/api/awspersonalizeevents/latest) diff --git a/Sources/Services/AWSACMPCA/Sources/AWSACMPCA/ACMPCAClient.swift b/Sources/Services/AWSACMPCA/Sources/AWSACMPCA/ACMPCAClient.swift index 02273e32640..fd75406cc8f 100644 --- a/Sources/Services/AWSACMPCA/Sources/AWSACMPCA/ACMPCAClient.swift +++ b/Sources/Services/AWSACMPCA/Sources/AWSACMPCA/ACMPCAClient.swift @@ -158,7 +158,7 @@ extension ACMPCAClient { extension ACMPCAClient { /// Performs the `CreateCertificateAuthority` operation on the `ACMPrivateCA` service. /// - /// Creates a root or subordinate private certificate authority (CA). You must specify the CA configuration, an optional configuration for Online Certificate Status Protocol (OCSP) and/or a certificate revocation list (CRL), the CA type, and an optional idempotency token to avoid accidental creation of multiple CAs. The CA configuration specifies the name of the algorithm and key size to be used to create the CA private key, the type of signing algorithm that the CA uses, and X.500 subject information. The OCSP configuration can optionally specify a custom URL for the OCSP responder. The CRL configuration specifies the CRL expiration period in days (the validity period of the CRL), the Amazon S3 bucket that will contain the CRL, and a CNAME alias for the S3 bucket that is included in certificates issued by the CA. If successful, this action returns the Amazon Resource Name (ARN) of the CA. Both Amazon Web Services Private CA and the IAM principal must have permission to write to the S3 bucket that you specify. If the IAM principal making the call does not have permission to write to the bucket, then an exception is thrown. For more information, see [Access policies for CRLs in Amazon S3](https://docs.aws.amazon.com/privateca/latest/userguide/crl-planning.html#s3-policies). Amazon Web Services Private CA assets that are stored in Amazon S3 can be protected with encryption. For more information, see [Encrypting Your CRLs](https://docs.aws.amazon.com/privateca/latest/userguide/PcaCreateCa.html#crl-encryption). + /// Creates a root or subordinate private certificate authority (CA). You must specify the CA configuration, an optional configuration for Online Certificate Status Protocol (OCSP) and/or a certificate revocation list (CRL), the CA type, and an optional idempotency token to avoid accidental creation of multiple CAs. The CA configuration specifies the name of the algorithm and key size to be used to create the CA private key, the type of signing algorithm that the CA uses, and X.500 subject information. The OCSP configuration can optionally specify a custom URL for the OCSP responder. The CRL configuration specifies the CRL expiration period in days (the validity period of the CRL), the Amazon S3 bucket that will contain the CRL, and a CNAME alias for the S3 bucket that is included in certificates issued by the CA. If successful, this action returns the Amazon Resource Name (ARN) of the CA. Both Amazon Web Services Private CA and the IAM principal must have permission to write to the S3 bucket that you specify. If the IAM principal making the call does not have permission to write to the bucket, then an exception is thrown. For more information, see [Access policies for CRLs in Amazon S3](https://docs.aws.amazon.com/privateca/latest/userguide/crl-planning.html#s3-policies). Amazon Web Services Private CA assets that are stored in Amazon S3 can be protected with encryption. For more information, see [Encrypting Your CRLs](https://docs.aws.amazon.com/privateca/latest/userguide/crl-planning.html#crl-encryption). /// /// - Parameter CreateCertificateAuthorityInput : [no documentation found] /// @@ -867,44 +867,45 @@ extension ACMPCAClient { /// /// Enforcement of Critical Constraints Amazon Web Services Private CA allows the following extensions to be marked critical in the imported CA certificate or chain. /// - /// * Basic constraints (must be marked critical) + /// * Authority key identifier /// - /// * Subject alternative names + /// * Basic constraints (must be marked critical) /// - /// * Key usage + /// * Certificate policies /// /// * Extended key usage /// - /// * Authority key identifier - /// - /// * Subject key identifier + /// * Inhibit anyPolicy /// /// * Issuer alternative name /// - /// * Subject directory attributes - /// - /// * Subject information access + /// * Key usage /// - /// * Certificate policies + /// * Name constraints /// /// * Policy mappings /// - /// * Inhibit anyPolicy + /// * Subject alternative name /// + /// * Subject directory attributes /// - /// Amazon Web Services Private CA rejects the following extensions when they are marked critical in an imported CA certificate or chain. + /// * Subject key identifier /// - /// * Name constraints + /// * Subject information access /// - /// * Policy constraints /// - /// * CRL distribution points + /// Amazon Web Services Private CA rejects the following extensions when they are marked critical in an imported CA certificate or chain. /// /// * Authority information access /// + /// * CRL distribution points + /// /// * Freshest CRL /// - /// * Any other extension + /// * Policy constraints + /// + /// + /// Amazon Web Services Private Certificate Authority will also reject any other extension marked as critical not contained on the preceding list of allowed extensions. /// /// - Parameter ImportCertificateAuthorityCertificateInput : [no documentation found] /// diff --git a/Sources/Services/AWSACMPCA/Sources/AWSACMPCA/Models.swift b/Sources/Services/AWSACMPCA/Sources/AWSACMPCA/Models.swift index 4241648c8b0..3fb30ad8fa8 100644 --- a/Sources/Services/AWSACMPCA/Sources/AWSACMPCA/Models.swift +++ b/Sources/Services/AWSACMPCA/Sources/AWSACMPCA/Models.swift @@ -700,7 +700,7 @@ extension ACMPCAClientTypes { } extension ACMPCAClientTypes { - /// Contains configuration information for a certificate revocation list (CRL). Your private certificate authority (CA) creates base CRLs. Delta CRLs are not supported. You can enable CRLs for your new or an existing private CA by setting the Enabled parameter to true. Your private CA writes CRLs to an S3 bucket that you specify in the S3BucketName parameter. You can hide the name of your bucket by specifying a value for the CustomCname parameter. Your private CA by default copies the CNAME or the S3 bucket name to the CRL Distribution Points extension of each certificate it issues. If you want to configure this default behavior to be something different, you can set the CrlDistributionPointExtensionConfiguration parameter. Your S3 bucket policy must give write permission to Amazon Web Services Private CA. Amazon Web Services Private CA assets that are stored in Amazon S3 can be protected with encryption. For more information, see [Encrypting Your CRLs](https://docs.aws.amazon.com/privateca/latest/userguide/PcaCreateCa.html#crl-encryption). Your private CA uses the value in the ExpirationInDays parameter to calculate the nextUpdate field in the CRL. The CRL is refreshed prior to a certificate's expiration date or when a certificate is revoked. When a certificate is revoked, it appears in the CRL until the certificate expires, and then in one additional CRL after expiration, and it always appears in the audit report. A CRL is typically updated approximately 30 minutes after a certificate is revoked. If for any reason a CRL update fails, Amazon Web Services Private CA makes further attempts every 15 minutes. CRLs contain the following fields: + /// Contains configuration information for a certificate revocation list (CRL). Your private certificate authority (CA) creates base CRLs. Delta CRLs are not supported. You can enable CRLs for your new or an existing private CA by setting the Enabled parameter to true. Your private CA writes CRLs to an S3 bucket that you specify in the S3BucketName parameter. You can hide the name of your bucket by specifying a value for the CustomCname parameter. Your private CA by default copies the CNAME or the S3 bucket name to the CRL Distribution Points extension of each certificate it issues. If you want to configure this default behavior to be something different, you can set the CrlDistributionPointExtensionConfiguration parameter. Your S3 bucket policy must give write permission to Amazon Web Services Private CA. Amazon Web Services Private CA assets that are stored in Amazon S3 can be protected with encryption. For more information, see [Encrypting Your CRLs](https://docs.aws.amazon.com/privateca/latest/userguide/crl-planning.html#crl-encryption). Your private CA uses the value in the ExpirationInDays parameter to calculate the nextUpdate field in the CRL. The CRL is refreshed prior to a certificate's expiration date or when a certificate is revoked. When a certificate is revoked, it appears in the CRL until the certificate expires, and then in one additional CRL after expiration, and it always appears in the audit report. A CRL is typically updated approximately 30 minutes after a certificate is revoked. If for any reason a CRL update fails, Amazon Web Services Private CA makes further attempts every 15 minutes. CRLs contain the following fields: /// /// * Version: The current version number defined in RFC 5280 is V2. The integer value is 0x1. /// diff --git a/Sources/Services/AWSAccessAnalyzer/Sources/AWSAccessAnalyzer/AccessAnalyzerClient.swift b/Sources/Services/AWSAccessAnalyzer/Sources/AWSAccessAnalyzer/AccessAnalyzerClient.swift index e55268eb564..d6c1cf4568e 100644 --- a/Sources/Services/AWSAccessAnalyzer/Sources/AWSAccessAnalyzer/AccessAnalyzerClient.swift +++ b/Sources/Services/AWSAccessAnalyzer/Sources/AWSAccessAnalyzer/AccessAnalyzerClient.swift @@ -364,6 +364,59 @@ extension AccessAnalyzerClient { return result } + /// Performs the `CheckNoPublicAccess` operation on the `AccessAnalyzer` service. + /// + /// Checks whether a resource policy can grant public access to the specified resource type. + /// + /// - Parameter CheckNoPublicAccessInput : [no documentation found] + /// + /// - Returns: `CheckNoPublicAccessOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You do not have sufficient access to perform this action. + /// - `InternalServerException` : Internal server error. + /// - `InvalidParameterException` : The specified parameter is invalid. + /// - `ThrottlingException` : Throttling limit exceeded error. + /// - `UnprocessableEntityException` : The specified entity could not be processed. + /// - `ValidationException` : Validation exception error. + public func checkNoPublicAccess(input: CheckNoPublicAccessInput) async throws -> CheckNoPublicAccessOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "checkNoPublicAccess") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "access-analyzer") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "checkNoPublicAccess") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(CheckNoPublicAccessInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: CheckNoPublicAccessInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(CheckNoPublicAccessOutput.httpOutput(from:), CheckNoPublicAccessOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `CreateAccessPreview` operation on the `AccessAnalyzer` service. /// /// Creates an access preview that allows you to preview IAM Access Analyzer findings for your resource before deploying resource permissions. @@ -630,6 +683,55 @@ extension AccessAnalyzerClient { return result } + /// Performs the `GenerateFindingRecommendation` operation on the `AccessAnalyzer` service. + /// + /// Creates a recommendation for an unused permissions finding. + /// + /// - Parameter GenerateFindingRecommendationInput : [no documentation found] + /// + /// - Returns: `GenerateFindingRecommendationOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You do not have sufficient access to perform this action. + /// - `InternalServerException` : Internal server error. + /// - `ThrottlingException` : Throttling limit exceeded error. + /// - `ValidationException` : Validation exception error. + public func generateFindingRecommendation(input: GenerateFindingRecommendationInput) async throws -> GenerateFindingRecommendationOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "generateFindingRecommendation") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "access-analyzer") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "generateFindingRecommendation") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GenerateFindingRecommendationInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(GenerateFindingRecommendationInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GenerateFindingRecommendationOutput.httpOutput(from:), GenerateFindingRecommendationOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `GetAccessPreview` operation on the `AccessAnalyzer` service. /// /// Retrieves information about an access preview for the specified analyzer. @@ -878,6 +980,56 @@ extension AccessAnalyzerClient { return result } + /// Performs the `GetFindingRecommendation` operation on the `AccessAnalyzer` service. + /// + /// Retrieves information about a finding recommendation for the specified analyzer. + /// + /// - Parameter GetFindingRecommendationInput : [no documentation found] + /// + /// - Returns: `GetFindingRecommendationOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You do not have sufficient access to perform this action. + /// - `InternalServerException` : Internal server error. + /// - `ResourceNotFoundException` : The specified resource could not be found. + /// - `ThrottlingException` : Throttling limit exceeded error. + /// - `ValidationException` : Validation exception error. + public func getFindingRecommendation(input: GetFindingRecommendationInput) async throws -> GetFindingRecommendationOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getFindingRecommendation") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "access-analyzer") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getFindingRecommendation") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GetFindingRecommendationInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(GetFindingRecommendationInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GetFindingRecommendationOutput.httpOutput(from:), GetFindingRecommendationOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `GetFindingV2` operation on the `AccessAnalyzer` service. /// /// Retrieves information about the specified finding. GetFinding and GetFindingV2 both use access-analyzer:GetFinding in the Action element of an IAM policy statement. You must have permission to perform the access-analyzer:GetFinding action. diff --git a/Sources/Services/AWSAccessAnalyzer/Sources/AWSAccessAnalyzer/Models.swift b/Sources/Services/AWSAccessAnalyzer/Sources/AWSAccessAnalyzer/Models.swift index 14e04219e56..7d5ab48e0bd 100644 --- a/Sources/Services/AWSAccessAnalyzer/Sources/AWSAccessAnalyzer/Models.swift +++ b/Sources/Services/AWSAccessAnalyzer/Sources/AWSAccessAnalyzer/Models.swift @@ -38,6 +38,11 @@ public struct DeleteArchiveRuleOutput { public init() { } } +public struct GenerateFindingRecommendationOutput { + + public init() { } +} + public struct StartResourceScanOutput { public init() { } @@ -54,17 +59,20 @@ public struct UpdateFindingsOutput { } extension AccessAnalyzerClientTypes { - /// Contains information about actions that define permissions to check against a policy. + /// Contains information about actions and resources that define permissions to check against a policy. public struct Access { /// A list of actions for the access permissions. Any strings that can be used as an action in an IAM policy can be used in the list of actions to check. - /// This member is required. public var actions: [Swift.String]? + /// A list of resources for the access permissions. Any strings that can be used as a resource in an IAM policy can be used in the list of resources to check. + public var resources: [Swift.String]? public init( - actions: [Swift.String]? = nil + actions: [Swift.String]? = nil, + resources: [Swift.String]? = nil ) { self.actions = actions + self.resources = resources } } @@ -285,6 +293,7 @@ extension AccessAnalyzerClientTypes { public enum ValidationExceptionReason: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { case cannotParse case fieldValidationFailed + case notSupported case other case unknownOperation case sdkUnknown(Swift.String) @@ -293,6 +302,7 @@ extension AccessAnalyzerClientTypes { return [ .cannotParse, .fieldValidationFailed, + .notSupported, .other, .unknownOperation ] @@ -307,6 +317,7 @@ extension AccessAnalyzerClientTypes { switch self { case .cannotParse: return "cannotParse" case .fieldValidationFailed: return "fieldValidationFailed" + case .notSupported: return "notSupported" case .other: return "other" case .unknownOperation: return "unknownOperation" case let .sdkUnknown(s): return s @@ -1042,7 +1053,7 @@ extension AccessAnalyzerClientTypes { } public struct CheckAccessNotGrantedInput { - /// An access object containing the permissions that shouldn't be granted by the specified policy. + /// An access object containing the permissions that shouldn't be granted by the specified policy. If only actions are specified, IAM Access Analyzer checks for access of the actions on all resources in the policy. If only resources are specified, then IAM Access Analyzer checks which actions have access to the specified resources. If both actions and resources are specified, then IAM Access Analyzer checks which of the specified actions have access to the specified resources. /// This member is required. public var access: [AccessAnalyzerClientTypes.Access]? /// The JSON policy document to use as the content for the policy. @@ -1219,6 +1230,155 @@ public struct CheckNoNewAccessOutput { } } +extension AccessAnalyzerClientTypes { + + public enum AccessCheckResourceType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case dynamodbStream + case dynamodbTable + case efsFilesystem + case kinesisDataStream + case kinesisStreamConsumer + case kmsKey + case lambdaFunction + case opensearchserviceDomain + case roleTrust + case s3expressDirectorybucket + case s3AccessPoint + case s3Bucket + case s3Glacier + case s3OutpostsAccessPoint + case s3OutpostsBucket + case secretsmanagerSecret + case snsTopic + case sqsQueue + case sdkUnknown(Swift.String) + + public static var allCases: [AccessCheckResourceType] { + return [ + .dynamodbStream, + .dynamodbTable, + .efsFilesystem, + .kinesisDataStream, + .kinesisStreamConsumer, + .kmsKey, + .lambdaFunction, + .opensearchserviceDomain, + .roleTrust, + .s3expressDirectorybucket, + .s3AccessPoint, + .s3Bucket, + .s3Glacier, + .s3OutpostsAccessPoint, + .s3OutpostsBucket, + .secretsmanagerSecret, + .snsTopic, + .sqsQueue + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .dynamodbStream: return "AWS::DynamoDB::Stream" + case .dynamodbTable: return "AWS::DynamoDB::Table" + case .efsFilesystem: return "AWS::EFS::FileSystem" + case .kinesisDataStream: return "AWS::Kinesis::Stream" + case .kinesisStreamConsumer: return "AWS::Kinesis::StreamConsumer" + case .kmsKey: return "AWS::KMS::Key" + case .lambdaFunction: return "AWS::Lambda::Function" + case .opensearchserviceDomain: return "AWS::OpenSearchService::Domain" + case .roleTrust: return "AWS::IAM::AssumeRolePolicyDocument" + case .s3expressDirectorybucket: return "AWS::S3Express::DirectoryBucket" + case .s3AccessPoint: return "AWS::S3::AccessPoint" + case .s3Bucket: return "AWS::S3::Bucket" + case .s3Glacier: return "AWS::S3::Glacier" + case .s3OutpostsAccessPoint: return "AWS::S3Outposts::AccessPoint" + case .s3OutpostsBucket: return "AWS::S3Outposts::Bucket" + case .secretsmanagerSecret: return "AWS::SecretsManager::Secret" + case .snsTopic: return "AWS::SNS::Topic" + case .sqsQueue: return "AWS::SQS::Queue" + case let .sdkUnknown(s): return s + } + } + } +} + +public struct CheckNoPublicAccessInput { + /// The JSON policy document to evaluate for public access. + /// This member is required. + public var policyDocument: Swift.String? + /// The type of resource to evaluate for public access. For example, to check for public access to Amazon S3 buckets, you can choose AWS::S3::Bucket for the resource type. For resource types not supported as valid values, IAM Access Analyzer will return an error. + /// This member is required. + public var resourceType: AccessAnalyzerClientTypes.AccessCheckResourceType? + + public init( + policyDocument: Swift.String? = nil, + resourceType: AccessAnalyzerClientTypes.AccessCheckResourceType? = nil + ) + { + self.policyDocument = policyDocument + self.resourceType = resourceType + } +} + +extension CheckNoPublicAccessInput: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "CheckNoPublicAccessInput(resourceType: \(Swift.String(describing: resourceType)), policyDocument: \"CONTENT_REDACTED\")"} +} + +extension AccessAnalyzerClientTypes { + + public enum CheckNoPublicAccessResult: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case fail + case pass + case sdkUnknown(Swift.String) + + public static var allCases: [CheckNoPublicAccessResult] { + return [ + .fail, + .pass + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .fail: return "FAIL" + case .pass: return "PASS" + case let .sdkUnknown(s): return s + } + } + } +} + +public struct CheckNoPublicAccessOutput { + /// The message indicating whether the specified policy allows public access to resources. + public var message: Swift.String? + /// A list of reasons why the specified resource policy grants public access for the resource type. + public var reasons: [AccessAnalyzerClientTypes.ReasonSummary]? + /// The result of the check for public access to the specified resource type. If the result is PASS, the policy doesn't allow public access to the specified resource type. If the result is FAIL, the policy might allow public access to the specified resource type. + public var result: AccessAnalyzerClientTypes.CheckNoPublicAccessResult? + + public init( + message: Swift.String? = nil, + reasons: [AccessAnalyzerClientTypes.ReasonSummary]? = nil, + result: AccessAnalyzerClientTypes.CheckNoPublicAccessResult? = nil + ) + { + self.message = message + self.reasons = reasons + self.result = result + } +} + extension AccessAnalyzerClientTypes { /// The proposed access control configuration for a DynamoDB stream. You can propose a configuration for a new DynamoDB stream or an existing DynamoDB stream that you own by specifying the policy for the DynamoDB stream. For more information, see [PutResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutResourcePolicy.html). /// @@ -1906,6 +2066,24 @@ public struct CreateAccessPreviewOutput { } } +public struct GenerateFindingRecommendationInput { + /// The [ARN of the analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html#permission-resources) used to generate the finding recommendation. + /// This member is required. + public var analyzerArn: Swift.String? + /// The unique ID for the finding recommendation. + /// This member is required. + public var id: Swift.String? + + public init( + analyzerArn: Swift.String? = nil, + id: Swift.String? = nil + ) + { + self.analyzerArn = analyzerArn + self.id = id + } +} + public struct GetAccessPreviewInput { /// The unique ID for the access preview. /// This member is required. @@ -2444,6 +2622,224 @@ public struct GetFindingOutput { } } +public struct GetFindingRecommendationInput { + /// The [ARN of the analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html#permission-resources) used to generate the finding recommendation. + /// This member is required. + public var analyzerArn: Swift.String? + /// The unique ID for the finding recommendation. + /// This member is required. + public var id: Swift.String? + /// The maximum number of results to return in the response. + public var maxResults: Swift.Int? + /// A token used for pagination of results returned. + public var nextToken: Swift.String? + + public init( + analyzerArn: Swift.String? = nil, + id: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.analyzerArn = analyzerArn + self.id = id + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +extension AccessAnalyzerClientTypes { + /// Contains information about the reason that the retrieval of a recommendation for a finding failed. + public struct RecommendationError { + /// The error code for a failed retrieval of a recommendation for a finding. + /// This member is required. + public var code: Swift.String? + /// The error message for a failed retrieval of a recommendation for a finding. + /// This member is required. + public var message: Swift.String? + + public init( + code: Swift.String? = nil, + message: Swift.String? = nil + ) + { + self.code = code + self.message = message + } + } + +} + +extension AccessAnalyzerClientTypes { + + public enum RecommendationType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case unusedPermissionRecommendation + case sdkUnknown(Swift.String) + + public static var allCases: [RecommendationType] { + return [ + .unusedPermissionRecommendation + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .unusedPermissionRecommendation: return "UnusedPermissionRecommendation" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AccessAnalyzerClientTypes { + + public enum RecommendedRemediationAction: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case createPolicy + case detachPolicy + case sdkUnknown(Swift.String) + + public static var allCases: [RecommendedRemediationAction] { + return [ + .createPolicy, + .detachPolicy + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .createPolicy: return "CREATE_POLICY" + case .detachPolicy: return "DETACH_POLICY" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AccessAnalyzerClientTypes { + /// Contains information about the action to take for a policy in an unused permissions finding. + public struct UnusedPermissionsRecommendedStep { + /// If the recommended action for the unused permissions finding is to detach a policy, the ID of an existing policy to be detached. + public var existingPolicyId: Swift.String? + /// The time at which the existing policy for the unused permissions finding was last updated. + public var policyUpdatedAt: Foundation.Date? + /// A recommendation of whether to create or detach a policy for an unused permissions finding. + /// This member is required. + public var recommendedAction: AccessAnalyzerClientTypes.RecommendedRemediationAction? + /// If the recommended action for the unused permissions finding is to replace the existing policy, the contents of the recommended policy to replace the policy specified in the existingPolicyId field. + public var recommendedPolicy: Swift.String? + + public init( + existingPolicyId: Swift.String? = nil, + policyUpdatedAt: Foundation.Date? = nil, + recommendedAction: AccessAnalyzerClientTypes.RecommendedRemediationAction? = nil, + recommendedPolicy: Swift.String? = nil + ) + { + self.existingPolicyId = existingPolicyId + self.policyUpdatedAt = policyUpdatedAt + self.recommendedAction = recommendedAction + self.recommendedPolicy = recommendedPolicy + } + } + +} + +extension AccessAnalyzerClientTypes { + /// Contains information about a recommended step for an unused access analyzer finding. + public enum RecommendedStep { + /// A recommended step for an unused permissions finding. + case unusedpermissionsrecommendedstep(AccessAnalyzerClientTypes.UnusedPermissionsRecommendedStep) + case sdkUnknown(Swift.String) + } + +} + +extension AccessAnalyzerClientTypes { + + public enum Status: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case failed + case inProgress + case succeeded + case sdkUnknown(Swift.String) + + public static var allCases: [Status] { + return [ + .failed, + .inProgress, + .succeeded + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .failed: return "FAILED" + case .inProgress: return "IN_PROGRESS" + case .succeeded: return "SUCCEEDED" + case let .sdkUnknown(s): return s + } + } + } +} + +public struct GetFindingRecommendationOutput { + /// The time at which the retrieval of the finding recommendation was completed. + public var completedAt: Foundation.Date? + /// Detailed information about the reason that the retrieval of a recommendation for the finding failed. + public var error: AccessAnalyzerClientTypes.RecommendationError? + /// A token used for pagination of results returned. + public var nextToken: Swift.String? + /// The type of recommendation for the finding. + /// This member is required. + public var recommendationType: AccessAnalyzerClientTypes.RecommendationType? + /// A group of recommended steps for the finding. + public var recommendedSteps: [AccessAnalyzerClientTypes.RecommendedStep]? + /// The ARN of the resource of the finding. + /// This member is required. + public var resourceArn: Swift.String? + /// The time at which the retrieval of the finding recommendation was started. + /// This member is required. + public var startedAt: Foundation.Date? + /// The status of the retrieval of the finding recommendation. + /// This member is required. + public var status: AccessAnalyzerClientTypes.Status? + + public init( + completedAt: Foundation.Date? = nil, + error: AccessAnalyzerClientTypes.RecommendationError? = nil, + nextToken: Swift.String? = nil, + recommendationType: AccessAnalyzerClientTypes.RecommendationType? = nil, + recommendedSteps: [AccessAnalyzerClientTypes.RecommendedStep]? = nil, + resourceArn: Swift.String? = nil, + startedAt: Foundation.Date? = nil, + status: AccessAnalyzerClientTypes.Status? = nil + ) + { + self.completedAt = completedAt + self.error = error + self.nextToken = nextToken + self.recommendationType = recommendationType + self.recommendedSteps = recommendedSteps + self.resourceArn = resourceArn + self.startedAt = startedAt + self.status = status + } +} + public struct GetFindingV2Input { /// The [ARN of the analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html#permission-resources) that generated the finding. /// This member is required. @@ -2582,7 +2978,7 @@ extension AccessAnalyzerClientTypes { public struct UnusedPermissionDetails { /// A list of unused actions for which the unused access finding was generated. public var actions: [AccessAnalyzerClientTypes.UnusedAction]? - /// The time at which the permission last accessed. + /// The time at which the permission was last accessed. public var lastAccessed: Foundation.Date? /// The namespace of the Amazon Web Services service that contains the unused actions. /// This member is required. @@ -4327,6 +4723,13 @@ extension CheckNoNewAccessInput { } } +extension CheckNoPublicAccessInput { + + static func urlPathProvider(_ value: CheckNoPublicAccessInput) -> Swift.String? { + return "/policy/check-no-public-access" + } +} + extension CreateAccessPreviewInput { static func urlPathProvider(_ value: CreateAccessPreviewInput) -> Swift.String? { @@ -4398,6 +4801,30 @@ extension DeleteArchiveRuleInput { } } +extension GenerateFindingRecommendationInput { + + static func urlPathProvider(_ value: GenerateFindingRecommendationInput) -> Swift.String? { + guard let id = value.id else { + return nil + } + return "/recommendation/\(id.urlPercentEncoding())" + } +} + +extension GenerateFindingRecommendationInput { + + static func queryItemProvider(_ value: GenerateFindingRecommendationInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + guard let analyzerArn = value.analyzerArn else { + let message = "Creating a URL Query Item failed. analyzerArn is required and must not be nil." + throw Smithy.ClientError.unknownError(message) + } + let analyzerArnQueryItem = Smithy.URIQueryItem(name: "analyzerArn".urlPercentEncoding(), value: Swift.String(analyzerArn).urlPercentEncoding()) + items.append(analyzerArnQueryItem) + return items + } +} + extension GetAccessPreviewInput { static func urlPathProvider(_ value: GetAccessPreviewInput) -> Swift.String? { @@ -4496,6 +4923,38 @@ extension GetFindingInput { } } +extension GetFindingRecommendationInput { + + static func urlPathProvider(_ value: GetFindingRecommendationInput) -> Swift.String? { + guard let id = value.id else { + return nil + } + return "/recommendation/\(id.urlPercentEncoding())" + } +} + +extension GetFindingRecommendationInput { + + static func queryItemProvider(_ value: GetFindingRecommendationInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + guard let analyzerArn = value.analyzerArn else { + let message = "Creating a URL Query Item failed. analyzerArn is required and must not be nil." + throw Smithy.ClientError.unknownError(message) + } + let analyzerArnQueryItem = Smithy.URIQueryItem(name: "analyzerArn".urlPercentEncoding(), value: Swift.String(analyzerArn).urlPercentEncoding()) + items.append(analyzerArnQueryItem) + return items + } +} + extension GetFindingV2Input { static func urlPathProvider(_ value: GetFindingV2Input) -> Swift.String? { @@ -4827,6 +5286,15 @@ extension CheckNoNewAccessInput { } } +extension CheckNoPublicAccessInput { + + static func write(value: CheckNoPublicAccessInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["policyDocument"].write(value.policyDocument) + try writer["resourceType"].write(value.resourceType) + } +} + extension CreateAccessPreviewInput { static func write(value: CreateAccessPreviewInput?, to writer: SmithyJSON.Writer) throws { @@ -5008,6 +5476,20 @@ extension CheckNoNewAccessOutput { } } +extension CheckNoPublicAccessOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CheckNoPublicAccessOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = CheckNoPublicAccessOutput() + value.message = try reader["message"].readIfPresent() + value.reasons = try reader["reasons"].readListIfPresent(memberReadingClosure: AccessAnalyzerClientTypes.ReasonSummary.read(from:), memberNodeInfo: "member", isFlattened: false) + value.result = try reader["result"].readIfPresent() + return value + } +} + extension CreateAccessPreviewOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CreateAccessPreviewOutput { @@ -5053,6 +5535,13 @@ extension DeleteArchiveRuleOutput { } } +extension GenerateFindingRecommendationOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GenerateFindingRecommendationOutput { + return GenerateFindingRecommendationOutput() + } +} + extension GetAccessPreviewOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetAccessPreviewOutput { @@ -5113,6 +5602,25 @@ extension GetFindingOutput { } } +extension GetFindingRecommendationOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetFindingRecommendationOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = GetFindingRecommendationOutput() + value.completedAt = try reader["completedAt"].readTimestampIfPresent(format: .dateTime) + value.error = try reader["error"].readIfPresent(with: AccessAnalyzerClientTypes.RecommendationError.read(from:)) + value.nextToken = try reader["nextToken"].readIfPresent() + value.recommendationType = try reader["recommendationType"].readIfPresent() + value.recommendedSteps = try reader["recommendedSteps"].readListIfPresent(memberReadingClosure: AccessAnalyzerClientTypes.RecommendedStep.read(from:), memberNodeInfo: "member", isFlattened: false) + value.resourceArn = try reader["resourceArn"].readIfPresent() + value.startedAt = try reader["startedAt"].readTimestampIfPresent(format: .dateTime) + value.status = try reader["status"].readIfPresent() + return value + } +} + extension GetFindingV2Output { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetFindingV2Output { @@ -5398,6 +5906,25 @@ enum CheckNoNewAccessOutputError { } } +enum CheckNoPublicAccessOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "InvalidParameterException": return try InvalidParameterException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "UnprocessableEntityException": return try UnprocessableEntityException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum CreateAccessPreviewOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -5493,6 +6020,23 @@ enum DeleteArchiveRuleOutputError { } } +enum GenerateFindingRecommendationOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum GetAccessPreviewOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -5583,6 +6127,24 @@ enum GetFindingOutputError { } } +enum GetFindingRecommendationOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum GetFindingV2OutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -6770,6 +7332,44 @@ extension AccessAnalyzerClientTypes.FindingSourceDetail { } } +extension AccessAnalyzerClientTypes.RecommendationError { + + static func read(from reader: SmithyJSON.Reader) throws -> AccessAnalyzerClientTypes.RecommendationError { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AccessAnalyzerClientTypes.RecommendationError() + value.code = try reader["code"].readIfPresent() + value.message = try reader["message"].readIfPresent() + return value + } +} + +extension AccessAnalyzerClientTypes.RecommendedStep { + + static func read(from reader: SmithyJSON.Reader) throws -> AccessAnalyzerClientTypes.RecommendedStep { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "unusedPermissionsRecommendedStep": + return .unusedpermissionsrecommendedstep(try reader["unusedPermissionsRecommendedStep"].read(with: AccessAnalyzerClientTypes.UnusedPermissionsRecommendedStep.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension AccessAnalyzerClientTypes.UnusedPermissionsRecommendedStep { + + static func read(from reader: SmithyJSON.Reader) throws -> AccessAnalyzerClientTypes.UnusedPermissionsRecommendedStep { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AccessAnalyzerClientTypes.UnusedPermissionsRecommendedStep() + value.policyUpdatedAt = try reader["policyUpdatedAt"].readTimestampIfPresent(format: .dateTime) + value.recommendedAction = try reader["recommendedAction"].readIfPresent() + value.recommendedPolicy = try reader["recommendedPolicy"].readIfPresent() + value.existingPolicyId = try reader["existingPolicyId"].readIfPresent() + return value + } +} + extension AccessAnalyzerClientTypes.FindingDetails { static func read(from reader: SmithyJSON.Reader) throws -> AccessAnalyzerClientTypes.FindingDetails { @@ -7143,6 +7743,7 @@ extension AccessAnalyzerClientTypes.Access { static func write(value: AccessAnalyzerClientTypes.Access?, to writer: SmithyJSON.Writer) throws { guard let value else { return } try writer["actions"].writeList(value.actions, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["resources"].writeList(value.resources, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) } } diff --git a/Sources/Services/AWSAccessAnalyzer/Sources/AWSAccessAnalyzer/Paginators.swift b/Sources/Services/AWSAccessAnalyzer/Sources/AWSAccessAnalyzer/Paginators.swift index bd4d3673a8c..db4a3f71fcb 100644 --- a/Sources/Services/AWSAccessAnalyzer/Sources/AWSAccessAnalyzer/Paginators.swift +++ b/Sources/Services/AWSAccessAnalyzer/Sources/AWSAccessAnalyzer/Paginators.swift @@ -4,6 +4,38 @@ import Foundation import protocol ClientRuntime.PaginateToken import struct ClientRuntime.PaginatorSequence +extension AccessAnalyzerClient { + /// Paginate over `[GetFindingRecommendationOutput]` results. + /// + /// When this operation is called, an `AsyncSequence` is created. AsyncSequences are lazy so no service + /// calls are made until the sequence is iterated over. This also means there is no guarantee that the request is valid + /// until then. If there are errors in your request, you will see the failures only after you start iterating. + /// - Parameters: + /// - input: A `[GetFindingRecommendationInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `GetFindingRecommendationOutput` + public func getFindingRecommendationPaginated(input: GetFindingRecommendationInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \.nextToken, outputKey: \.nextToken, paginationFunction: self.getFindingRecommendation(input:)) + } +} + +extension GetFindingRecommendationInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> GetFindingRecommendationInput { + return GetFindingRecommendationInput( + analyzerArn: self.analyzerArn, + id: self.id, + maxResults: self.maxResults, + nextToken: token + )} +} + +extension PaginatorSequence where OperationStackInput == GetFindingRecommendationInput, OperationStackOutput == GetFindingRecommendationOutput { + /// This paginator transforms the `AsyncSequence` returned by `getFindingRecommendationPaginated` + /// to access the nested member `[AccessAnalyzerClientTypes.RecommendedStep]` + /// - Returns: `[AccessAnalyzerClientTypes.RecommendedStep]` + public func recommendedSteps() async throws -> [AccessAnalyzerClientTypes.RecommendedStep] { + return try await self.asyncCompactMap { item in item.recommendedSteps } + } +} extension AccessAnalyzerClient { /// Paginate over `[GetFindingV2Output]` results. /// diff --git a/Sources/Services/AWSAccount/Sources/AWSAccount/AccountClient.swift b/Sources/Services/AWSAccount/Sources/AWSAccount/AccountClient.swift index fa971750aee..ef8a9335580 100644 --- a/Sources/Services/AWSAccount/Sources/AWSAccount/AccountClient.swift +++ b/Sources/Services/AWSAccount/Sources/AWSAccount/AccountClient.swift @@ -154,6 +154,59 @@ extension AccountClient { } extension AccountClient { + /// Performs the `AcceptPrimaryEmailUpdate` operation on the `Account` service. + /// + /// Accepts the request that originated from [StartPrimaryEmailUpdate] to update the primary email address (also known as the root user email address) for the specified account. + /// + /// - Parameter AcceptPrimaryEmailUpdateInput : [no documentation found] + /// + /// - Returns: `AcceptPrimaryEmailUpdateOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The operation failed because the calling identity doesn't have the minimum required permissions. + /// - `ConflictException` : The request could not be processed because of a conflict in the current status of the resource. For example, this happens if you try to enable a Region that is currently being disabled (in a status of DISABLING). + /// - `InternalServerException` : The operation failed because of an error internal to Amazon Web Services. Try your operation again later. + /// - `ResourceNotFoundException` : The operation failed because it specified a resource that can't be found. + /// - `TooManyRequestsException` : The operation failed because it was called too frequently and exceeded a throttle limit. + /// - `ValidationException` : The operation failed because one of the input parameters was invalid. + public func acceptPrimaryEmailUpdate(input: AcceptPrimaryEmailUpdateInput) async throws -> AcceptPrimaryEmailUpdateOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "acceptPrimaryEmailUpdate") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "account") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "acceptPrimaryEmailUpdate") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(AcceptPrimaryEmailUpdateInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: AcceptPrimaryEmailUpdateInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(AcceptPrimaryEmailUpdateOutput.httpOutput(from:), AcceptPrimaryEmailUpdateOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `DeleteAlternateContact` operation on the `Account` service. /// /// Deletes the specified alternate contact from an Amazon Web Services account. For complete details about how to use the alternate contact operations, see [Access or updating the alternate contacts](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-update-contact.html). Before you can update the alternate contact information for an Amazon Web Services account that is managed by Organizations, you must first enable integration between Amazon Web Services Account Management and Organizations. For more information, see [Enabling trusted access for Amazon Web Services Account Management](https://docs.aws.amazon.com/accounts/latest/reference/using-orgs-trusted-access.html). @@ -208,7 +261,7 @@ extension AccountClient { /// Performs the `DisableRegion` operation on the `Account` service. /// - /// Disables (opts-out) a particular Region for an account. + /// Disables (opts-out) a particular Region for an account. The act of disabling a Region will remove all IAM access to any resources that reside in that Region. /// /// - Parameter DisableRegionInput : [no documentation found] /// @@ -414,6 +467,58 @@ extension AccountClient { return result } + /// Performs the `GetPrimaryEmail` operation on the `Account` service. + /// + /// Retrieves the primary email address for the specified account. + /// + /// - Parameter GetPrimaryEmailInput : [no documentation found] + /// + /// - Returns: `GetPrimaryEmailOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The operation failed because the calling identity doesn't have the minimum required permissions. + /// - `InternalServerException` : The operation failed because of an error internal to Amazon Web Services. Try your operation again later. + /// - `ResourceNotFoundException` : The operation failed because it specified a resource that can't be found. + /// - `TooManyRequestsException` : The operation failed because it was called too frequently and exceeded a throttle limit. + /// - `ValidationException` : The operation failed because one of the input parameters was invalid. + public func getPrimaryEmail(input: GetPrimaryEmailInput) async throws -> GetPrimaryEmailOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "getPrimaryEmail") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "account") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getPrimaryEmail") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GetPrimaryEmailInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: GetPrimaryEmailInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GetPrimaryEmailOutput.httpOutput(from:), GetPrimaryEmailOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `GetRegionOptStatus` operation on the `Account` service. /// /// Retrieves the opt-in status of a particular Region. @@ -618,4 +723,57 @@ extension AccountClient { return result } + /// Performs the `StartPrimaryEmailUpdate` operation on the `Account` service. + /// + /// Starts the process to update the primary email address for the specified account. + /// + /// - Parameter StartPrimaryEmailUpdateInput : [no documentation found] + /// + /// - Returns: `StartPrimaryEmailUpdateOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The operation failed because the calling identity doesn't have the minimum required permissions. + /// - `ConflictException` : The request could not be processed because of a conflict in the current status of the resource. For example, this happens if you try to enable a Region that is currently being disabled (in a status of DISABLING). + /// - `InternalServerException` : The operation failed because of an error internal to Amazon Web Services. Try your operation again later. + /// - `ResourceNotFoundException` : The operation failed because it specified a resource that can't be found. + /// - `TooManyRequestsException` : The operation failed because it was called too frequently and exceeded a throttle limit. + /// - `ValidationException` : The operation failed because one of the input parameters was invalid. + public func startPrimaryEmailUpdate(input: StartPrimaryEmailUpdateInput) async throws -> StartPrimaryEmailUpdateOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "startPrimaryEmailUpdate") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "account") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "startPrimaryEmailUpdate") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(StartPrimaryEmailUpdateInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: StartPrimaryEmailUpdateInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(StartPrimaryEmailUpdateOutput.httpOutput(from:), StartPrimaryEmailUpdateOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + } diff --git a/Sources/Services/AWSAccount/Sources/AWSAccount/Models.swift b/Sources/Services/AWSAccount/Sources/AWSAccount/Models.swift index ca187746ef8..584d11b243b 100644 --- a/Sources/Services/AWSAccount/Sources/AWSAccount/Models.swift +++ b/Sources/Services/AWSAccount/Sources/AWSAccount/Models.swift @@ -62,35 +62,28 @@ public struct AccessDeniedException: ClientRuntime.ModeledError, AWSClientRuntim } } -extension AccountClientTypes { - - public enum AlternateContactType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { - case billing - case operations - case security - case sdkUnknown(Swift.String) +/// The request could not be processed because of a conflict in the current status of the resource. For example, this happens if you try to enable a Region that is currently being disabled (in a status of DISABLING). +public struct ConflictException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { - public static var allCases: [AlternateContactType] { - return [ - .billing, - .operations, - .security - ] - } + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + } - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) - } + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ConflictException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? - public var rawValue: Swift.String { - switch self { - case .billing: return "BILLING" - case .operations: return "OPERATIONS" - case .security: return "SECURITY" - case let .sdkUnknown(s): return s - } - } + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message } } @@ -264,6 +257,107 @@ extension ValidationException: Swift.CustomDebugStringConvertible { "ValidationException(fieldList: \(Swift.String(describing: properties.fieldList)), reason: \(Swift.String(describing: properties.reason)), message: \"CONTENT_REDACTED\")"} } +public struct AcceptPrimaryEmailUpdateInput { + /// Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. To use this parameter, the caller must be an identity in the [organization's management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account) or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html), and the organization must have [trusted access](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html) enabled for the Account Management service, and optionally a [delegated admin](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html) account assigned. This operation can only be called from the management account or the delegated administrator account of an organization for a member account. The management account can't specify its own AccountId. + /// This member is required. + public var accountId: Swift.String? + /// The OTP code sent to the PrimaryEmail specified on the StartPrimaryEmailUpdate API call. + /// This member is required. + public var otp: Swift.String? + /// The new primary email address for use with the specified account. This must match the PrimaryEmail from the StartPrimaryEmailUpdate API call. + /// This member is required. + public var primaryEmail: Swift.String? + + public init( + accountId: Swift.String? = nil, + otp: Swift.String? = nil, + primaryEmail: Swift.String? = nil + ) + { + self.accountId = accountId + self.otp = otp + self.primaryEmail = primaryEmail + } +} + +extension AcceptPrimaryEmailUpdateInput: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "AcceptPrimaryEmailUpdateInput(accountId: \(Swift.String(describing: accountId)), otp: \"CONTENT_REDACTED\", primaryEmail: \"CONTENT_REDACTED\")"} +} + +extension AccountClientTypes { + + public enum PrimaryEmailUpdateStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case accepted + case pending + case sdkUnknown(Swift.String) + + public static var allCases: [PrimaryEmailUpdateStatus] { + return [ + .accepted, + .pending + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .accepted: return "ACCEPTED" + case .pending: return "PENDING" + case let .sdkUnknown(s): return s + } + } + } +} + +public struct AcceptPrimaryEmailUpdateOutput { + /// Retrieves the status of the accepted primary email update request. + public var status: AccountClientTypes.PrimaryEmailUpdateStatus? + + public init( + status: AccountClientTypes.PrimaryEmailUpdateStatus? = nil + ) + { + self.status = status + } +} + +extension AccountClientTypes { + + public enum AlternateContactType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case billing + case operations + case security + case sdkUnknown(Swift.String) + + public static var allCases: [AlternateContactType] { + return [ + .billing, + .operations, + .security + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .billing: return "BILLING" + case .operations: return "OPERATIONS" + case .security: return "SECURITY" + case let .sdkUnknown(s): return s + } + } + } +} + public struct DeleteAlternateContactInput { /// Specifies the 12 digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you do not specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the [organization's management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account) or a delegated administrator account, and the specified account ID must be a member account in the same organization. The organization must have [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html), and the organization must have [trusted access](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html) enabled for the Account Management service, and optionally a [delegated admin](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html) account assigned. The management account can't specify its own AccountId; it must call the operation in standalone context by not including the AccountId parameter. To call this operation on an account that is not a member of an organization, then don't specify this parameter, and call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify. public var accountId: Swift.String? @@ -390,7 +484,7 @@ extension PutAlternateContactInput: Swift.CustomDebugStringConvertible { } public struct GetContactInformationInput { - /// Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the [organization's management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account) or a delegated administrator account. The specified account ID must also be a member account in the same organization. The organization must have [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html), and the organization must have [trusted access](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html) enabled for the Account Management service, and optionally a [delegated admin](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html) account assigned. The management account can't specify its own AccountId. It must call the operation in standalone context by not including the AccountId parameter. To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify. + /// Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the [organization's management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account) or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html), and the organization must have [trusted access](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html) enabled for the Account Management service, and optionally a [delegated admin](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html) account assigned. The management account can't specify its own AccountId. It must call the operation in standalone context by not including the AccountId parameter. To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify. public var accountId: Swift.String? public init( @@ -430,7 +524,7 @@ extension AccountClientTypes { /// The postal code of the primary contact address. /// This member is required. public var postalCode: Swift.String? - /// The state or region of the primary contact address. This field is required in selected countries. + /// The state or region of the primary contact address. If the mailing address is within the United States (US), the value in this field can be either a two character state code (for example, NJ) or the full state name (for example, New Jersey). This field is required in the following countries: US, CA, GB, DE, JP, IN, and BR. public var stateOrRegion: Swift.String? /// The URL of the website associated with the primary contact information, if any. public var websiteUrl: Swift.String? @@ -485,7 +579,7 @@ public struct GetContactInformationOutput { } public struct PutContactInformationInput { - /// Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the [organization's management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account) or a delegated administrator account. The specified account ID must also be a member account in the same organization. The organization must have [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html), and the organization must have [trusted access](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html) enabled for the Account Management service, and optionally a [delegated admin](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html) account assigned. The management account can't specify its own AccountId. It must call the operation in standalone context by not including the AccountId parameter. To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify. + /// Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the [organization's management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account) or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html), and the organization must have [trusted access](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html) enabled for the Account Management service, and optionally a [delegated admin](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html) account assigned. The management account can't specify its own AccountId. It must call the operation in standalone context by not including the AccountId parameter. To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify. public var accountId: Swift.String? /// Contains the details of the primary contact information associated with an Amazon Web Services account. /// This member is required. @@ -501,33 +595,73 @@ public struct PutContactInformationInput { } } -/// The request could not be processed because of a conflict in the current status of the resource. For example, this happens if you try to enable a Region that is currently being disabled (in a status of DISABLING). -public struct ConflictException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { +public struct GetPrimaryEmailInput { + /// Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. To use this parameter, the caller must be an identity in the [organization's management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account) or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html), and the organization must have [trusted access](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html) enabled for the Account Management service, and optionally a [delegated admin](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html) account assigned. This operation can only be called from the management account or the delegated administrator account of an organization for a member account. The management account can't specify its own AccountId. + /// This member is required. + public var accountId: Swift.String? - public struct Properties { - /// This member is required. - public internal(set) var message: Swift.String? = nil + public init( + accountId: Swift.String? = nil + ) + { + self.accountId = accountId } +} - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "ConflictException" } - public static var fault: ClientRuntime.ErrorFault { .client } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? +public struct GetPrimaryEmailOutput { + /// Retrieves the primary email address associated with the specified account. + public var primaryEmail: Swift.String? public init( - message: Swift.String? = nil + primaryEmail: Swift.String? = nil ) { - self.properties.message = message + self.primaryEmail = primaryEmail + } +} + +extension GetPrimaryEmailOutput: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "GetPrimaryEmailOutput(primaryEmail: \"CONTENT_REDACTED\")"} +} + +public struct StartPrimaryEmailUpdateInput { + /// Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. To use this parameter, the caller must be an identity in the [organization's management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account) or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html), and the organization must have [trusted access](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html) enabled for the Account Management service, and optionally a [delegated admin](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html) account assigned. This operation can only be called from the management account or the delegated administrator account of an organization for a member account. The management account can't specify its own AccountId. + /// This member is required. + public var accountId: Swift.String? + /// The new primary email address (also known as the root user email address) to use in the specified account. + /// This member is required. + public var primaryEmail: Swift.String? + + public init( + accountId: Swift.String? = nil, + primaryEmail: Swift.String? = nil + ) + { + self.accountId = accountId + self.primaryEmail = primaryEmail + } +} + +extension StartPrimaryEmailUpdateInput: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "StartPrimaryEmailUpdateInput(accountId: \(Swift.String(describing: accountId)), primaryEmail: \"CONTENT_REDACTED\")"} +} + +public struct StartPrimaryEmailUpdateOutput { + /// The status of the primary email update request. + public var status: AccountClientTypes.PrimaryEmailUpdateStatus? + + public init( + status: AccountClientTypes.PrimaryEmailUpdateStatus? = nil + ) + { + self.status = status } } public struct DisableRegionInput { - /// Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the [organization's management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account) or a delegated administrator account. The specified account ID must also be a member account in the same organization. The organization must have [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html), and the organization must have [trusted access](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html) enabled for the Account Management service, and optionally a [delegated admin](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html) account assigned. The management account can't specify its own AccountId. It must call the operation in standalone context by not including the AccountId parameter. To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify. + /// Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the [organization's management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account) or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html), and the organization must have [trusted access](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html) enabled for the Account Management service, and optionally a [delegated admin](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html) account assigned. The management account can't specify its own AccountId. It must call the operation in standalone context by not including the AccountId parameter. To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify. public var accountId: Swift.String? /// Specifies the Region-code for a given Region name (for example, af-south-1). When you disable a Region, Amazon Web Services performs actions to deactivate that Region in your account, such as destroying IAM resources in the Region. This process takes a few minutes for most accounts, but this can take several hours. You cannot enable the Region until the disabling process is fully completed. /// This member is required. @@ -544,7 +678,7 @@ public struct DisableRegionInput { } public struct EnableRegionInput { - /// Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the [organization's management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account) or a delegated administrator account. The specified account ID must also be a member account in the same organization. The organization must have [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html), and the organization must have [trusted access](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html) enabled for the Account Management service, and optionally a [delegated admin](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html) account assigned. The management account can't specify its own AccountId. It must call the operation in standalone context by not including the AccountId parameter. To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify. + /// Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the [organization's management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account) or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html), and the organization must have [trusted access](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html) enabled for the Account Management service, and optionally a [delegated admin](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html) account assigned. The management account can't specify its own AccountId. It must call the operation in standalone context by not including the AccountId parameter. To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify. public var accountId: Swift.String? /// Specifies the Region-code for a given Region name (for example, af-south-1). When you enable a Region, Amazon Web Services performs actions to prepare your account in that Region, such as distributing your IAM resources to the Region. This process takes a few minutes for most accounts, but it can take several hours. You cannot use the Region until this process is complete. Furthermore, you cannot disable the Region until the enabling process is fully completed. /// This member is required. @@ -561,7 +695,7 @@ public struct EnableRegionInput { } public struct GetRegionOptStatusInput { - /// Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the [organization's management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account) or a delegated administrator account. The specified account ID must also be a member account in the same organization. The organization must have [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html), and the organization must have [trusted access](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html) enabled for the Account Management service, and optionally a [delegated admin](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html) account assigned. The management account can't specify its own AccountId. It must call the operation in standalone context by not including the AccountId parameter. To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify. + /// Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the [organization's management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account) or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html), and the organization must have [trusted access](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html) enabled for the Account Management service, and optionally a [delegated admin](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html) account assigned. The management account can't specify its own AccountId. It must call the operation in standalone context by not including the AccountId parameter. To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify. public var accountId: Swift.String? /// Specifies the Region-code for a given Region name (for example, af-south-1). This function will return the status of whatever Region you pass into this parameter. /// This member is required. @@ -632,7 +766,7 @@ public struct GetRegionOptStatusOutput { } public struct ListRegionsInput { - /// Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the [organization's management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account) or a delegated administrator account. The specified account ID must also be a member account in the same organization. The organization must have [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html), and the organization must have [trusted access](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html) enabled for the Account Management service, and optionally a [delegated admin](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html) account assigned. The management account can't specify its own AccountId. It must call the operation in standalone context by not including the AccountId parameter. To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify. + /// Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the [organization's management account](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account) or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have [all features enabled](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html), and the organization must have [trusted access](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html) enabled for the Account Management service, and optionally a [delegated admin](https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html) account assigned. The management account can't specify its own AccountId. It must call the operation in standalone context by not including the AccountId parameter. To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify. public var accountId: Swift.String? /// The total number of items to return in the command’s output. If the total number of items available is more than the value specified, a NextToken is provided in the command’s output. To resume pagination, provide the NextToken value in the starting-token argument of a subsequent command. Do not use the NextToken response element directly outside of the Amazon Web Services CLI. For usage examples, see [Pagination](http://docs.aws.amazon.com/cli/latest/userguide/pagination.html) in the Amazon Web Services Command Line Interface User Guide. public var maxResults: Swift.Int? @@ -691,6 +825,13 @@ public struct ListRegionsOutput { } } +extension AcceptPrimaryEmailUpdateInput { + + static func urlPathProvider(_ value: AcceptPrimaryEmailUpdateInput) -> Swift.String? { + return "/acceptPrimaryEmailUpdate" + } +} + extension DeleteAlternateContactInput { static func urlPathProvider(_ value: DeleteAlternateContactInput) -> Swift.String? { @@ -726,6 +867,13 @@ extension GetContactInformationInput { } } +extension GetPrimaryEmailInput { + + static func urlPathProvider(_ value: GetPrimaryEmailInput) -> Swift.String? { + return "/getPrimaryEmail" + } +} + extension GetRegionOptStatusInput { static func urlPathProvider(_ value: GetRegionOptStatusInput) -> Swift.String? { @@ -754,6 +902,23 @@ extension PutContactInformationInput { } } +extension StartPrimaryEmailUpdateInput { + + static func urlPathProvider(_ value: StartPrimaryEmailUpdateInput) -> Swift.String? { + return "/startPrimaryEmailUpdate" + } +} + +extension AcceptPrimaryEmailUpdateInput { + + static func write(value: AcceptPrimaryEmailUpdateInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["AccountId"].write(value.accountId) + try writer["Otp"].write(value.otp) + try writer["PrimaryEmail"].write(value.primaryEmail) + } +} + extension DeleteAlternateContactInput { static func write(value: DeleteAlternateContactInput?, to writer: SmithyJSON.Writer) throws { @@ -798,6 +963,14 @@ extension GetContactInformationInput { } } +extension GetPrimaryEmailInput { + + static func write(value: GetPrimaryEmailInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["AccountId"].write(value.accountId) + } +} + extension GetRegionOptStatusInput { static func write(value: GetRegionOptStatusInput?, to writer: SmithyJSON.Writer) throws { @@ -840,6 +1013,27 @@ extension PutContactInformationInput { } } +extension StartPrimaryEmailUpdateInput { + + static func write(value: StartPrimaryEmailUpdateInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["AccountId"].write(value.accountId) + try writer["PrimaryEmail"].write(value.primaryEmail) + } +} + +extension AcceptPrimaryEmailUpdateOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> AcceptPrimaryEmailUpdateOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = AcceptPrimaryEmailUpdateOutput() + value.status = try reader["Status"].readIfPresent() + return value + } +} + extension DeleteAlternateContactOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DeleteAlternateContactOutput { @@ -885,6 +1079,18 @@ extension GetContactInformationOutput { } } +extension GetPrimaryEmailOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetPrimaryEmailOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = GetPrimaryEmailOutput() + value.primaryEmail = try reader["PrimaryEmail"].readIfPresent() + return value + } +} + extension GetRegionOptStatusOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetRegionOptStatusOutput { @@ -925,6 +1131,37 @@ extension PutContactInformationOutput { } } +extension StartPrimaryEmailUpdateOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> StartPrimaryEmailUpdateOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = StartPrimaryEmailUpdateOutput() + value.status = try reader["Status"].readIfPresent() + return value + } +} + +enum AcceptPrimaryEmailUpdateOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "TooManyRequestsException": return try TooManyRequestsException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum DeleteAlternateContactOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -1015,6 +1252,24 @@ enum GetContactInformationOutputError { } } +enum GetPrimaryEmailOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "TooManyRequestsException": return try TooManyRequestsException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum GetRegionOptStatusOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -1083,6 +1338,25 @@ enum PutContactInformationOutputError { } } +enum StartPrimaryEmailUpdateOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "TooManyRequestsException": return try TooManyRequestsException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + extension ValidationException { static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ValidationException { @@ -1098,6 +1372,19 @@ extension ValidationException { } } +extension ConflictException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ConflictException { + let reader = baseError.errorBodyReader + var value = ConflictException() + value.properties.message = try reader["message"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + extension InternalServerException { static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> InternalServerException { @@ -1150,19 +1437,6 @@ extension AccessDeniedException { } } -extension ConflictException { - - static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ConflictException { - let reader = baseError.errorBodyReader - var value = ConflictException() - value.properties.message = try reader["message"].readIfPresent() - value.httpResponse = baseError.httpResponse - value.requestID = baseError.requestID - value.message = baseError.message - return value - } -} - extension AccountClientTypes.AlternateContact { static func read(from reader: SmithyJSON.Reader) throws -> AccountClientTypes.AlternateContact { diff --git a/Sources/Services/AWSAppTest/Sources/AWSAppTest/AppTestClient.swift b/Sources/Services/AWSAppTest/Sources/AWSAppTest/AppTestClient.swift new file mode 100644 index 00000000000..5ebaf41b502 --- /dev/null +++ b/Sources/Services/AWSAppTest/Sources/AWSAppTest/AppTestClient.swift @@ -0,0 +1,1387 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import Foundation +import class AWSClientRuntime.AWSClientConfigDefaultsProvider +import class AWSClientRuntime.DefaultAWSClientPlugin +import class ClientRuntime.ClientBuilder +import class ClientRuntime.DefaultClientPlugin +import class ClientRuntime.HttpClientConfiguration +import class ClientRuntime.SdkHttpClient +import class Smithy.ContextBuilder +import class SmithyJSON.Writer +import enum AWSClientRuntime.AWSRetryErrorInfoProvider +import enum AWSClientRuntime.AWSRetryMode +import enum ClientRuntime.ClientLogMode +import enum ClientRuntime.DefaultTelemetry +import protocol AWSClientRuntime.AWSDefaultClientConfiguration +import protocol AWSClientRuntime.AWSRegionClientConfiguration +import protocol ClientRuntime.Client +import protocol ClientRuntime.DefaultClientConfiguration +import protocol ClientRuntime.DefaultHttpClientConfiguration +import protocol ClientRuntime.IdempotencyTokenGenerator +import protocol ClientRuntime.TelemetryProvider +import protocol Smithy.LogAgent +import protocol SmithyHTTPAPI.HTTPClient +import protocol SmithyHTTPAuthAPI.AuthSchemeResolver +import protocol SmithyIdentity.AWSCredentialIdentityResolver +import struct AWSClientRuntime.AWSUserAgentMetadata +import struct AWSClientRuntime.EndpointResolverMiddleware +import struct AWSClientRuntime.UserAgentMiddleware +import struct AWSSDKHTTPAuth.SigV4AuthScheme +import struct ClientRuntime.AuthSchemeMiddleware +import struct ClientRuntime.BodyMiddleware +import struct ClientRuntime.ContentLengthMiddleware +import struct ClientRuntime.ContentTypeMiddleware +import struct ClientRuntime.DeserializeMiddleware +import struct ClientRuntime.IdempotencyTokenMiddleware +import struct ClientRuntime.LoggerMiddleware +import struct ClientRuntime.OperationStack +import struct ClientRuntime.QueryItemMiddleware +import struct ClientRuntime.RetryMiddleware +import struct ClientRuntime.SignerMiddleware +import struct ClientRuntime.URLHostMiddleware +import struct ClientRuntime.URLPathMiddleware +import struct SmithyRetries.DefaultRetryStrategy +import struct SmithyRetriesAPI.RetryStrategyOptions +import typealias SmithyHTTPAuthAPI.AuthSchemes + +public class AppTestClient: ClientRuntime.Client { + public static let clientName = "AppTestClient" + let client: ClientRuntime.SdkHttpClient + let config: AppTestClient.AppTestClientConfiguration + let serviceName = "AppTest" + + public required init(config: AppTestClient.AppTestClientConfiguration) { + client = ClientRuntime.SdkHttpClient(engine: config.httpClientEngine, config: config.httpClientConfiguration) + self.config = config + } + + public convenience init(region: Swift.String) throws { + let config = try AppTestClient.AppTestClientConfiguration(region: region) + self.init(config: config) + } + + public convenience required init() async throws { + let config = try await AppTestClient.AppTestClientConfiguration() + self.init(config: config) + } +} + +extension AppTestClient { + public class AppTestClientConfiguration: AWSClientRuntime.AWSDefaultClientConfiguration & AWSClientRuntime.AWSRegionClientConfiguration & ClientRuntime.DefaultClientConfiguration & ClientRuntime.DefaultHttpClientConfiguration { + public var useFIPS: Swift.Bool? + + public var useDualStack: Swift.Bool? + + public var appID: Swift.String? + + public var awsCredentialIdentityResolver: any SmithyIdentity.AWSCredentialIdentityResolver + + public var awsRetryMode: AWSClientRuntime.AWSRetryMode + + public var region: Swift.String? + + public var signingRegion: Swift.String? + + public var endpointResolver: EndpointResolver + + public var telemetryProvider: ClientRuntime.TelemetryProvider + + public var retryStrategyOptions: SmithyRetriesAPI.RetryStrategyOptions + + public var clientLogMode: ClientRuntime.ClientLogMode + + public var endpoint: Swift.String? + + public var idempotencyTokenGenerator: ClientRuntime.IdempotencyTokenGenerator + + public var httpClientEngine: SmithyHTTPAPI.HTTPClient + + public var httpClientConfiguration: ClientRuntime.HttpClientConfiguration + + public var authSchemes: SmithyHTTPAuthAPI.AuthSchemes? + + public var authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver + + internal let logger: Smithy.LogAgent + + private init(_ useFIPS: Swift.Bool?, _ useDualStack: Swift.Bool?, _ appID: Swift.String?, _ awsCredentialIdentityResolver: any SmithyIdentity.AWSCredentialIdentityResolver, _ awsRetryMode: AWSClientRuntime.AWSRetryMode, _ region: Swift.String?, _ signingRegion: Swift.String?, _ endpointResolver: EndpointResolver, _ telemetryProvider: ClientRuntime.TelemetryProvider, _ retryStrategyOptions: SmithyRetriesAPI.RetryStrategyOptions, _ clientLogMode: ClientRuntime.ClientLogMode, _ endpoint: Swift.String?, _ idempotencyTokenGenerator: ClientRuntime.IdempotencyTokenGenerator, _ httpClientEngine: SmithyHTTPAPI.HTTPClient, _ httpClientConfiguration: ClientRuntime.HttpClientConfiguration, _ authSchemes: SmithyHTTPAuthAPI.AuthSchemes?, _ authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver) { + self.useFIPS = useFIPS + self.useDualStack = useDualStack + self.appID = appID + self.awsCredentialIdentityResolver = awsCredentialIdentityResolver + self.awsRetryMode = awsRetryMode + self.region = region + self.signingRegion = signingRegion + self.endpointResolver = endpointResolver + self.telemetryProvider = telemetryProvider + self.retryStrategyOptions = retryStrategyOptions + self.clientLogMode = clientLogMode + self.endpoint = endpoint + self.idempotencyTokenGenerator = idempotencyTokenGenerator + self.httpClientEngine = httpClientEngine + self.httpClientConfiguration = httpClientConfiguration + self.authSchemes = authSchemes + self.authSchemeResolver = authSchemeResolver + self.logger = telemetryProvider.loggerProvider.getLogger(name: AppTestClient.clientName) + } + + public convenience init(useFIPS: Swift.Bool? = nil, useDualStack: Swift.Bool? = nil, appID: Swift.String? = nil, awsCredentialIdentityResolver: (any SmithyIdentity.AWSCredentialIdentityResolver)? = nil, awsRetryMode: AWSClientRuntime.AWSRetryMode? = nil, region: Swift.String? = nil, signingRegion: Swift.String? = nil, endpointResolver: EndpointResolver? = nil, telemetryProvider: ClientRuntime.TelemetryProvider? = nil, retryStrategyOptions: SmithyRetriesAPI.RetryStrategyOptions? = nil, clientLogMode: ClientRuntime.ClientLogMode? = nil, endpoint: Swift.String? = nil, idempotencyTokenGenerator: ClientRuntime.IdempotencyTokenGenerator? = nil, httpClientEngine: SmithyHTTPAPI.HTTPClient? = nil, httpClientConfiguration: ClientRuntime.HttpClientConfiguration? = nil, authSchemes: SmithyHTTPAuthAPI.AuthSchemes? = nil, authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver? = nil) throws { + self.init(useFIPS, useDualStack, try appID ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.appID(), try awsCredentialIdentityResolver ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.awsCredentialIdentityResolver(awsCredentialIdentityResolver), try awsRetryMode ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.retryMode(), region, signingRegion, try endpointResolver ?? DefaultEndpointResolver(), telemetryProvider ?? ClientRuntime.DefaultTelemetry.provider, try retryStrategyOptions ?? AWSClientConfigDefaultsProvider.retryStrategyOptions(), clientLogMode ?? AWSClientConfigDefaultsProvider.clientLogMode, endpoint, idempotencyTokenGenerator ?? AWSClientConfigDefaultsProvider.idempotencyTokenGenerator, httpClientEngine ?? AWSClientConfigDefaultsProvider.httpClientEngine, httpClientConfiguration ?? AWSClientConfigDefaultsProvider.httpClientConfiguration, authSchemes ?? [AWSSDKHTTPAuth.SigV4AuthScheme()], authSchemeResolver ?? DefaultAppTestAuthSchemeResolver()) + } + + public convenience init(useFIPS: Swift.Bool? = nil, useDualStack: Swift.Bool? = nil, appID: Swift.String? = nil, awsCredentialIdentityResolver: (any SmithyIdentity.AWSCredentialIdentityResolver)? = nil, awsRetryMode: AWSClientRuntime.AWSRetryMode? = nil, region: Swift.String? = nil, signingRegion: Swift.String? = nil, endpointResolver: EndpointResolver? = nil, telemetryProvider: ClientRuntime.TelemetryProvider? = nil, retryStrategyOptions: SmithyRetriesAPI.RetryStrategyOptions? = nil, clientLogMode: ClientRuntime.ClientLogMode? = nil, endpoint: Swift.String? = nil, idempotencyTokenGenerator: ClientRuntime.IdempotencyTokenGenerator? = nil, httpClientEngine: SmithyHTTPAPI.HTTPClient? = nil, httpClientConfiguration: ClientRuntime.HttpClientConfiguration? = nil, authSchemes: SmithyHTTPAuthAPI.AuthSchemes? = nil, authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver? = nil) async throws { + self.init(useFIPS, useDualStack, try appID ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.appID(), try awsCredentialIdentityResolver ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.awsCredentialIdentityResolver(awsCredentialIdentityResolver), try awsRetryMode ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.retryMode(), try await AWSClientRuntime.AWSClientConfigDefaultsProvider.region(region), try await AWSClientRuntime.AWSClientConfigDefaultsProvider.region(region), try endpointResolver ?? DefaultEndpointResolver(), telemetryProvider ?? ClientRuntime.DefaultTelemetry.provider, try retryStrategyOptions ?? AWSClientConfigDefaultsProvider.retryStrategyOptions(), clientLogMode ?? AWSClientConfigDefaultsProvider.clientLogMode, endpoint, idempotencyTokenGenerator ?? AWSClientConfigDefaultsProvider.idempotencyTokenGenerator, httpClientEngine ?? AWSClientConfigDefaultsProvider.httpClientEngine, httpClientConfiguration ?? AWSClientConfigDefaultsProvider.httpClientConfiguration, authSchemes ?? [AWSSDKHTTPAuth.SigV4AuthScheme()], authSchemeResolver ?? DefaultAppTestAuthSchemeResolver()) + } + + public convenience required init() async throws { + try await self.init(useFIPS: nil, useDualStack: nil, appID: nil, awsCredentialIdentityResolver: nil, awsRetryMode: nil, region: nil, signingRegion: nil, endpointResolver: nil, telemetryProvider: nil, retryStrategyOptions: nil, clientLogMode: nil, endpoint: nil, idempotencyTokenGenerator: nil, httpClientEngine: nil, httpClientConfiguration: nil, authSchemes: nil, authSchemeResolver: nil) + } + + public convenience init(region: String) throws { + self.init(nil, nil, try AWSClientRuntime.AWSClientConfigDefaultsProvider.appID(), try AWSClientConfigDefaultsProvider.awsCredentialIdentityResolver(), try AWSClientRuntime.AWSClientConfigDefaultsProvider.retryMode(), region, region, try DefaultEndpointResolver(), ClientRuntime.DefaultTelemetry.provider, try AWSClientConfigDefaultsProvider.retryStrategyOptions(), AWSClientConfigDefaultsProvider.clientLogMode, nil, AWSClientConfigDefaultsProvider.idempotencyTokenGenerator, AWSClientConfigDefaultsProvider.httpClientEngine, AWSClientConfigDefaultsProvider.httpClientConfiguration, [AWSSDKHTTPAuth.SigV4AuthScheme()], DefaultAppTestAuthSchemeResolver()) + } + + public var partitionID: String? { + return "\(AppTestClient.clientName) - \(region ?? "")" + } + } + + public static func builder() -> ClientRuntime.ClientBuilder { + return ClientRuntime.ClientBuilder(defaultPlugins: [ + ClientRuntime.DefaultClientPlugin(), + AWSClientRuntime.DefaultAWSClientPlugin(clientName: self.clientName), + DefaultAWSAuthSchemePlugin() + ]) + } +} + +extension AppTestClient { + /// Performs the `CreateTestCase` operation on the `AwsApptestControlPlaneService` service. + /// + /// Creates a test case. + /// + /// - Parameter CreateTestCaseInput : [no documentation found] + /// + /// - Returns: `CreateTestCaseOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `ConflictException` : The parameters provided in the request conflict with existing resources. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ServiceQuotaExceededException` : One or more quotas for AWS Application Testing exceeds the limit. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func createTestCase(input: CreateTestCaseInput) async throws -> CreateTestCaseOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createTestCase") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "createTestCase") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.IdempotencyTokenMiddleware(keyPath: \.clientToken)) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(CreateTestCaseInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: CreateTestCaseInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(CreateTestCaseOutput.httpOutput(from:), CreateTestCaseOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `CreateTestConfiguration` operation on the `AwsApptestControlPlaneService` service. + /// + /// Creates a test configuration. + /// + /// - Parameter CreateTestConfigurationInput : [no documentation found] + /// + /// - Returns: `CreateTestConfigurationOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `ConflictException` : The parameters provided in the request conflict with existing resources. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ServiceQuotaExceededException` : One or more quotas for AWS Application Testing exceeds the limit. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func createTestConfiguration(input: CreateTestConfigurationInput) async throws -> CreateTestConfigurationOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createTestConfiguration") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "createTestConfiguration") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.IdempotencyTokenMiddleware(keyPath: \.clientToken)) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(CreateTestConfigurationInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: CreateTestConfigurationInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(CreateTestConfigurationOutput.httpOutput(from:), CreateTestConfigurationOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `CreateTestSuite` operation on the `AwsApptestControlPlaneService` service. + /// + /// Creates a test suite. + /// + /// - Parameter CreateTestSuiteInput : [no documentation found] + /// + /// - Returns: `CreateTestSuiteOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `ConflictException` : The parameters provided in the request conflict with existing resources. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ServiceQuotaExceededException` : One or more quotas for AWS Application Testing exceeds the limit. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func createTestSuite(input: CreateTestSuiteInput) async throws -> CreateTestSuiteOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createTestSuite") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "createTestSuite") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.IdempotencyTokenMiddleware(keyPath: \.clientToken)) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(CreateTestSuiteInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: CreateTestSuiteInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(CreateTestSuiteOutput.httpOutput(from:), CreateTestSuiteOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `DeleteTestCase` operation on the `AwsApptestControlPlaneService` service. + /// + /// Deletes a test case. + /// + /// - Parameter DeleteTestCaseInput : [no documentation found] + /// + /// - Returns: `DeleteTestCaseOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `ConflictException` : The parameters provided in the request conflict with existing resources. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func deleteTestCase(input: DeleteTestCaseInput) async throws -> DeleteTestCaseOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteTestCase") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteTestCase") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(DeleteTestCaseInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(DeleteTestCaseOutput.httpOutput(from:), DeleteTestCaseOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `DeleteTestConfiguration` operation on the `AwsApptestControlPlaneService` service. + /// + /// Deletes a test configuration. + /// + /// - Parameter DeleteTestConfigurationInput : [no documentation found] + /// + /// - Returns: `DeleteTestConfigurationOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `ConflictException` : The parameters provided in the request conflict with existing resources. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ServiceQuotaExceededException` : One or more quotas for AWS Application Testing exceeds the limit. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func deleteTestConfiguration(input: DeleteTestConfigurationInput) async throws -> DeleteTestConfigurationOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteTestConfiguration") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteTestConfiguration") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(DeleteTestConfigurationInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(DeleteTestConfigurationOutput.httpOutput(from:), DeleteTestConfigurationOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `DeleteTestRun` operation on the `AwsApptestControlPlaneService` service. + /// + /// Deletes a test run. + /// + /// - Parameter DeleteTestRunInput : [no documentation found] + /// + /// - Returns: `DeleteTestRunOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `ConflictException` : The parameters provided in the request conflict with existing resources. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func deleteTestRun(input: DeleteTestRunInput) async throws -> DeleteTestRunOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteTestRun") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteTestRun") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(DeleteTestRunInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(DeleteTestRunOutput.httpOutput(from:), DeleteTestRunOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `DeleteTestSuite` operation on the `AwsApptestControlPlaneService` service. + /// + /// Deletes a test suite. + /// + /// - Parameter DeleteTestSuiteInput : [no documentation found] + /// + /// - Returns: `DeleteTestSuiteOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `ConflictException` : The parameters provided in the request conflict with existing resources. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ServiceQuotaExceededException` : One or more quotas for AWS Application Testing exceeds the limit. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func deleteTestSuite(input: DeleteTestSuiteInput) async throws -> DeleteTestSuiteOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteTestSuite") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteTestSuite") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(DeleteTestSuiteInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(DeleteTestSuiteOutput.httpOutput(from:), DeleteTestSuiteOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `GetTestCase` operation on the `AwsApptestControlPlaneService` service. + /// + /// Gets a test case. + /// + /// - Parameter GetTestCaseInput : [no documentation found] + /// + /// - Returns: `GetTestCaseOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func getTestCase(input: GetTestCaseInput) async throws -> GetTestCaseOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getTestCase") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getTestCase") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GetTestCaseInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(GetTestCaseInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GetTestCaseOutput.httpOutput(from:), GetTestCaseOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `GetTestConfiguration` operation on the `AwsApptestControlPlaneService` service. + /// + /// Gets a test configuration. + /// + /// - Parameter GetTestConfigurationInput : [no documentation found] + /// + /// - Returns: `GetTestConfigurationOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func getTestConfiguration(input: GetTestConfigurationInput) async throws -> GetTestConfigurationOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getTestConfiguration") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getTestConfiguration") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GetTestConfigurationInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(GetTestConfigurationInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GetTestConfigurationOutput.httpOutput(from:), GetTestConfigurationOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `GetTestRunStep` operation on the `AwsApptestControlPlaneService` service. + /// + /// Gets a test run step. + /// + /// - Parameter GetTestRunStepInput : [no documentation found] + /// + /// - Returns: `GetTestRunStepOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func getTestRunStep(input: GetTestRunStepInput) async throws -> GetTestRunStepOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getTestRunStep") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getTestRunStep") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GetTestRunStepInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(GetTestRunStepInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GetTestRunStepOutput.httpOutput(from:), GetTestRunStepOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `GetTestSuite` operation on the `AwsApptestControlPlaneService` service. + /// + /// Gets a test suite. + /// + /// - Parameter GetTestSuiteInput : [no documentation found] + /// + /// - Returns: `GetTestSuiteOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func getTestSuite(input: GetTestSuiteInput) async throws -> GetTestSuiteOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getTestSuite") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getTestSuite") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GetTestSuiteInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(GetTestSuiteInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GetTestSuiteOutput.httpOutput(from:), GetTestSuiteOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `ListTagsForResource` operation on the `AwsApptestControlPlaneService` service. + /// + /// Lists tags for a resource. + /// + /// - Parameter ListTagsForResourceInput : [no documentation found] + /// + /// - Returns: `ListTagsForResourceOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listTagsForResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listTagsForResource") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListTagsForResourceInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListTagsForResourceOutput.httpOutput(from:), ListTagsForResourceOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `ListTestCases` operation on the `AwsApptestControlPlaneService` service. + /// + /// Lists test cases. + /// + /// - Parameter ListTestCasesInput : [no documentation found] + /// + /// - Returns: `ListTestCasesOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func listTestCases(input: ListTestCasesInput) async throws -> ListTestCasesOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listTestCases") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listTestCases") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListTestCasesInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListTestCasesInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListTestCasesOutput.httpOutput(from:), ListTestCasesOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `ListTestConfigurations` operation on the `AwsApptestControlPlaneService` service. + /// + /// Lists test configurations. + /// + /// - Parameter ListTestConfigurationsInput : [no documentation found] + /// + /// - Returns: `ListTestConfigurationsOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func listTestConfigurations(input: ListTestConfigurationsInput) async throws -> ListTestConfigurationsOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listTestConfigurations") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listTestConfigurations") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListTestConfigurationsInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListTestConfigurationsInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListTestConfigurationsOutput.httpOutput(from:), ListTestConfigurationsOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `ListTestRunSteps` operation on the `AwsApptestControlPlaneService` service. + /// + /// Lists test run steps. + /// + /// - Parameter ListTestRunStepsInput : [no documentation found] + /// + /// - Returns: `ListTestRunStepsOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func listTestRunSteps(input: ListTestRunStepsInput) async throws -> ListTestRunStepsOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listTestRunSteps") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listTestRunSteps") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListTestRunStepsInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListTestRunStepsInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListTestRunStepsOutput.httpOutput(from:), ListTestRunStepsOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `ListTestRunTestCases` operation on the `AwsApptestControlPlaneService` service. + /// + /// Lists test run test cases. + /// + /// - Parameter ListTestRunTestCasesInput : [no documentation found] + /// + /// - Returns: `ListTestRunTestCasesOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func listTestRunTestCases(input: ListTestRunTestCasesInput) async throws -> ListTestRunTestCasesOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listTestRunTestCases") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listTestRunTestCases") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListTestRunTestCasesInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListTestRunTestCasesInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListTestRunTestCasesOutput.httpOutput(from:), ListTestRunTestCasesOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `ListTestRuns` operation on the `AwsApptestControlPlaneService` service. + /// + /// Lists test runs. + /// + /// - Parameter ListTestRunsInput : [no documentation found] + /// + /// - Returns: `ListTestRunsOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func listTestRuns(input: ListTestRunsInput) async throws -> ListTestRunsOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listTestRuns") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listTestRuns") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListTestRunsInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListTestRunsInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListTestRunsOutput.httpOutput(from:), ListTestRunsOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `ListTestSuites` operation on the `AwsApptestControlPlaneService` service. + /// + /// Lists test suites. + /// + /// - Parameter ListTestSuitesInput : [no documentation found] + /// + /// - Returns: `ListTestSuitesOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func listTestSuites(input: ListTestSuitesInput) async throws -> ListTestSuitesOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listTestSuites") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listTestSuites") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListTestSuitesInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListTestSuitesInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListTestSuitesOutput.httpOutput(from:), ListTestSuitesOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `StartTestRun` operation on the `AwsApptestControlPlaneService` service. + /// + /// Starts a test run. + /// + /// - Parameter StartTestRunInput : [no documentation found] + /// + /// - Returns: `StartTestRunOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `ConflictException` : The parameters provided in the request conflict with existing resources. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ServiceQuotaExceededException` : One or more quotas for AWS Application Testing exceeds the limit. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func startTestRun(input: StartTestRunInput) async throws -> StartTestRunOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "startTestRun") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "startTestRun") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.IdempotencyTokenMiddleware(keyPath: \.clientToken)) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(StartTestRunInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: StartTestRunInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(StartTestRunOutput.httpOutput(from:), StartTestRunOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `TagResource` operation on the `AwsApptestControlPlaneService` service. + /// + /// Specifies tags of a resource. + /// + /// - Parameter TagResourceInput : [no documentation found] + /// + /// - Returns: `TagResourceOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ServiceQuotaExceededException` : One or more quotas for AWS Application Testing exceeds the limit. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func tagResource(input: TagResourceInput) async throws -> TagResourceOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "tagResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "tagResource") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(TagResourceInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: TagResourceInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(TagResourceOutput.httpOutput(from:), TagResourceOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `UntagResource` operation on the `AwsApptestControlPlaneService` service. + /// + /// Untags a resource. + /// + /// - Parameter UntagResourceInput : [no documentation found] + /// + /// - Returns: `UntagResourceOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "untagResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "untagResource") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(UntagResourceInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(UntagResourceInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(UntagResourceOutput.httpOutput(from:), UntagResourceOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `UpdateTestCase` operation on the `AwsApptestControlPlaneService` service. + /// + /// Updates a test case. + /// + /// - Parameter UpdateTestCaseInput : [no documentation found] + /// + /// - Returns: `UpdateTestCaseOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `ConflictException` : The parameters provided in the request conflict with existing resources. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func updateTestCase(input: UpdateTestCaseInput) async throws -> UpdateTestCaseOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .patch) + .withServiceName(value: serviceName) + .withOperation(value: "updateTestCase") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "updateTestCase") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(UpdateTestCaseInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: UpdateTestCaseInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(UpdateTestCaseOutput.httpOutput(from:), UpdateTestCaseOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `UpdateTestConfiguration` operation on the `AwsApptestControlPlaneService` service. + /// + /// Updates a test configuration. + /// + /// - Parameter UpdateTestConfigurationInput : [no documentation found] + /// + /// - Returns: `UpdateTestConfigurationOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `ConflictException` : The parameters provided in the request conflict with existing resources. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func updateTestConfiguration(input: UpdateTestConfigurationInput) async throws -> UpdateTestConfigurationOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .patch) + .withServiceName(value: serviceName) + .withOperation(value: "updateTestConfiguration") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "updateTestConfiguration") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(UpdateTestConfigurationInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: UpdateTestConfigurationInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(UpdateTestConfigurationOutput.httpOutput(from:), UpdateTestConfigurationOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `UpdateTestSuite` operation on the `AwsApptestControlPlaneService` service. + /// + /// Updates a test suite. + /// + /// - Parameter UpdateTestSuiteInput : [no documentation found] + /// + /// - Returns: `UpdateTestSuiteOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The account or role doesn't have the right permissions to make the request. + /// - `ConflictException` : The parameters provided in the request conflict with existing resources. + /// - `InternalServerException` : An unexpected error occurred during the processing of the request. + /// - `ResourceNotFoundException` : The specified resource was not found. + /// - `ThrottlingException` : The number of requests made exceeds the limit. + /// - `ValidationException` : One or more parameter provided in the request is not valid. + public func updateTestSuite(input: UpdateTestSuiteInput) async throws -> UpdateTestSuiteOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .patch) + .withServiceName(value: serviceName) + .withOperation(value: "updateTestSuite") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "apptest") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "updateTestSuite") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(UpdateTestSuiteInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: UpdateTestSuiteInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(UpdateTestSuiteOutput.httpOutput(from:), UpdateTestSuiteOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + +} diff --git a/Sources/Services/AWSAppTest/Sources/AWSAppTest/AuthSchemeResolver.swift b/Sources/Services/AWSAppTest/Sources/AWSAppTest/AuthSchemeResolver.swift new file mode 100644 index 00000000000..f468cb19a6b --- /dev/null +++ b/Sources/Services/AWSAppTest/Sources/AWSAppTest/AuthSchemeResolver.swift @@ -0,0 +1,49 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import class Smithy.Context +import enum Smithy.ClientError +import enum SmithyHTTPAuthAPI.SigningPropertyKeys +import protocol SmithyHTTPAuthAPI.AuthSchemeResolver +import protocol SmithyHTTPAuthAPI.AuthSchemeResolverParameters +import struct SmithyHTTPAuthAPI.AuthOption + +public struct AppTestAuthSchemeResolverParameters: SmithyHTTPAuthAPI.AuthSchemeResolverParameters { + public let operation: Swift.String + // Region is used for SigV4 auth scheme + public let region: Swift.String? +} + +public protocol AppTestAuthSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver { + // Intentionally empty. + // This is the parent protocol that all auth scheme resolver implementations of + // the service AppTest must conform to. +} + +public struct DefaultAppTestAuthSchemeResolver: AppTestAuthSchemeResolver { + + public func resolveAuthScheme(params: SmithyHTTPAuthAPI.AuthSchemeResolverParameters) throws -> [SmithyHTTPAuthAPI.AuthOption] { + var validAuthOptions = [SmithyHTTPAuthAPI.AuthOption]() + guard let serviceParams = params as? AppTestAuthSchemeResolverParameters else { + throw Smithy.ClientError.authError("Service specific auth scheme parameters type must be passed to auth scheme resolver.") + } + switch serviceParams.operation { + default: + var sigV4Option = SmithyHTTPAuthAPI.AuthOption(schemeID: "aws.auth#sigv4") + sigV4Option.signingProperties.set(key: SmithyHTTPAuthAPI.SigningPropertyKeys.signingName, value: "apptest") + guard let region = serviceParams.region else { + throw Smithy.ClientError.authError("Missing region in auth scheme parameters for SigV4 auth scheme.") + } + sigV4Option.signingProperties.set(key: SmithyHTTPAuthAPI.SigningPropertyKeys.signingRegion, value: region) + validAuthOptions.append(sigV4Option) + } + return validAuthOptions + } + + public func constructParameters(context: Smithy.Context) throws -> SmithyHTTPAuthAPI.AuthSchemeResolverParameters { + guard let opName = context.getOperation() else { + throw Smithy.ClientError.dataNotFound("Operation name not configured in middleware context for auth scheme resolver params construction.") + } + let opRegion = context.getRegion() + return AppTestAuthSchemeResolverParameters(operation: opName, region: opRegion) + } +} diff --git a/Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/Endpoints.swift b/Sources/Services/AWSAppTest/Sources/AWSAppTest/Endpoints.swift similarity index 56% rename from Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/Endpoints.swift rename to Sources/Services/AWSAppTest/Sources/AWSAppTest/Endpoints.swift index 19622bb040c..f754f6fd158 100644 --- a/Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/Endpoints.swift +++ b/Sources/Services/AWSAppTest/Sources/AWSAppTest/Endpoints.swift @@ -51,7 +51,7 @@ public protocol EndpointResolver { typealias DefaultEndpointResolver = ClientRuntime.DefaultEndpointResolver extension DefaultEndpointResolver { - private static let ruleSet = "{\"version\":\"1.0\",\"parameters\":{\"Region\":{\"builtIn\":\"AWS::Region\",\"required\":false,\"documentation\":\"The AWS region used to dispatch the request.\",\"type\":\"String\"},\"UseDualStack\":{\"builtIn\":\"AWS::UseDualStack\",\"required\":true,\"default\":false,\"documentation\":\"When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.\",\"type\":\"Boolean\"},\"UseFIPS\":{\"builtIn\":\"AWS::UseFIPS\",\"required\":true,\"default\":false,\"documentation\":\"When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.\",\"type\":\"Boolean\"},\"Endpoint\":{\"builtIn\":\"SDK::Endpoint\",\"required\":false,\"documentation\":\"Override the endpoint used to send this request\",\"type\":\"String\"}},\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"Invalid Configuration: Dualstack and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"endpoint\":{\"url\":{\"ref\":\"Endpoint\"},\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://backupstorage-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://backupstorage-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://backupstorage.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://backupstorage.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}]}" + private static let ruleSet = "{\"version\":\"1.0\",\"parameters\":{\"Region\":{\"builtIn\":\"AWS::Region\",\"required\":false,\"documentation\":\"The AWS region used to dispatch the request.\",\"type\":\"String\"},\"UseDualStack\":{\"builtIn\":\"AWS::UseDualStack\",\"required\":true,\"default\":false,\"documentation\":\"When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.\",\"type\":\"Boolean\"},\"UseFIPS\":{\"builtIn\":\"AWS::UseFIPS\",\"required\":true,\"default\":false,\"documentation\":\"When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.\",\"type\":\"Boolean\"},\"Endpoint\":{\"builtIn\":\"SDK::Endpoint\",\"required\":false,\"documentation\":\"Override the endpoint used to send this request\",\"type\":\"String\"}},\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"Invalid Configuration: Dualstack and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"endpoint\":{\"url\":{\"ref\":\"Endpoint\"},\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"rules\":[{\"conditions\":[],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://apptest-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]},true]}],\"rules\":[{\"conditions\":[],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://apptest-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"rules\":[{\"conditions\":[],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://apptest.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://apptest.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}],\"type\":\"tree\"}]}" init() throws { try self.init(partitions: AWSClientRuntime.awsPartitionJSON, ruleSet: Self.ruleSet) diff --git a/Sources/Services/AWSAppTest/Sources/AWSAppTest/Models.swift b/Sources/Services/AWSAppTest/Sources/AWSAppTest/Models.swift new file mode 100644 index 00000000000..2650a31f049 --- /dev/null +++ b/Sources/Services/AWSAppTest/Sources/AWSAppTest/Models.swift @@ -0,0 +1,6250 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import Foundation +import class SmithyHTTPAPI.HttpResponse +import class SmithyJSON.Reader +import class SmithyJSON.Writer +import enum ClientRuntime.ErrorFault +import enum Smithy.ClientError +import enum SmithyReadWrite.ReaderError +import enum SmithyReadWrite.ReadingClosures +import enum SmithyReadWrite.WritingClosures +import protocol AWSClientRuntime.AWSServiceError +import protocol ClientRuntime.HTTPError +import protocol ClientRuntime.ModeledError +import struct AWSClientRuntime.RestJSONError +@_spi(UnknownAWSHTTPServiceError) import struct AWSClientRuntime.UnknownAWSHTTPServiceError +import struct Smithy.URIQueryItem + +/// The account or role doesn't have the right permissions to make the request. +public struct AccessDeniedException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "AccessDeniedException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +/// An unexpected error occurred during the processing of the request. +public struct InternalServerException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + /// The number of seconds to retry the query. + public internal(set) var retryAfterSeconds: Swift.Int? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "InternalServerException" } + public static var fault: ClientRuntime.ErrorFault { .server } + public static var isRetryable: Swift.Bool { true } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil, + retryAfterSeconds: Swift.Int? = nil + ) + { + self.properties.message = message + self.properties.retryAfterSeconds = retryAfterSeconds + } +} + +/// The specified resource was not found. +public struct ResourceNotFoundException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + /// The resource ID of the resource not found. + public internal(set) var resourceId: Swift.String? = nil + /// The resource type of the resource not found. + public internal(set) var resourceType: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ResourceNotFoundException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil, + resourceId: Swift.String? = nil, + resourceType: Swift.String? = nil + ) + { + self.properties.message = message + self.properties.resourceId = resourceId + self.properties.resourceType = resourceType + } +} + +/// The number of requests made exceeds the limit. +public struct ThrottlingException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + /// The quota code of requests that exceed the limit. + public internal(set) var quotaCode: Swift.String? = nil + /// The number of seconds to retry after for requests that exceed the limit. + public internal(set) var retryAfterSeconds: Swift.Int? = nil + /// The service code of requests that exceed the limit. + public internal(set) var serviceCode: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ThrottlingException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { true } + public static var isThrottling: Swift.Bool { true } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil, + quotaCode: Swift.String? = nil, + retryAfterSeconds: Swift.Int? = nil, + serviceCode: Swift.String? = nil + ) + { + self.properties.message = message + self.properties.quotaCode = quotaCode + self.properties.retryAfterSeconds = retryAfterSeconds + self.properties.serviceCode = serviceCode + } +} + +extension AppTestClientTypes { + /// Specifies a validation exception field. + public struct ValidationExceptionField { + /// The message stating reason for why service validation failed. + /// This member is required. + public var message: Swift.String? + /// The name of the validation exception field. + /// This member is required. + public var name: Swift.String? + + public init( + message: Swift.String? = nil, + name: Swift.String? = nil + ) + { + self.message = message + self.name = name + } + } + +} + +extension AppTestClientTypes { + + public enum ValidationExceptionReason: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case cannotParse + case fieldValidationFailed + case other + case unknownOperation + case sdkUnknown(Swift.String) + + public static var allCases: [ValidationExceptionReason] { + return [ + .cannotParse, + .fieldValidationFailed, + .other, + .unknownOperation + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .cannotParse: return "cannotParse" + case .fieldValidationFailed: return "fieldValidationFailed" + case .other: return "other" + case .unknownOperation: return "unknownOperation" + case let .sdkUnknown(s): return s + } + } + } +} + +/// One or more parameter provided in the request is not valid. +public struct ValidationException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// The field list of the validation exception. + public internal(set) var fieldList: [AppTestClientTypes.ValidationExceptionField]? = nil + /// This member is required. + public internal(set) var message: Swift.String? = nil + /// The reason for the validation exception. + public internal(set) var reason: AppTestClientTypes.ValidationExceptionReason? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ValidationException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + fieldList: [AppTestClientTypes.ValidationExceptionField]? = nil, + message: Swift.String? = nil, + reason: AppTestClientTypes.ValidationExceptionReason? = nil + ) + { + self.properties.fieldList = fieldList + self.properties.message = message + self.properties.reason = reason + } +} + +public struct ListTagsForResourceInput { + /// The Amazon Resource Name (ARN) of the resource. + /// This member is required. + public var resourceArn: Swift.String? + + public init( + resourceArn: Swift.String? = nil + ) + { + self.resourceArn = resourceArn + } +} + +public struct ListTagsForResourceOutput { + /// The tags of the resource. + /// This member is required. + public var tags: [Swift.String: Swift.String]? + + public init( + tags: [Swift.String: Swift.String]? = nil + ) + { + self.tags = tags + } +} + +/// One or more quotas for AWS Application Testing exceeds the limit. +public struct ServiceQuotaExceededException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + /// The quote codes of AWS Application Testing that exceeded the limit. + public internal(set) var quotaCode: Swift.String? = nil + /// The resource ID of AWS Application Testing that exceeded the limit. + public internal(set) var resourceId: Swift.String? = nil + /// The resource type of AWS Application Testing that exceeded the limit. + public internal(set) var resourceType: Swift.String? = nil + /// The service code of AWS Application Testing that exceeded the limit. + public internal(set) var serviceCode: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ServiceQuotaExceededException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil, + quotaCode: Swift.String? = nil, + resourceId: Swift.String? = nil, + resourceType: Swift.String? = nil, + serviceCode: Swift.String? = nil + ) + { + self.properties.message = message + self.properties.quotaCode = quotaCode + self.properties.resourceId = resourceId + self.properties.resourceType = resourceType + self.properties.serviceCode = serviceCode + } +} + +public struct TagResourceInput { + /// The Amazon Resource Name (ARN) of the tag resource. + /// This member is required. + public var resourceArn: Swift.String? + /// The tags of the resource. + /// This member is required. + public var tags: [Swift.String: Swift.String]? + + public init( + resourceArn: Swift.String? = nil, + tags: [Swift.String: Swift.String]? = nil + ) + { + self.resourceArn = resourceArn + self.tags = tags + } +} + +public struct TagResourceOutput { + + public init() { } +} + +/// The parameters provided in the request conflict with existing resources. +public struct ConflictException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + /// The resource ID of the conflicts with existing resources. + public internal(set) var resourceId: Swift.String? = nil + /// The resource type of the conflicts with existing resources. + public internal(set) var resourceType: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ConflictException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil, + resourceId: Swift.String? = nil, + resourceType: Swift.String? = nil + ) + { + self.properties.message = message + self.properties.resourceId = resourceId + self.properties.resourceType = resourceType + } +} + +extension AppTestClientTypes { + + public enum CaptureTool: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case awsDms + case precisely + case sdkUnknown(Swift.String) + + public static var allCases: [CaptureTool] { + return [ + .awsDms, + .precisely + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .awsDms: return "AWS DMS" + case .precisely: return "Precisely" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + + public enum SourceDatabase: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case zOsDb2 + case sdkUnknown(Swift.String) + + public static var allCases: [SourceDatabase] { + return [ + .zOsDb2 + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .zOsDb2: return "z/OS-DB2" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + /// Specifies the source database metadata. + public struct SourceDatabaseMetadata { + /// The capture tool of the source database metadata. + /// This member is required. + public var captureTool: AppTestClientTypes.CaptureTool? + /// The type of the source database metadata. + /// This member is required. + public var type: AppTestClientTypes.SourceDatabase? + + public init( + captureTool: AppTestClientTypes.CaptureTool? = nil, + type: AppTestClientTypes.SourceDatabase? = nil + ) + { + self.captureTool = captureTool + self.type = type + } + } + +} + +extension AppTestClientTypes { + + public enum TargetDatabase: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case postgresql + case sdkUnknown(Swift.String) + + public static var allCases: [TargetDatabase] { + return [ + .postgresql + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .postgresql: return "PostgreSQL" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + /// Specifies a target database metadata. + public struct TargetDatabaseMetadata { + /// The capture tool of the target database metadata. + /// This member is required. + public var captureTool: AppTestClientTypes.CaptureTool? + /// The type of the target database metadata. + /// This member is required. + public var type: AppTestClientTypes.TargetDatabase? + + public init( + captureTool: AppTestClientTypes.CaptureTool? = nil, + type: AppTestClientTypes.TargetDatabase? = nil + ) + { + self.captureTool = captureTool + self.type = type + } + } + +} + +extension AppTestClientTypes { + /// Defines the Change Data Capture (CDC) of the database. + public struct DatabaseCDC { + /// The source metadata of the database CDC. + /// This member is required. + public var sourceMetadata: AppTestClientTypes.SourceDatabaseMetadata? + /// The target metadata of the database CDC. + /// This member is required. + public var targetMetadata: AppTestClientTypes.TargetDatabaseMetadata? + + public init( + sourceMetadata: AppTestClientTypes.SourceDatabaseMetadata? = nil, + targetMetadata: AppTestClientTypes.TargetDatabaseMetadata? = nil + ) + { + self.sourceMetadata = sourceMetadata + self.targetMetadata = targetMetadata + } + } + +} + +extension AppTestClientTypes { + + public enum Format: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case fixed + case lineSequential + case variable + case sdkUnknown(Swift.String) + + public static var allCases: [Format] { + return [ + .fixed, + .lineSequential, + .variable + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .fixed: return "FIXED" + case .lineSequential: return "LINE_SEQUENTIAL" + case .variable: return "VARIABLE" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + + public enum DataSetType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case ps + case sdkUnknown(Swift.String) + + public static var allCases: [DataSetType] { + return [ + .ps + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .ps: return "PS" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + /// Defines a data set. + public struct DataSet { + /// The CCSID of the data set. + /// This member is required. + public var ccsid: Swift.String? + /// The format of the data set. + /// This member is required. + public var format: AppTestClientTypes.Format? + /// The length of the data set. + /// This member is required. + public var length: Swift.Int? + /// The name of the data set. + /// This member is required. + public var name: Swift.String? + /// The type of the data set. + /// This member is required. + public var type: AppTestClientTypes.DataSetType? + + public init( + ccsid: Swift.String? = nil, + format: AppTestClientTypes.Format? = nil, + length: Swift.Int? = nil, + name: Swift.String? = nil, + type: AppTestClientTypes.DataSetType? = nil + ) + { + self.ccsid = ccsid + self.format = format + self.length = length + self.name = name + self.type = type + } + } + +} + +extension AppTestClientTypes { + /// Specifies a file metadata. + public enum FileMetadata { + /// The data sets of the file metadata. + case datasets([AppTestClientTypes.DataSet]) + /// The database CDC of the file metadata. + case databasecdc(AppTestClientTypes.DatabaseCDC) + case sdkUnknown(Swift.String) + } + +} + +extension AppTestClientTypes { + /// Specifies the input file. + public struct InputFile { + /// The file metadata of the input file. + /// This member is required. + public var fileMetadata: AppTestClientTypes.FileMetadata? + /// The source location of the input file. + /// This member is required. + public var sourceLocation: Swift.String? + /// The target location of the input file. + /// This member is required. + public var targetLocation: Swift.String? + + public init( + fileMetadata: AppTestClientTypes.FileMetadata? = nil, + sourceLocation: Swift.String? = nil, + targetLocation: Swift.String? = nil + ) + { + self.fileMetadata = fileMetadata + self.sourceLocation = sourceLocation + self.targetLocation = targetLocation + } + } + +} + +extension AppTestClientTypes { + /// Specifies the input. + public enum Input { + /// The file in the input. + case file(AppTestClientTypes.InputFile) + case sdkUnknown(Swift.String) + } + +} + +extension AppTestClientTypes { + /// Specifies an output file. + public struct OutputFile { + /// The file location of the output file. + public var fileLocation: Swift.String? + + public init( + fileLocation: Swift.String? = nil + ) + { + self.fileLocation = fileLocation + } + } + +} + +extension AppTestClientTypes { + /// Specifies an output. + public enum Output { + /// The file of the output. + case file(AppTestClientTypes.OutputFile) + case sdkUnknown(Swift.String) + } + +} + +extension AppTestClientTypes { + /// Compares the action. + public struct CompareAction { + /// The input of the compare action. + /// This member is required. + public var input: AppTestClientTypes.Input? + /// The output of the compare action. + public var output: AppTestClientTypes.Output? + + public init( + input: AppTestClientTypes.Input? = nil, + output: AppTestClientTypes.Output? = nil + ) + { + self.input = input + self.output = output + } + } + +} + +extension AppTestClientTypes { + /// Defines a batch. + public struct Batch { + /// The job name of the batch. + /// This member is required. + public var batchJobName: Swift.String? + /// The batch job parameters of the batch. + public var batchJobParameters: [Swift.String: Swift.String]? + /// The export data set names of the batch. + public var exportDataSetNames: [Swift.String]? + + public init( + batchJobName: Swift.String? = nil, + batchJobParameters: [Swift.String: Swift.String]? = nil, + exportDataSetNames: [Swift.String]? = nil + ) + { + self.batchJobName = batchJobName + self.batchJobParameters = batchJobParameters + self.exportDataSetNames = exportDataSetNames + } + } + +} + +extension AppTestClientTypes { + + public enum ScriptType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case selenium + case sdkUnknown(Swift.String) + + public static var allCases: [ScriptType] { + return [ + .selenium + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .selenium: return "Selenium" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + /// Specifies the script. + public struct Script { + /// The script location of the scripts. + /// This member is required. + public var scriptLocation: Swift.String? + /// The type of the scripts. + /// This member is required. + public var type: AppTestClientTypes.ScriptType? + + public init( + scriptLocation: Swift.String? = nil, + type: AppTestClientTypes.ScriptType? = nil + ) + { + self.scriptLocation = scriptLocation + self.type = type + } + } + +} + +extension AppTestClientTypes { + /// Specifies the TN3270 protocol. + public struct TN3270 { + /// The data set names of the TN3270 protocol. + public var exportDataSetNames: [Swift.String]? + /// The script of the TN3270 protocol. + /// This member is required. + public var script: AppTestClientTypes.Script? + + public init( + exportDataSetNames: [Swift.String]? = nil, + script: AppTestClientTypes.Script? = nil + ) + { + self.exportDataSetNames = exportDataSetNames + self.script = script + } + } + +} + +extension AppTestClientTypes { + /// Specifies the mainframe action type. + public enum MainframeActionType { + /// The batch of the mainframe action type. + case batch(AppTestClientTypes.Batch) + /// The tn3270 port of the mainframe action type. + case tn3270(AppTestClientTypes.TN3270) + case sdkUnknown(Swift.String) + } + +} + +extension AppTestClientTypes { + /// Specifies the mainframe action properties. + public struct MainframeActionProperties { + /// The DMS task ARN of the mainframe action properties. + public var dmsTaskArn: Swift.String? + + public init( + dmsTaskArn: Swift.String? = nil + ) + { + self.dmsTaskArn = dmsTaskArn + } + } + +} + +extension AppTestClientTypes { + /// Specifies the mainframe action. + public struct MainframeAction { + /// The action type of the mainframe action. + /// This member is required. + public var actionType: AppTestClientTypes.MainframeActionType? + /// The properties of the mainframe action. + public var properties: AppTestClientTypes.MainframeActionProperties? + /// The resource of the mainframe action. + /// This member is required. + public var resource: Swift.String? + + public init( + actionType: AppTestClientTypes.MainframeActionType? = nil, + properties: AppTestClientTypes.MainframeActionProperties? = nil, + resource: Swift.String? = nil + ) + { + self.actionType = actionType + self.properties = properties + self.resource = resource + } + } + +} + +extension AppTestClientTypes { + + public enum CloudFormationActionType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case create + case delete + case sdkUnknown(Swift.String) + + public static var allCases: [CloudFormationActionType] { + return [ + .create, + .delete + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .create: return "Create" + case .delete: return "Delete" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + /// Specifies the CloudFormation action. + public struct CloudFormationAction { + /// The action type of the CloudFormation action. + public var actionType: AppTestClientTypes.CloudFormationActionType? + /// The resource of the CloudFormation action. + /// This member is required. + public var resource: Swift.String? + + public init( + actionType: AppTestClientTypes.CloudFormationActionType? = nil, + resource: Swift.String? = nil + ) + { + self.actionType = actionType + self.resource = resource + } + } + +} + +extension AppTestClientTypes { + + public enum M2ManagedActionType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case configure + case deconfigure + case sdkUnknown(Swift.String) + + public static var allCases: [M2ManagedActionType] { + return [ + .configure, + .deconfigure + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .configure: return "Configure" + case .deconfigure: return "Deconfigure" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + /// Specifies the AWS Mainframe Modernization managed action properties. + public struct M2ManagedActionProperties { + /// Force stops the AWS Mainframe Modernization managed action properties. + public var forceStop: Swift.Bool? + /// The import data set location of the AWS Mainframe Modernization managed action properties. + public var importDataSetLocation: Swift.String? + + public init( + forceStop: Swift.Bool? = nil, + importDataSetLocation: Swift.String? = nil + ) + { + self.forceStop = forceStop + self.importDataSetLocation = importDataSetLocation + } + } + +} + +extension AppTestClientTypes { + /// Specifies the AWS Mainframe Modernization managed application action. + public struct M2ManagedApplicationAction { + /// The action type of the AWS Mainframe Modernization managed application action. + /// This member is required. + public var actionType: AppTestClientTypes.M2ManagedActionType? + /// The properties of the AWS Mainframe Modernization managed application action. + public var properties: AppTestClientTypes.M2ManagedActionProperties? + /// The resource of the AWS Mainframe Modernization managed application action. + /// This member is required. + public var resource: Swift.String? + + public init( + actionType: AppTestClientTypes.M2ManagedActionType? = nil, + properties: AppTestClientTypes.M2ManagedActionProperties? = nil, + resource: Swift.String? = nil + ) + { + self.actionType = actionType + self.properties = properties + self.resource = resource + } + } + +} + +extension AppTestClientTypes { + + public enum M2NonManagedActionType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case configure + case deconfigure + case sdkUnknown(Swift.String) + + public static var allCases: [M2NonManagedActionType] { + return [ + .configure, + .deconfigure + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .configure: return "Configure" + case .deconfigure: return "Deconfigure" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + /// Specifies the AWS Mainframe Modernization non-managed application action. + public struct M2NonManagedApplicationAction { + /// The action type of the AWS Mainframe Modernization non-managed application action. + /// This member is required. + public var actionType: AppTestClientTypes.M2NonManagedActionType? + /// The resource of the AWS Mainframe Modernization non-managed application action. + /// This member is required. + public var resource: Swift.String? + + public init( + actionType: AppTestClientTypes.M2NonManagedActionType? = nil, + resource: Swift.String? = nil + ) + { + self.actionType = actionType + self.resource = resource + } + } + +} + +extension AppTestClientTypes { + /// Specifies a resource action. + public enum ResourceAction { + /// The AWS Mainframe Modernization managed application action of the resource action. + case m2managedapplicationaction(AppTestClientTypes.M2ManagedApplicationAction) + /// The AWS Mainframe Modernization non-managed application action of the resource action. + case m2nonmanagedapplicationaction(AppTestClientTypes.M2NonManagedApplicationAction) + /// The CloudFormation action of the resource action. + case cloudformationaction(AppTestClientTypes.CloudFormationAction) + case sdkUnknown(Swift.String) + } + +} + +extension AppTestClientTypes { + /// Specifies a step action. + public enum StepAction { + /// The resource action of the step action. + case resourceaction(AppTestClientTypes.ResourceAction) + /// The mainframe action of the step action. + case mainframeaction(AppTestClientTypes.MainframeAction) + /// The compare action of the step action. + case compareaction(AppTestClientTypes.CompareAction) + case sdkUnknown(Swift.String) + } + +} + +extension AppTestClientTypes { + /// Defines a step. + public struct Step { + /// The action of the step. + /// This member is required. + public var action: AppTestClientTypes.StepAction? + /// The description of the step. + public var description: Swift.String? + /// The name of the step. + /// This member is required. + public var name: Swift.String? + + public init( + action: AppTestClientTypes.StepAction? = nil, + description: Swift.String? = nil, + name: Swift.String? = nil + ) + { + self.action = action + self.description = description + self.name = name + } + } + +} + +public struct CreateTestCaseInput { + /// The client token of the test case. + public var clientToken: Swift.String? + /// The description of the test case. + public var description: Swift.String? + /// The name of the test case. + /// This member is required. + public var name: Swift.String? + /// The steps in the test case. + /// This member is required. + public var steps: [AppTestClientTypes.Step]? + /// The specified tags of the test case. + public var tags: [Swift.String: Swift.String]? + + public init( + clientToken: Swift.String? = nil, + description: Swift.String? = nil, + name: Swift.String? = nil, + steps: [AppTestClientTypes.Step]? = nil, + tags: [Swift.String: Swift.String]? = nil + ) + { + self.clientToken = clientToken + self.description = description + self.name = name + self.steps = steps + self.tags = tags + } +} + +public struct CreateTestCaseOutput { + /// The test case ID of the test case. + /// This member is required. + public var testCaseId: Swift.String? + /// The test case version of the test case. + /// This member is required. + public var testCaseVersion: Swift.Int? + + public init( + testCaseId: Swift.String? = nil, + testCaseVersion: Swift.Int? = nil + ) + { + self.testCaseId = testCaseId + self.testCaseVersion = testCaseVersion + } +} + +public struct DeleteTestCaseInput { + /// The test case ID of the test case. + /// This member is required. + public var testCaseId: Swift.String? + + public init( + testCaseId: Swift.String? = nil + ) + { + self.testCaseId = testCaseId + } +} + +public struct DeleteTestCaseOutput { + + public init() { } +} + +public struct GetTestCaseInput { + /// The request test ID of the test case. + /// This member is required. + public var testCaseId: Swift.String? + /// The test case version of the test case. + public var testCaseVersion: Swift.Int? + + public init( + testCaseId: Swift.String? = nil, + testCaseVersion: Swift.Int? = nil + ) + { + self.testCaseId = testCaseId + self.testCaseVersion = testCaseVersion + } +} + +extension AppTestClientTypes { + + public enum TestCaseLifecycle: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case active + case deleting + case sdkUnknown(Swift.String) + + public static var allCases: [TestCaseLifecycle] { + return [ + .active, + .deleting + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .active: return "Active" + case .deleting: return "Deleting" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + /// Specifies the latest version of a test case. + public struct TestCaseLatestVersion { + /// The status of the test case latest version. + /// This member is required. + public var status: AppTestClientTypes.TestCaseLifecycle? + /// The status reason of the test case latest version. + public var statusReason: Swift.String? + /// The version of the test case latest version. + /// This member is required. + public var version: Swift.Int? + + public init( + status: AppTestClientTypes.TestCaseLifecycle? = nil, + statusReason: Swift.String? = nil, + version: Swift.Int? = nil + ) + { + self.status = status + self.statusReason = statusReason + self.version = version + } + } + +} + +public struct GetTestCaseOutput { + /// The creation time of the test case. + /// This member is required. + public var creationTime: Foundation.Date? + /// The description of the test case. + public var description: Swift.String? + /// The last update time of the test case. + /// This member is required. + public var lastUpdateTime: Foundation.Date? + /// The latest version of the test case. + /// This member is required. + public var latestVersion: AppTestClientTypes.TestCaseLatestVersion? + /// The name of the test case. + /// This member is required. + public var name: Swift.String? + /// The status of the test case. + /// This member is required. + public var status: AppTestClientTypes.TestCaseLifecycle? + /// The status reason of the test case. + public var statusReason: Swift.String? + /// The steps of the test case. + /// This member is required. + public var steps: [AppTestClientTypes.Step]? + /// The tags of the test case. + public var tags: [Swift.String: Swift.String]? + /// The Amazon Resource Name (ARN) of the test case. + /// This member is required. + public var testCaseArn: Swift.String? + /// The response test ID of the test case. + /// This member is required. + public var testCaseId: Swift.String? + /// The case version of the test case. + /// This member is required. + public var testCaseVersion: Swift.Int? + + public init( + creationTime: Foundation.Date? = nil, + description: Swift.String? = nil, + lastUpdateTime: Foundation.Date? = nil, + latestVersion: AppTestClientTypes.TestCaseLatestVersion? = nil, + name: Swift.String? = nil, + status: AppTestClientTypes.TestCaseLifecycle? = nil, + statusReason: Swift.String? = nil, + steps: [AppTestClientTypes.Step]? = nil, + tags: [Swift.String: Swift.String]? = nil, + testCaseArn: Swift.String? = nil, + testCaseId: Swift.String? = nil, + testCaseVersion: Swift.Int? = nil + ) + { + self.creationTime = creationTime + self.description = description + self.lastUpdateTime = lastUpdateTime + self.latestVersion = latestVersion + self.name = name + self.status = status + self.statusReason = statusReason + self.steps = steps + self.tags = tags + self.testCaseArn = testCaseArn + self.testCaseId = testCaseId + self.testCaseVersion = testCaseVersion + } +} + +public struct ListTestCasesInput { + /// The maximum results of the test case. + public var maxResults: Swift.Int? + /// The next token of the test cases. + public var nextToken: Swift.String? + /// The IDs of the test cases. + public var testCaseIds: [Swift.String]? + + public init( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + testCaseIds: [Swift.String]? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + self.testCaseIds = testCaseIds + } +} + +extension AppTestClientTypes { + /// Specifies a test case summary. + public struct TestCaseSummary { + /// The creation time of the test case summary. + /// This member is required. + public var creationTime: Foundation.Date? + /// The last update time of the test case summary. + /// This member is required. + public var lastUpdateTime: Foundation.Date? + /// The latest version of the test case summary. + /// This member is required. + public var latestVersion: Swift.Int? + /// The name of the test case summary. + /// This member is required. + public var name: Swift.String? + /// The status of the test case summary. + /// This member is required. + public var status: AppTestClientTypes.TestCaseLifecycle? + /// The status reason of the test case summary. + public var statusReason: Swift.String? + /// The test case Amazon Resource Name (ARN) of the test case summary. + /// This member is required. + public var testCaseArn: Swift.String? + /// The test case ID of the test case summary. + /// This member is required. + public var testCaseId: Swift.String? + + public init( + creationTime: Foundation.Date? = nil, + lastUpdateTime: Foundation.Date? = nil, + latestVersion: Swift.Int? = nil, + name: Swift.String? = nil, + status: AppTestClientTypes.TestCaseLifecycle? = nil, + statusReason: Swift.String? = nil, + testCaseArn: Swift.String? = nil, + testCaseId: Swift.String? = nil + ) + { + self.creationTime = creationTime + self.lastUpdateTime = lastUpdateTime + self.latestVersion = latestVersion + self.name = name + self.status = status + self.statusReason = statusReason + self.testCaseArn = testCaseArn + self.testCaseId = testCaseId + } + } + +} + +public struct ListTestCasesOutput { + /// The next token in test cases. + public var nextToken: Swift.String? + /// The test cases in an application. + /// This member is required. + public var testCases: [AppTestClientTypes.TestCaseSummary]? + + public init( + nextToken: Swift.String? = nil, + testCases: [AppTestClientTypes.TestCaseSummary]? = nil + ) + { + self.nextToken = nextToken + self.testCases = testCases + } +} + +public struct UpdateTestCaseInput { + /// The description of the test case. + public var description: Swift.String? + /// The steps of the test case. + public var steps: [AppTestClientTypes.Step]? + /// The test case ID of the test case. + /// This member is required. + public var testCaseId: Swift.String? + + public init( + description: Swift.String? = nil, + steps: [AppTestClientTypes.Step]? = nil, + testCaseId: Swift.String? = nil + ) + { + self.description = description + self.steps = steps + self.testCaseId = testCaseId + } +} + +public struct UpdateTestCaseOutput { + /// The test case ID of the test case. + /// This member is required. + public var testCaseId: Swift.String? + /// The test case version of the test case. + /// This member is required. + public var testCaseVersion: Swift.Int? + + public init( + testCaseId: Swift.String? = nil, + testCaseVersion: Swift.Int? = nil + ) + { + self.testCaseId = testCaseId + self.testCaseVersion = testCaseVersion + } +} + +extension AppTestClientTypes { + /// Specifies the CloudFormation template and its parameters. + public struct CloudFormation { + /// The CloudFormation properties in the CloudFormation template. + public var parameters: [Swift.String: Swift.String]? + /// The template location of the CloudFormation template. + /// This member is required. + public var templateLocation: Swift.String? + + public init( + parameters: [Swift.String: Swift.String]? = nil, + templateLocation: Swift.String? = nil + ) + { + self.parameters = parameters + self.templateLocation = templateLocation + } + } + +} + +extension AppTestClientTypes { + + public enum M2ManagedRuntime: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case microfocus + case sdkUnknown(Swift.String) + + public static var allCases: [M2ManagedRuntime] { + return [ + .microfocus + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .microfocus: return "MicroFocus" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + /// Specifies the AWS Mainframe Modernization managed application. + public struct M2ManagedApplication { + /// The application ID of the AWS Mainframe Modernization managed application. + /// This member is required. + public var applicationId: Swift.String? + /// The listener port of the AWS Mainframe Modernization managed application. + public var listenerPort: Swift.String? + /// The runtime of the AWS Mainframe Modernization managed application. + /// This member is required. + public var runtime: AppTestClientTypes.M2ManagedRuntime? + /// The VPC endpoint service name of the AWS Mainframe Modernization managed application. + public var vpcEndpointServiceName: Swift.String? + + public init( + applicationId: Swift.String? = nil, + listenerPort: Swift.String? = nil, + runtime: AppTestClientTypes.M2ManagedRuntime? = nil, + vpcEndpointServiceName: Swift.String? = nil + ) + { + self.applicationId = applicationId + self.listenerPort = listenerPort + self.runtime = runtime + self.vpcEndpointServiceName = vpcEndpointServiceName + } + } + +} + +extension AppTestClientTypes { + + public enum M2NonManagedRuntime: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case bluage + case sdkUnknown(Swift.String) + + public static var allCases: [M2NonManagedRuntime] { + return [ + .bluage + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .bluage: return "BluAge" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + /// Specifies the AWS Mainframe Modernization non-managed application. + public struct M2NonManagedApplication { + /// The listener port of the AWS Mainframe Modernization non-managed application. + /// This member is required. + public var listenerPort: Swift.String? + /// The runtime of the AWS Mainframe Modernization non-managed application. + /// This member is required. + public var runtime: AppTestClientTypes.M2NonManagedRuntime? + /// The VPC endpoint service name of the AWS Mainframe Modernization non-managed application. + /// This member is required. + public var vpcEndpointServiceName: Swift.String? + /// The web application name of the AWS Mainframe Modernization non-managed application. + public var webAppName: Swift.String? + + public init( + listenerPort: Swift.String? = nil, + runtime: AppTestClientTypes.M2NonManagedRuntime? = nil, + vpcEndpointServiceName: Swift.String? = nil, + webAppName: Swift.String? = nil + ) + { + self.listenerPort = listenerPort + self.runtime = runtime + self.vpcEndpointServiceName = vpcEndpointServiceName + self.webAppName = webAppName + } + } + +} + +extension AppTestClientTypes { + /// Specifies the resource type. + public enum ResourceType { + /// The CloudFormation template of the resource type. + case cloudformation(AppTestClientTypes.CloudFormation) + /// The AWS Mainframe Modernization managed application of the resource type. + case m2managedapplication(AppTestClientTypes.M2ManagedApplication) + /// The AWS Mainframe Modernization non-managed application of the resource type. + case m2nonmanagedapplication(AppTestClientTypes.M2NonManagedApplication) + case sdkUnknown(Swift.String) + } + +} + +extension AppTestClientTypes { + /// Specifies a resource. + public struct Resource { + /// The name of the resource. + /// This member is required. + public var name: Swift.String? + /// The type of the resource. + /// This member is required. + public var type: AppTestClientTypes.ResourceType? + + public init( + name: Swift.String? = nil, + type: AppTestClientTypes.ResourceType? = nil + ) + { + self.name = name + self.type = type + } + } + +} + +extension AppTestClientTypes { + /// Specifies the service settings. + public struct ServiceSettings { + /// The KMS key ID of the service settings. + public var kmsKeyId: Swift.String? + + public init( + kmsKeyId: Swift.String? = nil + ) + { + self.kmsKeyId = kmsKeyId + } + } + +} + +public struct CreateTestConfigurationInput { + /// The client token of the test configuration. + public var clientToken: Swift.String? + /// The description of the test configuration. + public var description: Swift.String? + /// The name of the test configuration. + /// This member is required. + public var name: Swift.String? + /// The properties of the test configuration. + public var properties: [Swift.String: Swift.String]? + /// The defined resources of the test configuration. + /// This member is required. + public var resources: [AppTestClientTypes.Resource]? + /// The service settings of the test configuration. + public var serviceSettings: AppTestClientTypes.ServiceSettings? + /// The tags of the test configuration. + public var tags: [Swift.String: Swift.String]? + + public init( + clientToken: Swift.String? = nil, + description: Swift.String? = nil, + name: Swift.String? = nil, + properties: [Swift.String: Swift.String]? = nil, + resources: [AppTestClientTypes.Resource]? = nil, + serviceSettings: AppTestClientTypes.ServiceSettings? = nil, + tags: [Swift.String: Swift.String]? = nil + ) + { + self.clientToken = clientToken + self.description = description + self.name = name + self.properties = properties + self.resources = resources + self.serviceSettings = serviceSettings + self.tags = tags + } +} + +public struct CreateTestConfigurationOutput { + /// The test configuration ID. + /// This member is required. + public var testConfigurationId: Swift.String? + /// The test configuration version. + /// This member is required. + public var testConfigurationVersion: Swift.Int? + + public init( + testConfigurationId: Swift.String? = nil, + testConfigurationVersion: Swift.Int? = nil + ) + { + self.testConfigurationId = testConfigurationId + self.testConfigurationVersion = testConfigurationVersion + } +} + +public struct DeleteTestConfigurationInput { + /// The test ID of the test configuration. + /// This member is required. + public var testConfigurationId: Swift.String? + + public init( + testConfigurationId: Swift.String? = nil + ) + { + self.testConfigurationId = testConfigurationId + } +} + +public struct DeleteTestConfigurationOutput { + + public init() { } +} + +public struct GetTestConfigurationInput { + /// The request test configuration ID. + /// This member is required. + public var testConfigurationId: Swift.String? + /// The test configuration version. + public var testConfigurationVersion: Swift.Int? + + public init( + testConfigurationId: Swift.String? = nil, + testConfigurationVersion: Swift.Int? = nil + ) + { + self.testConfigurationId = testConfigurationId + self.testConfigurationVersion = testConfigurationVersion + } +} + +extension AppTestClientTypes { + + public enum TestConfigurationLifecycle: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case active + case deleting + case sdkUnknown(Swift.String) + + public static var allCases: [TestConfigurationLifecycle] { + return [ + .active, + .deleting + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .active: return "Active" + case .deleting: return "Deleting" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + /// Specifies the latest version of the test configuration. + public struct TestConfigurationLatestVersion { + /// The status of the test configuration latest version. + /// This member is required. + public var status: AppTestClientTypes.TestConfigurationLifecycle? + /// The status reason of the test configuration latest version. + public var statusReason: Swift.String? + /// The version of the test configuration latest version. + /// This member is required. + public var version: Swift.Int? + + public init( + status: AppTestClientTypes.TestConfigurationLifecycle? = nil, + statusReason: Swift.String? = nil, + version: Swift.Int? = nil + ) + { + self.status = status + self.statusReason = statusReason + self.version = version + } + } + +} + +public struct GetTestConfigurationOutput { + /// The creation time of the test configuration. + /// This member is required. + public var creationTime: Foundation.Date? + /// The description of the test configuration. + public var description: Swift.String? + /// The last update time of the test configuration. + /// This member is required. + public var lastUpdateTime: Foundation.Date? + /// The latest version of the test configuration. + /// This member is required. + public var latestVersion: AppTestClientTypes.TestConfigurationLatestVersion? + /// The test configuration name + /// This member is required. + public var name: Swift.String? + /// The properties of the test configuration. + /// This member is required. + public var properties: [Swift.String: Swift.String]? + /// The resources of the test configuration. + /// This member is required. + public var resources: [AppTestClientTypes.Resource]? + /// The service settings of the test configuration. + public var serviceSettings: AppTestClientTypes.ServiceSettings? + /// The status of the test configuration. + /// This member is required. + public var status: AppTestClientTypes.TestConfigurationLifecycle? + /// The status reason of the test configuration. + public var statusReason: Swift.String? + /// The tags of the test configuration. + public var tags: [Swift.String: Swift.String]? + /// The test configuration Amazon Resource Name (ARN). + /// This member is required. + public var testConfigurationArn: Swift.String? + /// The response test configuration ID. + /// This member is required. + public var testConfigurationId: Swift.String? + /// The test configuration version. + /// This member is required. + public var testConfigurationVersion: Swift.Int? + + public init( + creationTime: Foundation.Date? = nil, + description: Swift.String? = nil, + lastUpdateTime: Foundation.Date? = nil, + latestVersion: AppTestClientTypes.TestConfigurationLatestVersion? = nil, + name: Swift.String? = nil, + properties: [Swift.String: Swift.String]? = nil, + resources: [AppTestClientTypes.Resource]? = nil, + serviceSettings: AppTestClientTypes.ServiceSettings? = nil, + status: AppTestClientTypes.TestConfigurationLifecycle? = nil, + statusReason: Swift.String? = nil, + tags: [Swift.String: Swift.String]? = nil, + testConfigurationArn: Swift.String? = nil, + testConfigurationId: Swift.String? = nil, + testConfigurationVersion: Swift.Int? = nil + ) + { + self.creationTime = creationTime + self.description = description + self.lastUpdateTime = lastUpdateTime + self.latestVersion = latestVersion + self.name = name + self.properties = properties + self.resources = resources + self.serviceSettings = serviceSettings + self.status = status + self.statusReason = statusReason + self.tags = tags + self.testConfigurationArn = testConfigurationArn + self.testConfigurationId = testConfigurationId + self.testConfigurationVersion = testConfigurationVersion + } +} + +public struct ListTestConfigurationsInput { + /// The maximum results of the test configuration. + public var maxResults: Swift.Int? + /// The next token for the test configurations. + public var nextToken: Swift.String? + /// The configuration IDs of the test configurations. + public var testConfigurationIds: [Swift.String]? + + public init( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + testConfigurationIds: [Swift.String]? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + self.testConfigurationIds = testConfigurationIds + } +} + +extension AppTestClientTypes { + /// Specifies a test configuration summary. + public struct TestConfigurationSummary { + /// The creation time of the test configuration summary. + /// This member is required. + public var creationTime: Foundation.Date? + /// The last update time of the test configuration summary. + /// This member is required. + public var lastUpdateTime: Foundation.Date? + /// The latest version of the test configuration summary. + /// This member is required. + public var latestVersion: Swift.Int? + /// The name of the test configuration summary. + /// This member is required. + public var name: Swift.String? + /// The status of the test configuration summary. + /// This member is required. + public var status: AppTestClientTypes.TestConfigurationLifecycle? + /// The status reason of the test configuration summary. + public var statusReason: Swift.String? + /// The test configuration ARN of the test configuration summary. + /// This member is required. + public var testConfigurationArn: Swift.String? + /// The test configuration ID of the test configuration summary. + /// This member is required. + public var testConfigurationId: Swift.String? + + public init( + creationTime: Foundation.Date? = nil, + lastUpdateTime: Foundation.Date? = nil, + latestVersion: Swift.Int? = nil, + name: Swift.String? = nil, + status: AppTestClientTypes.TestConfigurationLifecycle? = nil, + statusReason: Swift.String? = nil, + testConfigurationArn: Swift.String? = nil, + testConfigurationId: Swift.String? = nil + ) + { + self.creationTime = creationTime + self.lastUpdateTime = lastUpdateTime + self.latestVersion = latestVersion + self.name = name + self.status = status + self.statusReason = statusReason + self.testConfigurationArn = testConfigurationArn + self.testConfigurationId = testConfigurationId + } + } + +} + +public struct ListTestConfigurationsOutput { + /// The next token in the test configurations. + public var nextToken: Swift.String? + /// The test configurations. + /// This member is required. + public var testConfigurations: [AppTestClientTypes.TestConfigurationSummary]? + + public init( + nextToken: Swift.String? = nil, + testConfigurations: [AppTestClientTypes.TestConfigurationSummary]? = nil + ) + { + self.nextToken = nextToken + self.testConfigurations = testConfigurations + } +} + +public struct UpdateTestConfigurationInput { + /// The description of the test configuration. + public var description: Swift.String? + /// The properties of the test configuration. + public var properties: [Swift.String: Swift.String]? + /// The resources of the test configuration. + public var resources: [AppTestClientTypes.Resource]? + /// The service settings of the test configuration. + public var serviceSettings: AppTestClientTypes.ServiceSettings? + /// The test configuration ID of the test configuration. + /// This member is required. + public var testConfigurationId: Swift.String? + + public init( + description: Swift.String? = nil, + properties: [Swift.String: Swift.String]? = nil, + resources: [AppTestClientTypes.Resource]? = nil, + serviceSettings: AppTestClientTypes.ServiceSettings? = nil, + testConfigurationId: Swift.String? = nil + ) + { + self.description = description + self.properties = properties + self.resources = resources + self.serviceSettings = serviceSettings + self.testConfigurationId = testConfigurationId + } +} + +public struct UpdateTestConfigurationOutput { + /// The configuration ID of the test configuration. + /// This member is required. + public var testConfigurationId: Swift.String? + /// The configuration version of the test configuration. + /// This member is required. + public var testConfigurationVersion: Swift.Int? + + public init( + testConfigurationId: Swift.String? = nil, + testConfigurationVersion: Swift.Int? = nil + ) + { + self.testConfigurationId = testConfigurationId + self.testConfigurationVersion = testConfigurationVersion + } +} + +public struct DeleteTestRunInput { + /// The run ID of the test run. + /// This member is required. + public var testRunId: Swift.String? + + public init( + testRunId: Swift.String? = nil + ) + { + self.testRunId = testRunId + } +} + +public struct DeleteTestRunOutput { + + public init() { } +} + +public struct GetTestRunStepInput { + /// The step name of the test run step. + /// This member is required. + public var stepName: Swift.String? + /// The test case ID of a test run step. + public var testCaseId: Swift.String? + /// The test run ID of the test run step. + /// This member is required. + public var testRunId: Swift.String? + /// The test suite ID of a test run step. + public var testSuiteId: Swift.String? + + public init( + stepName: Swift.String? = nil, + testCaseId: Swift.String? = nil, + testRunId: Swift.String? = nil, + testSuiteId: Swift.String? = nil + ) + { + self.stepName = stepName + self.testCaseId = testCaseId + self.testRunId = testRunId + self.testSuiteId = testSuiteId + } +} + +extension AppTestClientTypes { + + public enum StepRunStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case failed + case running + case success + case sdkUnknown(Swift.String) + + public static var allCases: [StepRunStatus] { + return [ + .failed, + .running, + .success + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .failed: return "Failed" + case .running: return "Running" + case .success: return "Success" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + /// Compares the database Change Data Capture (CDC) step input. + public struct CompareDatabaseCDCStepInput { + /// The output location of the compare database CDC step input. + public var outputLocation: Swift.String? + /// The source location of the compare database CDC step input. + /// This member is required. + public var sourceLocation: Swift.String? + /// The source metadata of the compare database CDC step input. + /// This member is required. + public var sourceMetadata: AppTestClientTypes.SourceDatabaseMetadata? + /// The target location of the compare database CDC step input. + /// This member is required. + public var targetLocation: Swift.String? + /// The target metadata location of the compare database CDC step input. + /// This member is required. + public var targetMetadata: AppTestClientTypes.TargetDatabaseMetadata? + + public init( + outputLocation: Swift.String? = nil, + sourceLocation: Swift.String? = nil, + sourceMetadata: AppTestClientTypes.SourceDatabaseMetadata? = nil, + targetLocation: Swift.String? = nil, + targetMetadata: AppTestClientTypes.TargetDatabaseMetadata? = nil + ) + { + self.outputLocation = outputLocation + self.sourceLocation = sourceLocation + self.sourceMetadata = sourceMetadata + self.targetLocation = targetLocation + self.targetMetadata = targetMetadata + } + } + +} + +extension AppTestClientTypes { + + public enum ComparisonStatusEnum: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case different + case equal + case equivalent + case sdkUnknown(Swift.String) + + public static var allCases: [ComparisonStatusEnum] { + return [ + .different, + .equal, + .equivalent + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .different: return "Different" + case .equal: return "Equal" + case .equivalent: return "Equivalent" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + /// Compares the database CDC step output. + public struct CompareDatabaseCDCStepOutput { + /// The comparison output of the compare database CDC step output. + /// This member is required. + public var comparisonOutputLocation: Swift.String? + /// The comparison status of the compare database CDC step output. + /// This member is required. + public var comparisonStatus: AppTestClientTypes.ComparisonStatusEnum? + + public init( + comparisonOutputLocation: Swift.String? = nil, + comparisonStatus: AppTestClientTypes.ComparisonStatusEnum? = nil + ) + { + self.comparisonOutputLocation = comparisonOutputLocation + self.comparisonStatus = comparisonStatus + } + } + +} + +extension AppTestClientTypes { + /// Compares the database CDC summary. + public struct CompareDatabaseCDCSummary { + /// The step input of the compare database CDC summary. + /// This member is required. + public var stepInput: AppTestClientTypes.CompareDatabaseCDCStepInput? + /// The step output of the compare database CDC summary. + public var stepOutput: AppTestClientTypes.CompareDatabaseCDCStepOutput? + + public init( + stepInput: AppTestClientTypes.CompareDatabaseCDCStepInput? = nil, + stepOutput: AppTestClientTypes.CompareDatabaseCDCStepOutput? = nil + ) + { + self.stepInput = stepInput + self.stepOutput = stepOutput + } + } + +} + +extension AppTestClientTypes { + /// Specifies the compare data sets step input. + public struct CompareDataSetsStepInput { + /// The source data sets of the compare data sets step input location. + /// This member is required. + public var sourceDataSets: [AppTestClientTypes.DataSet]? + /// The source location of the compare data sets step input location. + /// This member is required. + public var sourceLocation: Swift.String? + /// The target data sets of the compare data sets step input location. + /// This member is required. + public var targetDataSets: [AppTestClientTypes.DataSet]? + /// The target location of the compare data sets step input location. + /// This member is required. + public var targetLocation: Swift.String? + + public init( + sourceDataSets: [AppTestClientTypes.DataSet]? = nil, + sourceLocation: Swift.String? = nil, + targetDataSets: [AppTestClientTypes.DataSet]? = nil, + targetLocation: Swift.String? = nil + ) + { + self.sourceDataSets = sourceDataSets + self.sourceLocation = sourceLocation + self.targetDataSets = targetDataSets + self.targetLocation = targetLocation + } + } + +} + +extension AppTestClientTypes { + /// Specifies the compare data sets step output. + public struct CompareDataSetsStepOutput { + /// The comparison output location of the compare data sets step output. + /// This member is required. + public var comparisonOutputLocation: Swift.String? + /// The comparison status of the compare data sets step output. + /// This member is required. + public var comparisonStatus: AppTestClientTypes.ComparisonStatusEnum? + + public init( + comparisonOutputLocation: Swift.String? = nil, + comparisonStatus: AppTestClientTypes.ComparisonStatusEnum? = nil + ) + { + self.comparisonOutputLocation = comparisonOutputLocation + self.comparisonStatus = comparisonStatus + } + } + +} + +extension AppTestClientTypes { + /// Compares data sets summary. + public struct CompareDataSetsSummary { + /// The step input of the compare data sets summary. + /// This member is required. + public var stepInput: AppTestClientTypes.CompareDataSetsStepInput? + /// The step output of the compare data sets summary. + public var stepOutput: AppTestClientTypes.CompareDataSetsStepOutput? + + public init( + stepInput: AppTestClientTypes.CompareDataSetsStepInput? = nil, + stepOutput: AppTestClientTypes.CompareDataSetsStepOutput? = nil + ) + { + self.stepInput = stepInput + self.stepOutput = stepOutput + } + } + +} + +extension AppTestClientTypes { + /// Compares the file type. + public enum CompareFileType { + /// The data sets in the compare file type. + case datasets(AppTestClientTypes.CompareDataSetsSummary) + /// The database CDC of the compare file type. + case databasecdc(AppTestClientTypes.CompareDatabaseCDCSummary) + case sdkUnknown(Swift.String) + } + +} + +extension AppTestClientTypes { + /// Defines a file. + public enum File { + /// The file type of the file. + case filetype(AppTestClientTypes.CompareFileType) + case sdkUnknown(Swift.String) + } + +} + +extension AppTestClientTypes { + /// Specifies the compare action summary. + public struct CompareActionSummary { + /// The type of the compare action summary. + /// This member is required. + public var type: AppTestClientTypes.File? + + public init( + type: AppTestClientTypes.File? = nil + ) + { + self.type = type + } + } + +} + +extension AppTestClientTypes { + /// Specifies the AWS Mainframe Modernization managed application summary. + public struct M2ManagedApplicationSummary { + /// The application ID of the AWS Mainframe Modernization managed application summary. + /// This member is required. + public var applicationId: Swift.String? + /// The listener port of the AWS Mainframe Modernization managed application summary. + public var listenerPort: Swift.Int? + /// The runtime of the AWS Mainframe Modernization managed application summary. + /// This member is required. + public var runtime: AppTestClientTypes.M2ManagedRuntime? + + public init( + applicationId: Swift.String? = nil, + listenerPort: Swift.Int? = nil, + runtime: AppTestClientTypes.M2ManagedRuntime? = nil + ) + { + self.applicationId = applicationId + self.listenerPort = listenerPort + self.runtime = runtime + } + } + +} + +extension AppTestClientTypes { + /// Specifies the AWS Mainframe Modernization non-managed application summary. + public struct M2NonManagedApplicationSummary { + /// The listener port of the AWS Mainframe Modernization non-managed application summary. + /// This member is required. + public var listenerPort: Swift.Int? + /// The runtime of the AWS Mainframe Modernization non-managed application summary. + /// This member is required. + public var runtime: AppTestClientTypes.M2NonManagedRuntime? + /// The VPC endpoint service name of the AWS Mainframe Modernization non-managed application summary. + /// This member is required. + public var vpcEndpointServiceName: Swift.String? + /// The web application name of the AWS Mainframe Modernization non-managed application summary. + public var webAppName: Swift.String? + + public init( + listenerPort: Swift.Int? = nil, + runtime: AppTestClientTypes.M2NonManagedRuntime? = nil, + vpcEndpointServiceName: Swift.String? = nil, + webAppName: Swift.String? = nil + ) + { + self.listenerPort = listenerPort + self.runtime = runtime + self.vpcEndpointServiceName = vpcEndpointServiceName + self.webAppName = webAppName + } + } + +} + +extension AppTestClientTypes { + /// Specifies the mainframe resource summary. + public enum MainframeResourceSummary { + /// The AWS Mainframe Modernization managed application in the mainframe resource summary. + case m2managedapplication(AppTestClientTypes.M2ManagedApplicationSummary) + /// The AWS Mainframe Modernization non-managed application in the mainframe resource summary. + case m2nonmanagedapplication(AppTestClientTypes.M2NonManagedApplicationSummary) + case sdkUnknown(Swift.String) + } + +} + +extension AppTestClientTypes { + /// Defines a batch step input. + public struct BatchStepInput { + /// The batch job name of the batch step input. + /// This member is required. + public var batchJobName: Swift.String? + /// The batch job parameters of the batch step input. + public var batchJobParameters: [Swift.String: Swift.String]? + /// The export data set names of the batch step input. + public var exportDataSetNames: [Swift.String]? + /// The properties of the batch step input. + public var properties: AppTestClientTypes.MainframeActionProperties? + /// The resource of the batch step input. + /// This member is required. + public var resource: AppTestClientTypes.MainframeResourceSummary? + + public init( + batchJobName: Swift.String? = nil, + batchJobParameters: [Swift.String: Swift.String]? = nil, + exportDataSetNames: [Swift.String]? = nil, + properties: AppTestClientTypes.MainframeActionProperties? = nil, + resource: AppTestClientTypes.MainframeResourceSummary? = nil + ) + { + self.batchJobName = batchJobName + self.batchJobParameters = batchJobParameters + self.exportDataSetNames = exportDataSetNames + self.properties = properties + self.resource = resource + } + } + +} + +extension AppTestClientTypes { + /// Defines a batch step output. + public struct BatchStepOutput { + /// The data set details of the batch step output. + public var dataSetDetails: [AppTestClientTypes.DataSet]? + /// The data set export location of the batch step output. + public var dataSetExportLocation: Swift.String? + /// The Database Migration Service (DMS) output location of the batch step output. + public var dmsOutputLocation: Swift.String? + + public init( + dataSetDetails: [AppTestClientTypes.DataSet]? = nil, + dataSetExportLocation: Swift.String? = nil, + dmsOutputLocation: Swift.String? = nil + ) + { + self.dataSetDetails = dataSetDetails + self.dataSetExportLocation = dataSetExportLocation + self.dmsOutputLocation = dmsOutputLocation + } + } + +} + +extension AppTestClientTypes { + /// Summarizes a batch job. + public struct BatchSummary { + /// The step input of the batch summary. + /// This member is required. + public var stepInput: AppTestClientTypes.BatchStepInput? + /// The step output of the batch summary. + public var stepOutput: AppTestClientTypes.BatchStepOutput? + + public init( + stepInput: AppTestClientTypes.BatchStepInput? = nil, + stepOutput: AppTestClientTypes.BatchStepOutput? = nil + ) + { + self.stepInput = stepInput + self.stepOutput = stepOutput + } + } + +} + +extension AppTestClientTypes { + /// Specifies the scripts summary. + public struct ScriptSummary { + /// The script location of the script summary. + /// This member is required. + public var scriptLocation: Swift.String? + /// The type of the script summary. + /// This member is required. + public var type: AppTestClientTypes.ScriptType? + + public init( + scriptLocation: Swift.String? = nil, + type: AppTestClientTypes.ScriptType? = nil + ) + { + self.scriptLocation = scriptLocation + self.type = type + } + } + +} + +extension AppTestClientTypes { + /// Specifies a TN3270 step input. + public struct TN3270StepInput { + /// The export data set names of the TN3270 step input. + public var exportDataSetNames: [Swift.String]? + /// The properties of the TN3270 step input. + public var properties: AppTestClientTypes.MainframeActionProperties? + /// The resource of the TN3270 step input. + /// This member is required. + public var resource: AppTestClientTypes.MainframeResourceSummary? + /// The script of the TN3270 step input. + /// This member is required. + public var script: AppTestClientTypes.ScriptSummary? + + public init( + exportDataSetNames: [Swift.String]? = nil, + properties: AppTestClientTypes.MainframeActionProperties? = nil, + resource: AppTestClientTypes.MainframeResourceSummary? = nil, + script: AppTestClientTypes.ScriptSummary? = nil + ) + { + self.exportDataSetNames = exportDataSetNames + self.properties = properties + self.resource = resource + self.script = script + } + } + +} + +extension AppTestClientTypes { + /// Specifies a TN3270 step output. + public struct TN3270StepOutput { + /// The data set details of the TN3270 step output. + public var dataSetDetails: [AppTestClientTypes.DataSet]? + /// The data set export location of the TN3270 step output. + public var dataSetExportLocation: Swift.String? + /// The output location of the TN3270 step output. + public var dmsOutputLocation: Swift.String? + /// The script output location of the TN3270 step output. + /// This member is required. + public var scriptOutputLocation: Swift.String? + + public init( + dataSetDetails: [AppTestClientTypes.DataSet]? = nil, + dataSetExportLocation: Swift.String? = nil, + dmsOutputLocation: Swift.String? = nil, + scriptOutputLocation: Swift.String? = nil + ) + { + self.dataSetDetails = dataSetDetails + self.dataSetExportLocation = dataSetExportLocation + self.dmsOutputLocation = dmsOutputLocation + self.scriptOutputLocation = scriptOutputLocation + } + } + +} + +extension AppTestClientTypes { + /// Specifies a TN3270 summary. + public struct TN3270Summary { + /// The step input of the TN3270 summary. + /// This member is required. + public var stepInput: AppTestClientTypes.TN3270StepInput? + /// The step output of the TN3270 summary. + public var stepOutput: AppTestClientTypes.TN3270StepOutput? + + public init( + stepInput: AppTestClientTypes.TN3270StepInput? = nil, + stepOutput: AppTestClientTypes.TN3270StepOutput? = nil + ) + { + self.stepInput = stepInput + self.stepOutput = stepOutput + } + } + +} + +extension AppTestClientTypes { + /// Specifies the mainframe action summary. + public enum MainframeActionSummary { + /// The batch of the mainframe action summary. + case batch(AppTestClientTypes.BatchSummary) + /// The tn3270 port of the mainframe action summary. + case tn3270(AppTestClientTypes.TN3270Summary) + case sdkUnknown(Swift.String) + } + +} + +extension AppTestClientTypes { + /// Creates the CloudFormation step input. + public struct CreateCloudFormationStepInput { + /// The CloudFormation properties of the CloudFormation step input. + public var parameters: [Swift.String: Swift.String]? + /// The template location of the CloudFormation step input. + /// This member is required. + public var templateLocation: Swift.String? + + public init( + parameters: [Swift.String: Swift.String]? = nil, + templateLocation: Swift.String? = nil + ) + { + self.parameters = parameters + self.templateLocation = templateLocation + } + } + +} + +extension AppTestClientTypes { + /// Creates a CloudFormation step output. + public struct CreateCloudFormationStepOutput { + /// The exports of the CloudFormation step output. + public var exports: [Swift.String: Swift.String]? + /// The stack ID of the CloudFormation step output. + /// This member is required. + public var stackId: Swift.String? + + public init( + exports: [Swift.String: Swift.String]? = nil, + stackId: Swift.String? = nil + ) + { + self.exports = exports + self.stackId = stackId + } + } + +} + +extension AppTestClientTypes { + /// Creates a CloudFormation summary. + public struct CreateCloudFormationSummary { + /// The step input of the CloudFormation summary. + /// This member is required. + public var stepInput: AppTestClientTypes.CreateCloudFormationStepInput? + /// The step output of the CloudFormation summary. + public var stepOutput: AppTestClientTypes.CreateCloudFormationStepOutput? + + public init( + stepInput: AppTestClientTypes.CreateCloudFormationStepInput? = nil, + stepOutput: AppTestClientTypes.CreateCloudFormationStepOutput? = nil + ) + { + self.stepInput = stepInput + self.stepOutput = stepOutput + } + } + +} + +extension AppTestClientTypes { + /// Deletes the CloudFormation step input. + public struct DeleteCloudFormationStepInput { + /// The stack ID of the deleted CloudFormation step input. + /// This member is required. + public var stackId: Swift.String? + + public init( + stackId: Swift.String? = nil + ) + { + self.stackId = stackId + } + } + +} + +extension AppTestClientTypes { + /// Deletes the CloudFormation summary step output. + public struct DeleteCloudFormationStepOutput { + + public init() { } + } + +} + +extension AppTestClientTypes { + /// Deletes the CloudFormation summary. + public struct DeleteCloudFormationSummary { + /// The step input of the deleted CloudFormation summary. + /// This member is required. + public var stepInput: AppTestClientTypes.DeleteCloudFormationStepInput? + /// The step output of the deleted CloudFormation summary. + public var stepOutput: AppTestClientTypes.DeleteCloudFormationStepOutput? + + public init( + stepInput: AppTestClientTypes.DeleteCloudFormationStepInput? = nil, + stepOutput: AppTestClientTypes.DeleteCloudFormationStepOutput? = nil + ) + { + self.stepInput = stepInput + self.stepOutput = stepOutput + } + } + +} + +extension AppTestClientTypes { + /// Specifies the CloudFormation step summary. + public enum CloudFormationStepSummary { + /// Creates the CloudFormation summary of the step. + case createcloudformation(AppTestClientTypes.CreateCloudFormationSummary) + /// Deletes the CloudFormation summary of the CloudFormation step summary. + case deletecloudformation(AppTestClientTypes.DeleteCloudFormationSummary) + case sdkUnknown(Swift.String) + } + +} + +extension AppTestClientTypes { + /// Specifies the AWS Mainframe Modernization managed application step input. + public struct M2ManagedApplicationStepInput { + /// The action type of the AWS Mainframe Modernization managed application step input. + /// This member is required. + public var actionType: AppTestClientTypes.M2ManagedActionType? + /// The application ID of the AWS Mainframe Modernization managed application step input. + /// This member is required. + public var applicationId: Swift.String? + /// The listener port of the AWS Mainframe Modernization managed application step input. + public var listenerPort: Swift.Int? + /// The properties of the AWS Mainframe Modernization managed application step input. + public var properties: AppTestClientTypes.M2ManagedActionProperties? + /// The runtime of the AWS Mainframe Modernization managed application step input. + /// This member is required. + public var runtime: Swift.String? + /// The VPC endpoint service name of the AWS Mainframe Modernization managed application step input. + public var vpcEndpointServiceName: Swift.String? + + public init( + actionType: AppTestClientTypes.M2ManagedActionType? = nil, + applicationId: Swift.String? = nil, + listenerPort: Swift.Int? = nil, + properties: AppTestClientTypes.M2ManagedActionProperties? = nil, + runtime: Swift.String? = nil, + vpcEndpointServiceName: Swift.String? = nil + ) + { + self.actionType = actionType + self.applicationId = applicationId + self.listenerPort = listenerPort + self.properties = properties + self.runtime = runtime + self.vpcEndpointServiceName = vpcEndpointServiceName + } + } + +} + +extension AppTestClientTypes { + /// Specifies the AWS Mainframe Modernization managed application step output. + public struct M2ManagedApplicationStepOutput { + /// The import data set summary of the AWS Mainframe Modernization managed application step output. + public var importDataSetSummary: [Swift.String: Swift.String]? + + public init( + importDataSetSummary: [Swift.String: Swift.String]? = nil + ) + { + self.importDataSetSummary = importDataSetSummary + } + } + +} + +extension AppTestClientTypes { + /// Specifies the AWS Mainframe Modernization managed application step summary. + public struct M2ManagedApplicationStepSummary { + /// The step input of the AWS Mainframe Modernization managed application step summary. + /// This member is required. + public var stepInput: AppTestClientTypes.M2ManagedApplicationStepInput? + /// The step output of the AWS Mainframe Modernization managed application step summary. + public var stepOutput: AppTestClientTypes.M2ManagedApplicationStepOutput? + + public init( + stepInput: AppTestClientTypes.M2ManagedApplicationStepInput? = nil, + stepOutput: AppTestClientTypes.M2ManagedApplicationStepOutput? = nil + ) + { + self.stepInput = stepInput + self.stepOutput = stepOutput + } + } + +} + +extension AppTestClientTypes { + /// Specifies the AWS Mainframe Modernization non-managed application step input. + public struct M2NonManagedApplicationStepInput { + /// The action type of the AWS Mainframe Modernization non-managed application step input. + /// This member is required. + public var actionType: AppTestClientTypes.M2NonManagedActionType? + /// The listener port of the AWS Mainframe Modernization non-managed application step input. + /// This member is required. + public var listenerPort: Swift.Int? + /// The runtime of the AWS Mainframe Modernization non-managed application step input. + /// This member is required. + public var runtime: AppTestClientTypes.M2NonManagedRuntime? + /// The VPC endpoint service name of the AWS Mainframe Modernization non-managed application step input. + /// This member is required. + public var vpcEndpointServiceName: Swift.String? + /// The web app name of the AWS Mainframe Modernization non-managed application step input. + public var webAppName: Swift.String? + + public init( + actionType: AppTestClientTypes.M2NonManagedActionType? = nil, + listenerPort: Swift.Int? = nil, + runtime: AppTestClientTypes.M2NonManagedRuntime? = nil, + vpcEndpointServiceName: Swift.String? = nil, + webAppName: Swift.String? = nil + ) + { + self.actionType = actionType + self.listenerPort = listenerPort + self.runtime = runtime + self.vpcEndpointServiceName = vpcEndpointServiceName + self.webAppName = webAppName + } + } + +} + +extension AppTestClientTypes { + /// Specifies the AWS Mainframe Modernization non-managed application step output. + public struct M2NonManagedApplicationStepOutput { + + public init() { } + } + +} + +extension AppTestClientTypes { + /// Specifies the AWS Mainframe Modernization non-managed application step summary. + public struct M2NonManagedApplicationStepSummary { + /// The step input of the AWS Mainframe Modernization non-managed application step summary. + /// This member is required. + public var stepInput: AppTestClientTypes.M2NonManagedApplicationStepInput? + /// The step output of the AWS Mainframe Modernization non-managed application step summary. + public var stepOutput: AppTestClientTypes.M2NonManagedApplicationStepOutput? + + public init( + stepInput: AppTestClientTypes.M2NonManagedApplicationStepInput? = nil, + stepOutput: AppTestClientTypes.M2NonManagedApplicationStepOutput? = nil + ) + { + self.stepInput = stepInput + self.stepOutput = stepOutput + } + } + +} + +extension AppTestClientTypes { + /// Specifies the resource action summary. + public enum ResourceActionSummary { + /// The CloudFormation template of the resource action summary. + case cloudformation(AppTestClientTypes.CloudFormationStepSummary) + /// The AWS Mainframe Modernization managed application of the resource action summary. + case m2managedapplication(AppTestClientTypes.M2ManagedApplicationStepSummary) + /// The AWS Mainframe Modernization non-managed application of the resource action summary. + case m2nonmanagedapplication(AppTestClientTypes.M2NonManagedApplicationStepSummary) + case sdkUnknown(Swift.String) + } + +} + +extension AppTestClientTypes { + /// Defines the step run summary. + public enum StepRunSummary { + /// The mainframe action of the step run summary. + case mainframeaction(AppTestClientTypes.MainframeActionSummary) + /// The compare action of the step run summary. + case compareaction(AppTestClientTypes.CompareActionSummary) + /// The resource action of the step run summary. + case resourceaction(AppTestClientTypes.ResourceActionSummary) + case sdkUnknown(Swift.String) + } + +} + +public struct GetTestRunStepOutput { + /// The after steps of the test run step. + public var afterStep: Swift.Bool? + /// The before steps of the test run step. + public var beforeStep: Swift.Bool? + /// The run end time of the test run step. + public var runEndTime: Foundation.Date? + /// The run start time of the test run step. + /// This member is required. + public var runStartTime: Foundation.Date? + /// The status of the test run step. + /// This member is required. + public var status: AppTestClientTypes.StepRunStatus? + /// The status reason of the test run step. + public var statusReason: Swift.String? + /// The step name of the test run step. + /// This member is required. + public var stepName: Swift.String? + /// The step run summary of the test run step. + public var stepRunSummary: AppTestClientTypes.StepRunSummary? + /// The test case ID of the test run step. + public var testCaseId: Swift.String? + /// The test case version of the test run step. + public var testCaseVersion: Swift.Int? + /// The test run ID of the test run step. + /// This member is required. + public var testRunId: Swift.String? + /// The test suite ID of the test run step. + public var testSuiteId: Swift.String? + /// The test suite version of the test run step. + public var testSuiteVersion: Swift.Int? + + public init( + afterStep: Swift.Bool? = nil, + beforeStep: Swift.Bool? = nil, + runEndTime: Foundation.Date? = nil, + runStartTime: Foundation.Date? = nil, + status: AppTestClientTypes.StepRunStatus? = nil, + statusReason: Swift.String? = nil, + stepName: Swift.String? = nil, + stepRunSummary: AppTestClientTypes.StepRunSummary? = nil, + testCaseId: Swift.String? = nil, + testCaseVersion: Swift.Int? = nil, + testRunId: Swift.String? = nil, + testSuiteId: Swift.String? = nil, + testSuiteVersion: Swift.Int? = nil + ) + { + self.afterStep = afterStep + self.beforeStep = beforeStep + self.runEndTime = runEndTime + self.runStartTime = runStartTime + self.status = status + self.statusReason = statusReason + self.stepName = stepName + self.stepRunSummary = stepRunSummary + self.testCaseId = testCaseId + self.testCaseVersion = testCaseVersion + self.testRunId = testRunId + self.testSuiteId = testSuiteId + self.testSuiteVersion = testSuiteVersion + } +} + +public struct ListTestRunsInput { + /// The maximum number of test runs to return in one page of results. + public var maxResults: Swift.Int? + /// The token from the previous request to retrieve the next page of test run results. + public var nextToken: Swift.String? + /// The test run IDs of the test runs. + public var testRunIds: [Swift.String]? + /// The test suite ID of the test runs. + public var testSuiteId: Swift.String? + + public init( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + testRunIds: [Swift.String]? = nil, + testSuiteId: Swift.String? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + self.testRunIds = testRunIds + self.testSuiteId = testSuiteId + } +} + +extension AppTestClientTypes { + + public enum TestRunStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case deleting + case failed + case running + case success + case sdkUnknown(Swift.String) + + public static var allCases: [TestRunStatus] { + return [ + .deleting, + .failed, + .running, + .success + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .deleting: return "Deleting" + case .failed: return "Failed" + case .running: return "Running" + case .success: return "Success" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + /// Specifies a test run summary. + public struct TestRunSummary { + /// The run end time of the test run summary. + public var runEndTime: Foundation.Date? + /// The run start time of the test run summary. + /// This member is required. + public var runStartTime: Foundation.Date? + /// The status of the test run summary. + /// This member is required. + public var status: AppTestClientTypes.TestRunStatus? + /// The status reason of the test run summary. + public var statusReason: Swift.String? + /// The test configuration ID of the test run summary. + public var testConfigurationId: Swift.String? + /// The test configuration version of the test run summary. + public var testConfigurationVersion: Swift.Int? + /// The test run ARN of the test run summary. + /// This member is required. + public var testRunArn: Swift.String? + /// The test run ID of the test run summary. + /// This member is required. + public var testRunId: Swift.String? + /// The test suite ID of the test run summary. + /// This member is required. + public var testSuiteId: Swift.String? + /// The test suite version of the test run summary. + /// This member is required. + public var testSuiteVersion: Swift.Int? + + public init( + runEndTime: Foundation.Date? = nil, + runStartTime: Foundation.Date? = nil, + status: AppTestClientTypes.TestRunStatus? = nil, + statusReason: Swift.String? = nil, + testConfigurationId: Swift.String? = nil, + testConfigurationVersion: Swift.Int? = nil, + testRunArn: Swift.String? = nil, + testRunId: Swift.String? = nil, + testSuiteId: Swift.String? = nil, + testSuiteVersion: Swift.Int? = nil + ) + { + self.runEndTime = runEndTime + self.runStartTime = runStartTime + self.status = status + self.statusReason = statusReason + self.testConfigurationId = testConfigurationId + self.testConfigurationVersion = testConfigurationVersion + self.testRunArn = testRunArn + self.testRunId = testRunId + self.testSuiteId = testSuiteId + self.testSuiteVersion = testSuiteVersion + } + } + +} + +public struct ListTestRunsOutput { + /// The token from the previous request to retrieve the next page of results. + public var nextToken: Swift.String? + /// The test runs of the response query. + /// This member is required. + public var testRuns: [AppTestClientTypes.TestRunSummary]? + + public init( + nextToken: Swift.String? = nil, + testRuns: [AppTestClientTypes.TestRunSummary]? = nil + ) + { + self.nextToken = nextToken + self.testRuns = testRuns + } +} + +public struct ListTestRunStepsInput { + /// The maximum number of test run steps to return in one page of results. + public var maxResults: Swift.Int? + /// The token from a previous step to retrieve the next page of results. + public var nextToken: Swift.String? + /// The test case ID of the test run steps. + public var testCaseId: Swift.String? + /// The test run ID of the test run steps. + /// This member is required. + public var testRunId: Swift.String? + /// The test suite ID of the test run steps. + public var testSuiteId: Swift.String? + + public init( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + testCaseId: Swift.String? = nil, + testRunId: Swift.String? = nil, + testSuiteId: Swift.String? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + self.testCaseId = testCaseId + self.testRunId = testRunId + self.testSuiteId = testSuiteId + } +} + +extension AppTestClientTypes { + /// Specifies a test run step summary. + public struct TestRunStepSummary { + /// The after step of the test run step summary. + public var afterStep: Swift.Bool? + /// The before step of the test run step summary. + public var beforeStep: Swift.Bool? + /// The run end time of the test run step summary. + public var runEndTime: Foundation.Date? + /// The run start time of the test run step summary. + /// This member is required. + public var runStartTime: Foundation.Date? + /// The status of the test run step summary. + /// This member is required. + public var status: AppTestClientTypes.StepRunStatus? + /// The status reason of the test run step summary. + public var statusReason: Swift.String? + /// The step name of the test run step summary. + /// This member is required. + public var stepName: Swift.String? + /// The test case ID of the test run step summary. + public var testCaseId: Swift.String? + /// The test case version of the test run step summary. + public var testCaseVersion: Swift.Int? + /// The test run ID of the test run step summary. + /// This member is required. + public var testRunId: Swift.String? + /// The test suite ID of the test run step summary. + public var testSuiteId: Swift.String? + /// The test suite version of the test run step summary. + public var testSuiteVersion: Swift.Int? + + public init( + afterStep: Swift.Bool? = nil, + beforeStep: Swift.Bool? = nil, + runEndTime: Foundation.Date? = nil, + runStartTime: Foundation.Date? = nil, + status: AppTestClientTypes.StepRunStatus? = nil, + statusReason: Swift.String? = nil, + stepName: Swift.String? = nil, + testCaseId: Swift.String? = nil, + testCaseVersion: Swift.Int? = nil, + testRunId: Swift.String? = nil, + testSuiteId: Swift.String? = nil, + testSuiteVersion: Swift.Int? = nil + ) + { + self.afterStep = afterStep + self.beforeStep = beforeStep + self.runEndTime = runEndTime + self.runStartTime = runStartTime + self.status = status + self.statusReason = statusReason + self.stepName = stepName + self.testCaseId = testCaseId + self.testCaseVersion = testCaseVersion + self.testRunId = testRunId + self.testSuiteId = testSuiteId + self.testSuiteVersion = testSuiteVersion + } + } + +} + +public struct ListTestRunStepsOutput { + /// The token from a previous request to retrieve the next page of results. + public var nextToken: Swift.String? + /// The test run steps of the response query. + /// This member is required. + public var testRunSteps: [AppTestClientTypes.TestRunStepSummary]? + + public init( + nextToken: Swift.String? = nil, + testRunSteps: [AppTestClientTypes.TestRunStepSummary]? = nil + ) + { + self.nextToken = nextToken + self.testRunSteps = testRunSteps + } +} + +public struct ListTestRunTestCasesInput { + /// The maximum number of test run test cases to return in one page of results. + public var maxResults: Swift.Int? + /// The token from a previous request to retrieve the next page of results. + public var nextToken: Swift.String? + /// The test run ID of the test cases. + /// This member is required. + public var testRunId: Swift.String? + + public init( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + testRunId: Swift.String? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + self.testRunId = testRunId + } +} + +extension AppTestClientTypes { + + public enum TestCaseRunStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case failed + case running + case success + case sdkUnknown(Swift.String) + + public static var allCases: [TestCaseRunStatus] { + return [ + .failed, + .running, + .success + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .failed: return "Failed" + case .running: return "Running" + case .success: return "Success" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + /// Specifies the test case run summary. + public struct TestCaseRunSummary { + /// The run end time of the test case run summary. + public var runEndTime: Foundation.Date? + /// The run start time of the test case run summary. + /// This member is required. + public var runStartTime: Foundation.Date? + /// The status of the test case run summary. + /// This member is required. + public var status: AppTestClientTypes.TestCaseRunStatus? + /// The status reason of the test case run summary. + public var statusReason: Swift.String? + /// The test case id of the test case run summary. + /// This member is required. + public var testCaseId: Swift.String? + /// The test case version of the test case run summary. + /// This member is required. + public var testCaseVersion: Swift.Int? + /// The test run id of the test case run summary. + /// This member is required. + public var testRunId: Swift.String? + + public init( + runEndTime: Foundation.Date? = nil, + runStartTime: Foundation.Date? = nil, + status: AppTestClientTypes.TestCaseRunStatus? = nil, + statusReason: Swift.String? = nil, + testCaseId: Swift.String? = nil, + testCaseVersion: Swift.Int? = nil, + testRunId: Swift.String? = nil + ) + { + self.runEndTime = runEndTime + self.runStartTime = runStartTime + self.status = status + self.statusReason = statusReason + self.testCaseId = testCaseId + self.testCaseVersion = testCaseVersion + self.testRunId = testRunId + } + } + +} + +public struct ListTestRunTestCasesOutput { + /// The token from a previous request to retrieve the next page of results. + public var nextToken: Swift.String? + /// The test run of the test cases. + /// This member is required. + public var testRunTestCases: [AppTestClientTypes.TestCaseRunSummary]? + + public init( + nextToken: Swift.String? = nil, + testRunTestCases: [AppTestClientTypes.TestCaseRunSummary]? = nil + ) + { + self.nextToken = nextToken + self.testRunTestCases = testRunTestCases + } +} + +public struct StartTestRunInput { + /// The client token of the test run. + public var clientToken: Swift.String? + /// The tags of the test run. + public var tags: [Swift.String: Swift.String]? + /// The configuration ID of the test run. + public var testConfigurationId: Swift.String? + /// The test suite ID of the test run. + /// This member is required. + public var testSuiteId: Swift.String? + + public init( + clientToken: Swift.String? = nil, + tags: [Swift.String: Swift.String]? = nil, + testConfigurationId: Swift.String? = nil, + testSuiteId: Swift.String? = nil + ) + { + self.clientToken = clientToken + self.tags = tags + self.testConfigurationId = testConfigurationId + self.testSuiteId = testSuiteId + } +} + +public struct StartTestRunOutput { + /// The test run ID of the test run. + /// This member is required. + public var testRunId: Swift.String? + /// The test run status of the test run. + /// This member is required. + public var testRunStatus: AppTestClientTypes.TestRunStatus? + + public init( + testRunId: Swift.String? = nil, + testRunStatus: AppTestClientTypes.TestRunStatus? = nil + ) + { + self.testRunId = testRunId + self.testRunStatus = testRunStatus + } +} + +extension AppTestClientTypes { + /// Specifies test cases. + public enum TestCases { + /// The sequential of the test case. + case sequential([Swift.String]) + case sdkUnknown(Swift.String) + } + +} + +public struct CreateTestSuiteInput { + /// The after steps of the test suite. + public var afterSteps: [AppTestClientTypes.Step]? + /// The before steps of the test suite. + public var beforeSteps: [AppTestClientTypes.Step]? + /// The client token of the test suite. + public var clientToken: Swift.String? + /// The description of the test suite. + public var description: Swift.String? + /// The name of the test suite. + /// This member is required. + public var name: Swift.String? + /// The tags of the test suite. + public var tags: [Swift.String: Swift.String]? + /// The test cases in the test suite. + /// This member is required. + public var testCases: AppTestClientTypes.TestCases? + + public init( + afterSteps: [AppTestClientTypes.Step]? = nil, + beforeSteps: [AppTestClientTypes.Step]? = nil, + clientToken: Swift.String? = nil, + description: Swift.String? = nil, + name: Swift.String? = nil, + tags: [Swift.String: Swift.String]? = nil, + testCases: AppTestClientTypes.TestCases? = nil + ) + { + self.afterSteps = afterSteps + self.beforeSteps = beforeSteps + self.clientToken = clientToken + self.description = description + self.name = name + self.tags = tags + self.testCases = testCases + } +} + +public struct CreateTestSuiteOutput { + /// The suite ID of the test suite. + /// This member is required. + public var testSuiteId: Swift.String? + /// The suite version of the test suite. + /// This member is required. + public var testSuiteVersion: Swift.Int? + + public init( + testSuiteId: Swift.String? = nil, + testSuiteVersion: Swift.Int? = nil + ) + { + self.testSuiteId = testSuiteId + self.testSuiteVersion = testSuiteVersion + } +} + +public struct DeleteTestSuiteInput { + /// The test ID of the test suite. + /// This member is required. + public var testSuiteId: Swift.String? + + public init( + testSuiteId: Swift.String? = nil + ) + { + self.testSuiteId = testSuiteId + } +} + +public struct DeleteTestSuiteOutput { + + public init() { } +} + +public struct GetTestSuiteInput { + /// The ID of the test suite. + /// This member is required. + public var testSuiteId: Swift.String? + /// The version of the test suite. + public var testSuiteVersion: Swift.Int? + + public init( + testSuiteId: Swift.String? = nil, + testSuiteVersion: Swift.Int? = nil + ) + { + self.testSuiteId = testSuiteId + self.testSuiteVersion = testSuiteVersion + } +} + +extension AppTestClientTypes { + + public enum TestSuiteLifecycle: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case active + case creating + case deleting + case failed + case updating + case sdkUnknown(Swift.String) + + public static var allCases: [TestSuiteLifecycle] { + return [ + .active, + .creating, + .deleting, + .failed, + .updating + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .active: return "Active" + case .creating: return "Creating" + case .deleting: return "Deleting" + case .failed: return "Failed" + case .updating: return "Updating" + case let .sdkUnknown(s): return s + } + } + } +} + +extension AppTestClientTypes { + /// Specifies the latest version of a test suite. + public struct TestSuiteLatestVersion { + /// The status of the test suite latest version. + /// This member is required. + public var status: AppTestClientTypes.TestSuiteLifecycle? + /// The status reason of the test suite latest version. + public var statusReason: Swift.String? + /// The version of the test suite latest version. + /// This member is required. + public var version: Swift.Int? + + public init( + status: AppTestClientTypes.TestSuiteLifecycle? = nil, + statusReason: Swift.String? = nil, + version: Swift.Int? = nil + ) + { + self.status = status + self.statusReason = statusReason + self.version = version + } + } + +} + +public struct GetTestSuiteOutput { + /// The after steps of the test suite. + /// This member is required. + public var afterSteps: [AppTestClientTypes.Step]? + /// The before steps of the test suite. + /// This member is required. + public var beforeSteps: [AppTestClientTypes.Step]? + /// The creation time of the test suite. + /// This member is required. + public var creationTime: Foundation.Date? + /// The description of the test suite. + public var description: Swift.String? + /// The last update time of the test suite. + /// This member is required. + public var lastUpdateTime: Foundation.Date? + /// The latest version of the test suite. + /// This member is required. + public var latestVersion: AppTestClientTypes.TestSuiteLatestVersion? + /// The name of the test suite. + /// This member is required. + public var name: Swift.String? + /// The status of the test suite. + public var status: AppTestClientTypes.TestSuiteLifecycle? + /// The status reason of the test suite. + public var statusReason: Swift.String? + /// The tags of the test suite. + public var tags: [Swift.String: Swift.String]? + /// The test cases of the test suite. + /// This member is required. + public var testCases: AppTestClientTypes.TestCases? + /// The test suite Amazon Resource Name (ARN). + /// This member is required. + public var testSuiteArn: Swift.String? + /// The response ID of the test suite. + /// This member is required. + public var testSuiteId: Swift.String? + /// The version of the test suite. + /// This member is required. + public var testSuiteVersion: Swift.Int? + + public init( + afterSteps: [AppTestClientTypes.Step]? = nil, + beforeSteps: [AppTestClientTypes.Step]? = nil, + creationTime: Foundation.Date? = nil, + description: Swift.String? = nil, + lastUpdateTime: Foundation.Date? = nil, + latestVersion: AppTestClientTypes.TestSuiteLatestVersion? = nil, + name: Swift.String? = nil, + status: AppTestClientTypes.TestSuiteLifecycle? = nil, + statusReason: Swift.String? = nil, + tags: [Swift.String: Swift.String]? = nil, + testCases: AppTestClientTypes.TestCases? = nil, + testSuiteArn: Swift.String? = nil, + testSuiteId: Swift.String? = nil, + testSuiteVersion: Swift.Int? = nil + ) + { + self.afterSteps = afterSteps + self.beforeSteps = beforeSteps + self.creationTime = creationTime + self.description = description + self.lastUpdateTime = lastUpdateTime + self.latestVersion = latestVersion + self.name = name + self.status = status + self.statusReason = statusReason + self.tags = tags + self.testCases = testCases + self.testSuiteArn = testSuiteArn + self.testSuiteId = testSuiteId + self.testSuiteVersion = testSuiteVersion + } +} + +public struct ListTestSuitesInput { + /// The maximum number of test suites to return in one page of results. + public var maxResults: Swift.Int? + /// The token from a previous request to retrieve the next page of results. + public var nextToken: Swift.String? + /// The suite ID of the test suites. + public var testSuiteIds: [Swift.String]? + + public init( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + testSuiteIds: [Swift.String]? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + self.testSuiteIds = testSuiteIds + } +} + +extension AppTestClientTypes { + /// Specifies the test suite summary. + public struct TestSuiteSummary { + /// The creation time of the test suite summary. + /// This member is required. + public var creationTime: Foundation.Date? + /// The last update time of the test suite summary. + /// This member is required. + public var lastUpdateTime: Foundation.Date? + /// The latest version of the test suite summary. + /// This member is required. + public var latestVersion: Swift.Int? + /// The name of the test suite summary. + /// This member is required. + public var name: Swift.String? + /// The status of the test suite summary. + /// This member is required. + public var status: AppTestClientTypes.TestSuiteLifecycle? + /// The status reason of the test suite summary. + public var statusReason: Swift.String? + /// The test suite Amazon Resource Name (ARN) of the test suite summary. + /// This member is required. + public var testSuiteArn: Swift.String? + /// The test suite ID of the test suite summary. + /// This member is required. + public var testSuiteId: Swift.String? + + public init( + creationTime: Foundation.Date? = nil, + lastUpdateTime: Foundation.Date? = nil, + latestVersion: Swift.Int? = nil, + name: Swift.String? = nil, + status: AppTestClientTypes.TestSuiteLifecycle? = nil, + statusReason: Swift.String? = nil, + testSuiteArn: Swift.String? = nil, + testSuiteId: Swift.String? = nil + ) + { + self.creationTime = creationTime + self.lastUpdateTime = lastUpdateTime + self.latestVersion = latestVersion + self.name = name + self.status = status + self.statusReason = statusReason + self.testSuiteArn = testSuiteArn + self.testSuiteId = testSuiteId + } + } + +} + +public struct ListTestSuitesOutput { + /// The token from a previous request to retrieve the next page of test suites results. + public var nextToken: Swift.String? + /// The test suites returned with the response query. + /// This member is required. + public var testSuites: [AppTestClientTypes.TestSuiteSummary]? + + public init( + nextToken: Swift.String? = nil, + testSuites: [AppTestClientTypes.TestSuiteSummary]? = nil + ) + { + self.nextToken = nextToken + self.testSuites = testSuites + } +} + +public struct UpdateTestSuiteInput { + /// The after steps of the test suite. + public var afterSteps: [AppTestClientTypes.Step]? + /// The before steps for the test suite. + public var beforeSteps: [AppTestClientTypes.Step]? + /// The description of the test suite. + public var description: Swift.String? + /// The test cases in the test suite. + public var testCases: AppTestClientTypes.TestCases? + /// The test suite ID of the test suite. + /// This member is required. + public var testSuiteId: Swift.String? + + public init( + afterSteps: [AppTestClientTypes.Step]? = nil, + beforeSteps: [AppTestClientTypes.Step]? = nil, + description: Swift.String? = nil, + testCases: AppTestClientTypes.TestCases? = nil, + testSuiteId: Swift.String? = nil + ) + { + self.afterSteps = afterSteps + self.beforeSteps = beforeSteps + self.description = description + self.testCases = testCases + self.testSuiteId = testSuiteId + } +} + +public struct UpdateTestSuiteOutput { + /// The test suite ID of the test suite. + /// This member is required. + public var testSuiteId: Swift.String? + /// The test suite version of the test suite. + public var testSuiteVersion: Swift.Int? + + public init( + testSuiteId: Swift.String? = nil, + testSuiteVersion: Swift.Int? = nil + ) + { + self.testSuiteId = testSuiteId + self.testSuiteVersion = testSuiteVersion + } +} + +public struct UntagResourceInput { + /// The Amazon Resource Name (ARN) of the resource. + /// This member is required. + public var resourceArn: Swift.String? + /// The tag keys of the resource. + /// This member is required. + public var tagKeys: [Swift.String]? + + public init( + resourceArn: Swift.String? = nil, + tagKeys: [Swift.String]? = nil + ) + { + self.resourceArn = resourceArn + self.tagKeys = tagKeys + } +} + +public struct UntagResourceOutput { + + public init() { } +} + +extension CreateTestCaseInput { + + static func urlPathProvider(_ value: CreateTestCaseInput) -> Swift.String? { + return "/testcase" + } +} + +extension CreateTestConfigurationInput { + + static func urlPathProvider(_ value: CreateTestConfigurationInput) -> Swift.String? { + return "/testconfiguration" + } +} + +extension CreateTestSuiteInput { + + static func urlPathProvider(_ value: CreateTestSuiteInput) -> Swift.String? { + return "/testsuite" + } +} + +extension DeleteTestCaseInput { + + static func urlPathProvider(_ value: DeleteTestCaseInput) -> Swift.String? { + guard let testCaseId = value.testCaseId else { + return nil + } + return "/testcases/\(testCaseId.urlPercentEncoding())" + } +} + +extension DeleteTestConfigurationInput { + + static func urlPathProvider(_ value: DeleteTestConfigurationInput) -> Swift.String? { + guard let testConfigurationId = value.testConfigurationId else { + return nil + } + return "/testconfigurations/\(testConfigurationId.urlPercentEncoding())" + } +} + +extension DeleteTestRunInput { + + static func urlPathProvider(_ value: DeleteTestRunInput) -> Swift.String? { + guard let testRunId = value.testRunId else { + return nil + } + return "/testruns/\(testRunId.urlPercentEncoding())" + } +} + +extension DeleteTestSuiteInput { + + static func urlPathProvider(_ value: DeleteTestSuiteInput) -> Swift.String? { + guard let testSuiteId = value.testSuiteId else { + return nil + } + return "/testsuites/\(testSuiteId.urlPercentEncoding())" + } +} + +extension GetTestCaseInput { + + static func urlPathProvider(_ value: GetTestCaseInput) -> Swift.String? { + guard let testCaseId = value.testCaseId else { + return nil + } + return "/testcases/\(testCaseId.urlPercentEncoding())" + } +} + +extension GetTestCaseInput { + + static func queryItemProvider(_ value: GetTestCaseInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let testCaseVersion = value.testCaseVersion { + let testCaseVersionQueryItem = Smithy.URIQueryItem(name: "testCaseVersion".urlPercentEncoding(), value: Swift.String(testCaseVersion).urlPercentEncoding()) + items.append(testCaseVersionQueryItem) + } + return items + } +} + +extension GetTestConfigurationInput { + + static func urlPathProvider(_ value: GetTestConfigurationInput) -> Swift.String? { + guard let testConfigurationId = value.testConfigurationId else { + return nil + } + return "/testconfigurations/\(testConfigurationId.urlPercentEncoding())" + } +} + +extension GetTestConfigurationInput { + + static func queryItemProvider(_ value: GetTestConfigurationInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let testConfigurationVersion = value.testConfigurationVersion { + let testConfigurationVersionQueryItem = Smithy.URIQueryItem(name: "testConfigurationVersion".urlPercentEncoding(), value: Swift.String(testConfigurationVersion).urlPercentEncoding()) + items.append(testConfigurationVersionQueryItem) + } + return items + } +} + +extension GetTestRunStepInput { + + static func urlPathProvider(_ value: GetTestRunStepInput) -> Swift.String? { + guard let testRunId = value.testRunId else { + return nil + } + guard let stepName = value.stepName else { + return nil + } + return "/testruns/\(testRunId.urlPercentEncoding())/steps/\(stepName.urlPercentEncoding())" + } +} + +extension GetTestRunStepInput { + + static func queryItemProvider(_ value: GetTestRunStepInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let testSuiteId = value.testSuiteId { + let testSuiteIdQueryItem = Smithy.URIQueryItem(name: "testSuiteId".urlPercentEncoding(), value: Swift.String(testSuiteId).urlPercentEncoding()) + items.append(testSuiteIdQueryItem) + } + if let testCaseId = value.testCaseId { + let testCaseIdQueryItem = Smithy.URIQueryItem(name: "testCaseId".urlPercentEncoding(), value: Swift.String(testCaseId).urlPercentEncoding()) + items.append(testCaseIdQueryItem) + } + return items + } +} + +extension GetTestSuiteInput { + + static func urlPathProvider(_ value: GetTestSuiteInput) -> Swift.String? { + guard let testSuiteId = value.testSuiteId else { + return nil + } + return "/testsuites/\(testSuiteId.urlPercentEncoding())" + } +} + +extension GetTestSuiteInput { + + static func queryItemProvider(_ value: GetTestSuiteInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let testSuiteVersion = value.testSuiteVersion { + let testSuiteVersionQueryItem = Smithy.URIQueryItem(name: "testSuiteVersion".urlPercentEncoding(), value: Swift.String(testSuiteVersion).urlPercentEncoding()) + items.append(testSuiteVersionQueryItem) + } + return items + } +} + +extension ListTagsForResourceInput { + + static func urlPathProvider(_ value: ListTagsForResourceInput) -> Swift.String? { + guard let resourceArn = value.resourceArn else { + return nil + } + return "/tags/\(resourceArn.urlPercentEncoding())" + } +} + +extension ListTestCasesInput { + + static func urlPathProvider(_ value: ListTestCasesInput) -> Swift.String? { + return "/testcases" + } +} + +extension ListTestCasesInput { + + static func queryItemProvider(_ value: ListTestCasesInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + if let testCaseIds = value.testCaseIds { + testCaseIds.forEach { queryItemValue in + let queryItem = Smithy.URIQueryItem(name: "testCaseIds".urlPercentEncoding(), value: Swift.String(queryItemValue).urlPercentEncoding()) + items.append(queryItem) + } + } + return items + } +} + +extension ListTestConfigurationsInput { + + static func urlPathProvider(_ value: ListTestConfigurationsInput) -> Swift.String? { + return "/testconfigurations" + } +} + +extension ListTestConfigurationsInput { + + static func queryItemProvider(_ value: ListTestConfigurationsInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + if let testConfigurationIds = value.testConfigurationIds { + testConfigurationIds.forEach { queryItemValue in + let queryItem = Smithy.URIQueryItem(name: "testConfigurationIds".urlPercentEncoding(), value: Swift.String(queryItemValue).urlPercentEncoding()) + items.append(queryItem) + } + } + return items + } +} + +extension ListTestRunsInput { + + static func urlPathProvider(_ value: ListTestRunsInput) -> Swift.String? { + return "/testruns" + } +} + +extension ListTestRunsInput { + + static func queryItemProvider(_ value: ListTestRunsInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + if let testSuiteId = value.testSuiteId { + let testSuiteIdQueryItem = Smithy.URIQueryItem(name: "testSuiteId".urlPercentEncoding(), value: Swift.String(testSuiteId).urlPercentEncoding()) + items.append(testSuiteIdQueryItem) + } + if let testRunIds = value.testRunIds { + testRunIds.forEach { queryItemValue in + let queryItem = Smithy.URIQueryItem(name: "testrunIds".urlPercentEncoding(), value: Swift.String(queryItemValue).urlPercentEncoding()) + items.append(queryItem) + } + } + return items + } +} + +extension ListTestRunStepsInput { + + static func urlPathProvider(_ value: ListTestRunStepsInput) -> Swift.String? { + guard let testRunId = value.testRunId else { + return nil + } + return "/testruns/\(testRunId.urlPercentEncoding())/steps" + } +} + +extension ListTestRunStepsInput { + + static func queryItemProvider(_ value: ListTestRunStepsInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + if let testSuiteId = value.testSuiteId { + let testSuiteIdQueryItem = Smithy.URIQueryItem(name: "testSuiteId".urlPercentEncoding(), value: Swift.String(testSuiteId).urlPercentEncoding()) + items.append(testSuiteIdQueryItem) + } + if let testCaseId = value.testCaseId { + let testCaseIdQueryItem = Smithy.URIQueryItem(name: "testCaseId".urlPercentEncoding(), value: Swift.String(testCaseId).urlPercentEncoding()) + items.append(testCaseIdQueryItem) + } + return items + } +} + +extension ListTestRunTestCasesInput { + + static func urlPathProvider(_ value: ListTestRunTestCasesInput) -> Swift.String? { + guard let testRunId = value.testRunId else { + return nil + } + return "/testruns/\(testRunId.urlPercentEncoding())/testcases" + } +} + +extension ListTestRunTestCasesInput { + + static func queryItemProvider(_ value: ListTestRunTestCasesInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + return items + } +} + +extension ListTestSuitesInput { + + static func urlPathProvider(_ value: ListTestSuitesInput) -> Swift.String? { + return "/testsuites" + } +} + +extension ListTestSuitesInput { + + static func queryItemProvider(_ value: ListTestSuitesInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let testSuiteIds = value.testSuiteIds { + testSuiteIds.forEach { queryItemValue in + let queryItem = Smithy.URIQueryItem(name: "testSuiteIds".urlPercentEncoding(), value: Swift.String(queryItemValue).urlPercentEncoding()) + items.append(queryItem) + } + } + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + return items + } +} + +extension StartTestRunInput { + + static func urlPathProvider(_ value: StartTestRunInput) -> Swift.String? { + return "/testrun" + } +} + +extension TagResourceInput { + + static func urlPathProvider(_ value: TagResourceInput) -> Swift.String? { + guard let resourceArn = value.resourceArn else { + return nil + } + return "/tags/\(resourceArn.urlPercentEncoding())" + } +} + +extension UntagResourceInput { + + static func urlPathProvider(_ value: UntagResourceInput) -> Swift.String? { + guard let resourceArn = value.resourceArn else { + return nil + } + return "/tags/\(resourceArn.urlPercentEncoding())" + } +} + +extension UntagResourceInput { + + static func queryItemProvider(_ value: UntagResourceInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + guard let tagKeys = value.tagKeys else { + let message = "Creating a URL Query Item failed. tagKeys is required and must not be nil." + throw Smithy.ClientError.unknownError(message) + } + tagKeys.forEach { queryItemValue in + let queryItem = Smithy.URIQueryItem(name: "tagKeys".urlPercentEncoding(), value: Swift.String(queryItemValue).urlPercentEncoding()) + items.append(queryItem) + } + return items + } +} + +extension UpdateTestCaseInput { + + static func urlPathProvider(_ value: UpdateTestCaseInput) -> Swift.String? { + guard let testCaseId = value.testCaseId else { + return nil + } + return "/testcases/\(testCaseId.urlPercentEncoding())" + } +} + +extension UpdateTestConfigurationInput { + + static func urlPathProvider(_ value: UpdateTestConfigurationInput) -> Swift.String? { + guard let testConfigurationId = value.testConfigurationId else { + return nil + } + return "/testconfigurations/\(testConfigurationId.urlPercentEncoding())" + } +} + +extension UpdateTestSuiteInput { + + static func urlPathProvider(_ value: UpdateTestSuiteInput) -> Swift.String? { + guard let testSuiteId = value.testSuiteId else { + return nil + } + return "/testsuites/\(testSuiteId.urlPercentEncoding())" + } +} + +extension CreateTestCaseInput { + + static func write(value: CreateTestCaseInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["clientToken"].write(value.clientToken) + try writer["description"].write(value.description) + try writer["name"].write(value.name) + try writer["steps"].writeList(value.steps, memberWritingClosure: AppTestClientTypes.Step.write(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["tags"].writeMap(value.tags, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + } +} + +extension CreateTestConfigurationInput { + + static func write(value: CreateTestConfigurationInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["clientToken"].write(value.clientToken) + try writer["description"].write(value.description) + try writer["name"].write(value.name) + try writer["properties"].writeMap(value.properties, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + try writer["resources"].writeList(value.resources, memberWritingClosure: AppTestClientTypes.Resource.write(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["serviceSettings"].write(value.serviceSettings, with: AppTestClientTypes.ServiceSettings.write(value:to:)) + try writer["tags"].writeMap(value.tags, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + } +} + +extension CreateTestSuiteInput { + + static func write(value: CreateTestSuiteInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["afterSteps"].writeList(value.afterSteps, memberWritingClosure: AppTestClientTypes.Step.write(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["beforeSteps"].writeList(value.beforeSteps, memberWritingClosure: AppTestClientTypes.Step.write(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["clientToken"].write(value.clientToken) + try writer["description"].write(value.description) + try writer["name"].write(value.name) + try writer["tags"].writeMap(value.tags, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + try writer["testCases"].write(value.testCases, with: AppTestClientTypes.TestCases.write(value:to:)) + } +} + +extension StartTestRunInput { + + static func write(value: StartTestRunInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["clientToken"].write(value.clientToken) + try writer["tags"].writeMap(value.tags, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + try writer["testConfigurationId"].write(value.testConfigurationId) + try writer["testSuiteId"].write(value.testSuiteId) + } +} + +extension TagResourceInput { + + static func write(value: TagResourceInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["tags"].writeMap(value.tags, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + } +} + +extension UpdateTestCaseInput { + + static func write(value: UpdateTestCaseInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["description"].write(value.description) + try writer["steps"].writeList(value.steps, memberWritingClosure: AppTestClientTypes.Step.write(value:to:), memberNodeInfo: "member", isFlattened: false) + } +} + +extension UpdateTestConfigurationInput { + + static func write(value: UpdateTestConfigurationInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["description"].write(value.description) + try writer["properties"].writeMap(value.properties, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + try writer["resources"].writeList(value.resources, memberWritingClosure: AppTestClientTypes.Resource.write(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["serviceSettings"].write(value.serviceSettings, with: AppTestClientTypes.ServiceSettings.write(value:to:)) + } +} + +extension UpdateTestSuiteInput { + + static func write(value: UpdateTestSuiteInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["afterSteps"].writeList(value.afterSteps, memberWritingClosure: AppTestClientTypes.Step.write(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["beforeSteps"].writeList(value.beforeSteps, memberWritingClosure: AppTestClientTypes.Step.write(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["description"].write(value.description) + try writer["testCases"].write(value.testCases, with: AppTestClientTypes.TestCases.write(value:to:)) + } +} + +extension CreateTestCaseOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CreateTestCaseOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = CreateTestCaseOutput() + value.testCaseId = try reader["testCaseId"].readIfPresent() + value.testCaseVersion = try reader["testCaseVersion"].readIfPresent() + return value + } +} + +extension CreateTestConfigurationOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CreateTestConfigurationOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = CreateTestConfigurationOutput() + value.testConfigurationId = try reader["testConfigurationId"].readIfPresent() + value.testConfigurationVersion = try reader["testConfigurationVersion"].readIfPresent() + return value + } +} + +extension CreateTestSuiteOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CreateTestSuiteOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = CreateTestSuiteOutput() + value.testSuiteId = try reader["testSuiteId"].readIfPresent() + value.testSuiteVersion = try reader["testSuiteVersion"].readIfPresent() + return value + } +} + +extension DeleteTestCaseOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DeleteTestCaseOutput { + return DeleteTestCaseOutput() + } +} + +extension DeleteTestConfigurationOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DeleteTestConfigurationOutput { + return DeleteTestConfigurationOutput() + } +} + +extension DeleteTestRunOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DeleteTestRunOutput { + return DeleteTestRunOutput() + } +} + +extension DeleteTestSuiteOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DeleteTestSuiteOutput { + return DeleteTestSuiteOutput() + } +} + +extension GetTestCaseOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetTestCaseOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = GetTestCaseOutput() + value.creationTime = try reader["creationTime"].readTimestampIfPresent(format: .epochSeconds) + value.description = try reader["description"].readIfPresent() + value.lastUpdateTime = try reader["lastUpdateTime"].readTimestampIfPresent(format: .epochSeconds) + value.latestVersion = try reader["latestVersion"].readIfPresent(with: AppTestClientTypes.TestCaseLatestVersion.read(from:)) + value.name = try reader["name"].readIfPresent() + value.status = try reader["status"].readIfPresent() + value.statusReason = try reader["statusReason"].readIfPresent() + value.steps = try reader["steps"].readListIfPresent(memberReadingClosure: AppTestClientTypes.Step.read(from:), memberNodeInfo: "member", isFlattened: false) + value.tags = try reader["tags"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + value.testCaseArn = try reader["testCaseArn"].readIfPresent() + value.testCaseId = try reader["testCaseId"].readIfPresent() + value.testCaseVersion = try reader["testCaseVersion"].readIfPresent() + return value + } +} + +extension GetTestConfigurationOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetTestConfigurationOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = GetTestConfigurationOutput() + value.creationTime = try reader["creationTime"].readTimestampIfPresent(format: .epochSeconds) + value.description = try reader["description"].readIfPresent() + value.lastUpdateTime = try reader["lastUpdateTime"].readTimestampIfPresent(format: .epochSeconds) + value.latestVersion = try reader["latestVersion"].readIfPresent(with: AppTestClientTypes.TestConfigurationLatestVersion.read(from:)) + value.name = try reader["name"].readIfPresent() + value.properties = try reader["properties"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + value.resources = try reader["resources"].readListIfPresent(memberReadingClosure: AppTestClientTypes.Resource.read(from:), memberNodeInfo: "member", isFlattened: false) + value.serviceSettings = try reader["serviceSettings"].readIfPresent(with: AppTestClientTypes.ServiceSettings.read(from:)) + value.status = try reader["status"].readIfPresent() + value.statusReason = try reader["statusReason"].readIfPresent() + value.tags = try reader["tags"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + value.testConfigurationArn = try reader["testConfigurationArn"].readIfPresent() + value.testConfigurationId = try reader["testConfigurationId"].readIfPresent() + value.testConfigurationVersion = try reader["testConfigurationVersion"].readIfPresent() + return value + } +} + +extension GetTestRunStepOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetTestRunStepOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = GetTestRunStepOutput() + value.afterStep = try reader["afterStep"].readIfPresent() + value.beforeStep = try reader["beforeStep"].readIfPresent() + value.runEndTime = try reader["runEndTime"].readTimestampIfPresent(format: .epochSeconds) + value.runStartTime = try reader["runStartTime"].readTimestampIfPresent(format: .epochSeconds) + value.status = try reader["status"].readIfPresent() + value.statusReason = try reader["statusReason"].readIfPresent() + value.stepName = try reader["stepName"].readIfPresent() + value.stepRunSummary = try reader["stepRunSummary"].readIfPresent(with: AppTestClientTypes.StepRunSummary.read(from:)) + value.testCaseId = try reader["testCaseId"].readIfPresent() + value.testCaseVersion = try reader["testCaseVersion"].readIfPresent() + value.testRunId = try reader["testRunId"].readIfPresent() + value.testSuiteId = try reader["testSuiteId"].readIfPresent() + value.testSuiteVersion = try reader["testSuiteVersion"].readIfPresent() + return value + } +} + +extension GetTestSuiteOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetTestSuiteOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = GetTestSuiteOutput() + value.afterSteps = try reader["afterSteps"].readListIfPresent(memberReadingClosure: AppTestClientTypes.Step.read(from:), memberNodeInfo: "member", isFlattened: false) + value.beforeSteps = try reader["beforeSteps"].readListIfPresent(memberReadingClosure: AppTestClientTypes.Step.read(from:), memberNodeInfo: "member", isFlattened: false) + value.creationTime = try reader["creationTime"].readTimestampIfPresent(format: .epochSeconds) + value.description = try reader["description"].readIfPresent() + value.lastUpdateTime = try reader["lastUpdateTime"].readTimestampIfPresent(format: .epochSeconds) + value.latestVersion = try reader["latestVersion"].readIfPresent(with: AppTestClientTypes.TestSuiteLatestVersion.read(from:)) + value.name = try reader["name"].readIfPresent() + value.status = try reader["status"].readIfPresent() + value.statusReason = try reader["statusReason"].readIfPresent() + value.tags = try reader["tags"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + value.testCases = try reader["testCases"].readIfPresent(with: AppTestClientTypes.TestCases.read(from:)) + value.testSuiteArn = try reader["testSuiteArn"].readIfPresent() + value.testSuiteId = try reader["testSuiteId"].readIfPresent() + value.testSuiteVersion = try reader["testSuiteVersion"].readIfPresent() + return value + } +} + +extension ListTagsForResourceOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListTagsForResourceOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListTagsForResourceOutput() + value.tags = try reader["tags"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + return value + } +} + +extension ListTestCasesOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListTestCasesOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListTestCasesOutput() + value.nextToken = try reader["nextToken"].readIfPresent() + value.testCases = try reader["testCases"].readListIfPresent(memberReadingClosure: AppTestClientTypes.TestCaseSummary.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension ListTestConfigurationsOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListTestConfigurationsOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListTestConfigurationsOutput() + value.nextToken = try reader["nextToken"].readIfPresent() + value.testConfigurations = try reader["testConfigurations"].readListIfPresent(memberReadingClosure: AppTestClientTypes.TestConfigurationSummary.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension ListTestRunsOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListTestRunsOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListTestRunsOutput() + value.nextToken = try reader["nextToken"].readIfPresent() + value.testRuns = try reader["testRuns"].readListIfPresent(memberReadingClosure: AppTestClientTypes.TestRunSummary.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension ListTestRunStepsOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListTestRunStepsOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListTestRunStepsOutput() + value.nextToken = try reader["nextToken"].readIfPresent() + value.testRunSteps = try reader["testRunSteps"].readListIfPresent(memberReadingClosure: AppTestClientTypes.TestRunStepSummary.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension ListTestRunTestCasesOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListTestRunTestCasesOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListTestRunTestCasesOutput() + value.nextToken = try reader["nextToken"].readIfPresent() + value.testRunTestCases = try reader["testRunTestCases"].readListIfPresent(memberReadingClosure: AppTestClientTypes.TestCaseRunSummary.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension ListTestSuitesOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListTestSuitesOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListTestSuitesOutput() + value.nextToken = try reader["nextToken"].readIfPresent() + value.testSuites = try reader["testSuites"].readListIfPresent(memberReadingClosure: AppTestClientTypes.TestSuiteSummary.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension StartTestRunOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> StartTestRunOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = StartTestRunOutput() + value.testRunId = try reader["testRunId"].readIfPresent() + value.testRunStatus = try reader["testRunStatus"].readIfPresent() + return value + } +} + +extension TagResourceOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> TagResourceOutput { + return TagResourceOutput() + } +} + +extension UntagResourceOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> UntagResourceOutput { + return UntagResourceOutput() + } +} + +extension UpdateTestCaseOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> UpdateTestCaseOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = UpdateTestCaseOutput() + value.testCaseId = try reader["testCaseId"].readIfPresent() + value.testCaseVersion = try reader["testCaseVersion"].readIfPresent() + return value + } +} + +extension UpdateTestConfigurationOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> UpdateTestConfigurationOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = UpdateTestConfigurationOutput() + value.testConfigurationId = try reader["testConfigurationId"].readIfPresent() + value.testConfigurationVersion = try reader["testConfigurationVersion"].readIfPresent() + return value + } +} + +extension UpdateTestSuiteOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> UpdateTestSuiteOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = UpdateTestSuiteOutput() + value.testSuiteId = try reader["testSuiteId"].readIfPresent() + value.testSuiteVersion = try reader["testSuiteVersion"].readIfPresent() + return value + } +} + +enum CreateTestCaseOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ServiceQuotaExceededException": return try ServiceQuotaExceededException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum CreateTestConfigurationOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ServiceQuotaExceededException": return try ServiceQuotaExceededException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum CreateTestSuiteOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ServiceQuotaExceededException": return try ServiceQuotaExceededException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum DeleteTestCaseOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum DeleteTestConfigurationOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ServiceQuotaExceededException": return try ServiceQuotaExceededException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum DeleteTestRunOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum DeleteTestSuiteOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ServiceQuotaExceededException": return try ServiceQuotaExceededException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum GetTestCaseOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum GetTestConfigurationOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum GetTestRunStepOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum GetTestSuiteOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum ListTagsForResourceOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum ListTestCasesOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum ListTestConfigurationsOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum ListTestRunsOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum ListTestRunStepsOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum ListTestRunTestCasesOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum ListTestSuitesOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum StartTestRunOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ServiceQuotaExceededException": return try ServiceQuotaExceededException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum TagResourceOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ServiceQuotaExceededException": return try ServiceQuotaExceededException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum UntagResourceOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum UpdateTestCaseOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum UpdateTestConfigurationOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum UpdateTestSuiteOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +extension InternalServerException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> InternalServerException { + let reader = baseError.errorBodyReader + let httpResponse = baseError.httpResponse + var value = InternalServerException() + if let retryAfterSecondsHeaderValue = httpResponse.headers.value(for: "Retry-After") { + value.properties.retryAfterSeconds = Swift.Int(retryAfterSecondsHeaderValue) ?? 0 + } + value.properties.message = try reader["message"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension ValidationException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ValidationException { + let reader = baseError.errorBodyReader + var value = ValidationException() + value.properties.fieldList = try reader["fieldList"].readListIfPresent(memberReadingClosure: AppTestClientTypes.ValidationExceptionField.read(from:), memberNodeInfo: "member", isFlattened: false) + value.properties.message = try reader["message"].readIfPresent() + value.properties.reason = try reader["reason"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension ThrottlingException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ThrottlingException { + let reader = baseError.errorBodyReader + let httpResponse = baseError.httpResponse + var value = ThrottlingException() + if let retryAfterSecondsHeaderValue = httpResponse.headers.value(for: "Retry-After") { + value.properties.retryAfterSeconds = Swift.Int(retryAfterSecondsHeaderValue) ?? 0 + } + value.properties.message = try reader["message"].readIfPresent() + value.properties.quotaCode = try reader["quotaCode"].readIfPresent() + value.properties.serviceCode = try reader["serviceCode"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension AccessDeniedException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> AccessDeniedException { + let reader = baseError.errorBodyReader + var value = AccessDeniedException() + value.properties.message = try reader["message"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension ConflictException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ConflictException { + let reader = baseError.errorBodyReader + var value = ConflictException() + value.properties.message = try reader["message"].readIfPresent() + value.properties.resourceId = try reader["resourceId"].readIfPresent() + value.properties.resourceType = try reader["resourceType"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension ServiceQuotaExceededException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ServiceQuotaExceededException { + let reader = baseError.errorBodyReader + var value = ServiceQuotaExceededException() + value.properties.message = try reader["message"].readIfPresent() + value.properties.quotaCode = try reader["quotaCode"].readIfPresent() + value.properties.resourceId = try reader["resourceId"].readIfPresent() + value.properties.resourceType = try reader["resourceType"].readIfPresent() + value.properties.serviceCode = try reader["serviceCode"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension ResourceNotFoundException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ResourceNotFoundException { + let reader = baseError.errorBodyReader + var value = ResourceNotFoundException() + value.properties.message = try reader["message"].readIfPresent() + value.properties.resourceId = try reader["resourceId"].readIfPresent() + value.properties.resourceType = try reader["resourceType"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension AppTestClientTypes.TestCaseLatestVersion { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.TestCaseLatestVersion { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.TestCaseLatestVersion() + value.version = try reader["version"].readIfPresent() + value.status = try reader["status"].readIfPresent() + value.statusReason = try reader["statusReason"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.Step { + + static func write(value: AppTestClientTypes.Step?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["action"].write(value.action, with: AppTestClientTypes.StepAction.write(value:to:)) + try writer["description"].write(value.description) + try writer["name"].write(value.name) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.Step { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.Step() + value.name = try reader["name"].readIfPresent() + value.description = try reader["description"].readIfPresent() + value.action = try reader["action"].readIfPresent(with: AppTestClientTypes.StepAction.read(from:)) + return value + } +} + +extension AppTestClientTypes.StepAction { + + static func write(value: AppTestClientTypes.StepAction?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + switch value { + case let .compareaction(compareaction): + try writer["compareAction"].write(compareaction, with: AppTestClientTypes.CompareAction.write(value:to:)) + case let .mainframeaction(mainframeaction): + try writer["mainframeAction"].write(mainframeaction, with: AppTestClientTypes.MainframeAction.write(value:to:)) + case let .resourceaction(resourceaction): + try writer["resourceAction"].write(resourceaction, with: AppTestClientTypes.ResourceAction.write(value:to:)) + case let .sdkUnknown(sdkUnknown): + try writer["sdkUnknown"].write(sdkUnknown) + } + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.StepAction { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "resourceAction": + return .resourceaction(try reader["resourceAction"].read(with: AppTestClientTypes.ResourceAction.read(from:))) + case "mainframeAction": + return .mainframeaction(try reader["mainframeAction"].read(with: AppTestClientTypes.MainframeAction.read(from:))) + case "compareAction": + return .compareaction(try reader["compareAction"].read(with: AppTestClientTypes.CompareAction.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension AppTestClientTypes.CompareAction { + + static func write(value: AppTestClientTypes.CompareAction?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["input"].write(value.input, with: AppTestClientTypes.Input.write(value:to:)) + try writer["output"].write(value.output, with: AppTestClientTypes.Output.write(value:to:)) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.CompareAction { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.CompareAction() + value.input = try reader["input"].readIfPresent(with: AppTestClientTypes.Input.read(from:)) + value.output = try reader["output"].readIfPresent(with: AppTestClientTypes.Output.read(from:)) + return value + } +} + +extension AppTestClientTypes.Output { + + static func write(value: AppTestClientTypes.Output?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + switch value { + case let .file(file): + try writer["file"].write(file, with: AppTestClientTypes.OutputFile.write(value:to:)) + case let .sdkUnknown(sdkUnknown): + try writer["sdkUnknown"].write(sdkUnknown) + } + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.Output { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "file": + return .file(try reader["file"].read(with: AppTestClientTypes.OutputFile.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension AppTestClientTypes.OutputFile { + + static func write(value: AppTestClientTypes.OutputFile?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["fileLocation"].write(value.fileLocation) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.OutputFile { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.OutputFile() + value.fileLocation = try reader["fileLocation"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.Input { + + static func write(value: AppTestClientTypes.Input?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + switch value { + case let .file(file): + try writer["file"].write(file, with: AppTestClientTypes.InputFile.write(value:to:)) + case let .sdkUnknown(sdkUnknown): + try writer["sdkUnknown"].write(sdkUnknown) + } + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.Input { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "file": + return .file(try reader["file"].read(with: AppTestClientTypes.InputFile.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension AppTestClientTypes.InputFile { + + static func write(value: AppTestClientTypes.InputFile?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["fileMetadata"].write(value.fileMetadata, with: AppTestClientTypes.FileMetadata.write(value:to:)) + try writer["sourceLocation"].write(value.sourceLocation) + try writer["targetLocation"].write(value.targetLocation) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.InputFile { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.InputFile() + value.sourceLocation = try reader["sourceLocation"].readIfPresent() + value.targetLocation = try reader["targetLocation"].readIfPresent() + value.fileMetadata = try reader["fileMetadata"].readIfPresent(with: AppTestClientTypes.FileMetadata.read(from:)) + return value + } +} + +extension AppTestClientTypes.FileMetadata { + + static func write(value: AppTestClientTypes.FileMetadata?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + switch value { + case let .datasets(datasets): + try writer["dataSets"].writeList(datasets, memberWritingClosure: AppTestClientTypes.DataSet.write(value:to:), memberNodeInfo: "member", isFlattened: false) + case let .databasecdc(databasecdc): + try writer["databaseCDC"].write(databasecdc, with: AppTestClientTypes.DatabaseCDC.write(value:to:)) + case let .sdkUnknown(sdkUnknown): + try writer["sdkUnknown"].write(sdkUnknown) + } + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.FileMetadata { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "dataSets": + return .datasets(try reader["dataSets"].readList(memberReadingClosure: AppTestClientTypes.DataSet.read(from:), memberNodeInfo: "member", isFlattened: false)) + case "databaseCDC": + return .databasecdc(try reader["databaseCDC"].read(with: AppTestClientTypes.DatabaseCDC.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension AppTestClientTypes.DatabaseCDC { + + static func write(value: AppTestClientTypes.DatabaseCDC?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["sourceMetadata"].write(value.sourceMetadata, with: AppTestClientTypes.SourceDatabaseMetadata.write(value:to:)) + try writer["targetMetadata"].write(value.targetMetadata, with: AppTestClientTypes.TargetDatabaseMetadata.write(value:to:)) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.DatabaseCDC { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.DatabaseCDC() + value.sourceMetadata = try reader["sourceMetadata"].readIfPresent(with: AppTestClientTypes.SourceDatabaseMetadata.read(from:)) + value.targetMetadata = try reader["targetMetadata"].readIfPresent(with: AppTestClientTypes.TargetDatabaseMetadata.read(from:)) + return value + } +} + +extension AppTestClientTypes.TargetDatabaseMetadata { + + static func write(value: AppTestClientTypes.TargetDatabaseMetadata?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["captureTool"].write(value.captureTool) + try writer["type"].write(value.type) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.TargetDatabaseMetadata { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.TargetDatabaseMetadata() + value.type = try reader["type"].readIfPresent() + value.captureTool = try reader["captureTool"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.SourceDatabaseMetadata { + + static func write(value: AppTestClientTypes.SourceDatabaseMetadata?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["captureTool"].write(value.captureTool) + try writer["type"].write(value.type) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.SourceDatabaseMetadata { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.SourceDatabaseMetadata() + value.type = try reader["type"].readIfPresent() + value.captureTool = try reader["captureTool"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.DataSet { + + static func write(value: AppTestClientTypes.DataSet?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["ccsid"].write(value.ccsid) + try writer["format"].write(value.format) + try writer["length"].write(value.length) + try writer["name"].write(value.name) + try writer["type"].write(value.type) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.DataSet { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.DataSet() + value.type = try reader["type"].readIfPresent() + value.name = try reader["name"].readIfPresent() + value.ccsid = try reader["ccsid"].readIfPresent() + value.format = try reader["format"].readIfPresent() + value.length = try reader["length"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.MainframeAction { + + static func write(value: AppTestClientTypes.MainframeAction?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["actionType"].write(value.actionType, with: AppTestClientTypes.MainframeActionType.write(value:to:)) + try writer["properties"].write(value.properties, with: AppTestClientTypes.MainframeActionProperties.write(value:to:)) + try writer["resource"].write(value.resource) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.MainframeAction { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.MainframeAction() + value.resource = try reader["resource"].readIfPresent() + value.actionType = try reader["actionType"].readIfPresent(with: AppTestClientTypes.MainframeActionType.read(from:)) + value.properties = try reader["properties"].readIfPresent(with: AppTestClientTypes.MainframeActionProperties.read(from:)) + return value + } +} + +extension AppTestClientTypes.MainframeActionProperties { + + static func write(value: AppTestClientTypes.MainframeActionProperties?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["dmsTaskArn"].write(value.dmsTaskArn) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.MainframeActionProperties { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.MainframeActionProperties() + value.dmsTaskArn = try reader["dmsTaskArn"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.MainframeActionType { + + static func write(value: AppTestClientTypes.MainframeActionType?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + switch value { + case let .batch(batch): + try writer["batch"].write(batch, with: AppTestClientTypes.Batch.write(value:to:)) + case let .tn3270(tn3270): + try writer["tn3270"].write(tn3270, with: AppTestClientTypes.TN3270.write(value:to:)) + case let .sdkUnknown(sdkUnknown): + try writer["sdkUnknown"].write(sdkUnknown) + } + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.MainframeActionType { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "batch": + return .batch(try reader["batch"].read(with: AppTestClientTypes.Batch.read(from:))) + case "tn3270": + return .tn3270(try reader["tn3270"].read(with: AppTestClientTypes.TN3270.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension AppTestClientTypes.TN3270 { + + static func write(value: AppTestClientTypes.TN3270?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["exportDataSetNames"].writeList(value.exportDataSetNames, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["script"].write(value.script, with: AppTestClientTypes.Script.write(value:to:)) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.TN3270 { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.TN3270() + value.script = try reader["script"].readIfPresent(with: AppTestClientTypes.Script.read(from:)) + value.exportDataSetNames = try reader["exportDataSetNames"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension AppTestClientTypes.Script { + + static func write(value: AppTestClientTypes.Script?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["scriptLocation"].write(value.scriptLocation) + try writer["type"].write(value.type) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.Script { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.Script() + value.scriptLocation = try reader["scriptLocation"].readIfPresent() + value.type = try reader["type"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.Batch { + + static func write(value: AppTestClientTypes.Batch?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["batchJobName"].write(value.batchJobName) + try writer["batchJobParameters"].writeMap(value.batchJobParameters, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + try writer["exportDataSetNames"].writeList(value.exportDataSetNames, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.Batch { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.Batch() + value.batchJobName = try reader["batchJobName"].readIfPresent() + value.batchJobParameters = try reader["batchJobParameters"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + value.exportDataSetNames = try reader["exportDataSetNames"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension AppTestClientTypes.ResourceAction { + + static func write(value: AppTestClientTypes.ResourceAction?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + switch value { + case let .cloudformationaction(cloudformationaction): + try writer["cloudFormationAction"].write(cloudformationaction, with: AppTestClientTypes.CloudFormationAction.write(value:to:)) + case let .m2managedapplicationaction(m2managedapplicationaction): + try writer["m2ManagedApplicationAction"].write(m2managedapplicationaction, with: AppTestClientTypes.M2ManagedApplicationAction.write(value:to:)) + case let .m2nonmanagedapplicationaction(m2nonmanagedapplicationaction): + try writer["m2NonManagedApplicationAction"].write(m2nonmanagedapplicationaction, with: AppTestClientTypes.M2NonManagedApplicationAction.write(value:to:)) + case let .sdkUnknown(sdkUnknown): + try writer["sdkUnknown"].write(sdkUnknown) + } + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.ResourceAction { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "m2ManagedApplicationAction": + return .m2managedapplicationaction(try reader["m2ManagedApplicationAction"].read(with: AppTestClientTypes.M2ManagedApplicationAction.read(from:))) + case "m2NonManagedApplicationAction": + return .m2nonmanagedapplicationaction(try reader["m2NonManagedApplicationAction"].read(with: AppTestClientTypes.M2NonManagedApplicationAction.read(from:))) + case "cloudFormationAction": + return .cloudformationaction(try reader["cloudFormationAction"].read(with: AppTestClientTypes.CloudFormationAction.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension AppTestClientTypes.CloudFormationAction { + + static func write(value: AppTestClientTypes.CloudFormationAction?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["actionType"].write(value.actionType) + try writer["resource"].write(value.resource) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.CloudFormationAction { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.CloudFormationAction() + value.resource = try reader["resource"].readIfPresent() + value.actionType = try reader["actionType"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.M2NonManagedApplicationAction { + + static func write(value: AppTestClientTypes.M2NonManagedApplicationAction?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["actionType"].write(value.actionType) + try writer["resource"].write(value.resource) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.M2NonManagedApplicationAction { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.M2NonManagedApplicationAction() + value.resource = try reader["resource"].readIfPresent() + value.actionType = try reader["actionType"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.M2ManagedApplicationAction { + + static func write(value: AppTestClientTypes.M2ManagedApplicationAction?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["actionType"].write(value.actionType) + try writer["properties"].write(value.properties, with: AppTestClientTypes.M2ManagedActionProperties.write(value:to:)) + try writer["resource"].write(value.resource) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.M2ManagedApplicationAction { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.M2ManagedApplicationAction() + value.resource = try reader["resource"].readIfPresent() + value.actionType = try reader["actionType"].readIfPresent() + value.properties = try reader["properties"].readIfPresent(with: AppTestClientTypes.M2ManagedActionProperties.read(from:)) + return value + } +} + +extension AppTestClientTypes.M2ManagedActionProperties { + + static func write(value: AppTestClientTypes.M2ManagedActionProperties?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["forceStop"].write(value.forceStop) + try writer["importDataSetLocation"].write(value.importDataSetLocation) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.M2ManagedActionProperties { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.M2ManagedActionProperties() + value.forceStop = try reader["forceStop"].readIfPresent() + value.importDataSetLocation = try reader["importDataSetLocation"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.TestConfigurationLatestVersion { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.TestConfigurationLatestVersion { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.TestConfigurationLatestVersion() + value.version = try reader["version"].readIfPresent() + value.status = try reader["status"].readIfPresent() + value.statusReason = try reader["statusReason"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.Resource { + + static func write(value: AppTestClientTypes.Resource?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["name"].write(value.name) + try writer["type"].write(value.type, with: AppTestClientTypes.ResourceType.write(value:to:)) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.Resource { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.Resource() + value.name = try reader["name"].readIfPresent() + value.type = try reader["type"].readIfPresent(with: AppTestClientTypes.ResourceType.read(from:)) + return value + } +} + +extension AppTestClientTypes.ResourceType { + + static func write(value: AppTestClientTypes.ResourceType?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + switch value { + case let .cloudformation(cloudformation): + try writer["cloudFormation"].write(cloudformation, with: AppTestClientTypes.CloudFormation.write(value:to:)) + case let .m2managedapplication(m2managedapplication): + try writer["m2ManagedApplication"].write(m2managedapplication, with: AppTestClientTypes.M2ManagedApplication.write(value:to:)) + case let .m2nonmanagedapplication(m2nonmanagedapplication): + try writer["m2NonManagedApplication"].write(m2nonmanagedapplication, with: AppTestClientTypes.M2NonManagedApplication.write(value:to:)) + case let .sdkUnknown(sdkUnknown): + try writer["sdkUnknown"].write(sdkUnknown) + } + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.ResourceType { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "cloudFormation": + return .cloudformation(try reader["cloudFormation"].read(with: AppTestClientTypes.CloudFormation.read(from:))) + case "m2ManagedApplication": + return .m2managedapplication(try reader["m2ManagedApplication"].read(with: AppTestClientTypes.M2ManagedApplication.read(from:))) + case "m2NonManagedApplication": + return .m2nonmanagedapplication(try reader["m2NonManagedApplication"].read(with: AppTestClientTypes.M2NonManagedApplication.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension AppTestClientTypes.M2NonManagedApplication { + + static func write(value: AppTestClientTypes.M2NonManagedApplication?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["listenerPort"].write(value.listenerPort) + try writer["runtime"].write(value.runtime) + try writer["vpcEndpointServiceName"].write(value.vpcEndpointServiceName) + try writer["webAppName"].write(value.webAppName) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.M2NonManagedApplication { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.M2NonManagedApplication() + value.vpcEndpointServiceName = try reader["vpcEndpointServiceName"].readIfPresent() + value.listenerPort = try reader["listenerPort"].readIfPresent() + value.runtime = try reader["runtime"].readIfPresent() + value.webAppName = try reader["webAppName"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.M2ManagedApplication { + + static func write(value: AppTestClientTypes.M2ManagedApplication?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["applicationId"].write(value.applicationId) + try writer["listenerPort"].write(value.listenerPort) + try writer["runtime"].write(value.runtime) + try writer["vpcEndpointServiceName"].write(value.vpcEndpointServiceName) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.M2ManagedApplication { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.M2ManagedApplication() + value.applicationId = try reader["applicationId"].readIfPresent() + value.runtime = try reader["runtime"].readIfPresent() + value.vpcEndpointServiceName = try reader["vpcEndpointServiceName"].readIfPresent() + value.listenerPort = try reader["listenerPort"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.CloudFormation { + + static func write(value: AppTestClientTypes.CloudFormation?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["parameters"].writeMap(value.parameters, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + try writer["templateLocation"].write(value.templateLocation) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.CloudFormation { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.CloudFormation() + value.templateLocation = try reader["templateLocation"].readIfPresent() + value.parameters = try reader["parameters"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + return value + } +} + +extension AppTestClientTypes.ServiceSettings { + + static func write(value: AppTestClientTypes.ServiceSettings?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["kmsKeyId"].write(value.kmsKeyId) + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.ServiceSettings { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.ServiceSettings() + value.kmsKeyId = try reader["kmsKeyId"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.StepRunSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.StepRunSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "mainframeAction": + return .mainframeaction(try reader["mainframeAction"].read(with: AppTestClientTypes.MainframeActionSummary.read(from:))) + case "compareAction": + return .compareaction(try reader["compareAction"].read(with: AppTestClientTypes.CompareActionSummary.read(from:))) + case "resourceAction": + return .resourceaction(try reader["resourceAction"].read(with: AppTestClientTypes.ResourceActionSummary.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension AppTestClientTypes.ResourceActionSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.ResourceActionSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "cloudFormation": + return .cloudformation(try reader["cloudFormation"].read(with: AppTestClientTypes.CloudFormationStepSummary.read(from:))) + case "m2ManagedApplication": + return .m2managedapplication(try reader["m2ManagedApplication"].read(with: AppTestClientTypes.M2ManagedApplicationStepSummary.read(from:))) + case "m2NonManagedApplication": + return .m2nonmanagedapplication(try reader["m2NonManagedApplication"].read(with: AppTestClientTypes.M2NonManagedApplicationStepSummary.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension AppTestClientTypes.M2NonManagedApplicationStepSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.M2NonManagedApplicationStepSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.M2NonManagedApplicationStepSummary() + value.stepInput = try reader["stepInput"].readIfPresent(with: AppTestClientTypes.M2NonManagedApplicationStepInput.read(from:)) + value.stepOutput = try reader["stepOutput"].readIfPresent(with: AppTestClientTypes.M2NonManagedApplicationStepOutput.read(from:)) + return value + } +} + +extension AppTestClientTypes.M2NonManagedApplicationStepOutput { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.M2NonManagedApplicationStepOutput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + return AppTestClientTypes.M2NonManagedApplicationStepOutput() + } +} + +extension AppTestClientTypes.M2NonManagedApplicationStepInput { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.M2NonManagedApplicationStepInput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.M2NonManagedApplicationStepInput() + value.vpcEndpointServiceName = try reader["vpcEndpointServiceName"].readIfPresent() + value.listenerPort = try reader["listenerPort"].readIfPresent() + value.runtime = try reader["runtime"].readIfPresent() + value.webAppName = try reader["webAppName"].readIfPresent() + value.actionType = try reader["actionType"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.M2ManagedApplicationStepSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.M2ManagedApplicationStepSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.M2ManagedApplicationStepSummary() + value.stepInput = try reader["stepInput"].readIfPresent(with: AppTestClientTypes.M2ManagedApplicationStepInput.read(from:)) + value.stepOutput = try reader["stepOutput"].readIfPresent(with: AppTestClientTypes.M2ManagedApplicationStepOutput.read(from:)) + return value + } +} + +extension AppTestClientTypes.M2ManagedApplicationStepOutput { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.M2ManagedApplicationStepOutput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.M2ManagedApplicationStepOutput() + value.importDataSetSummary = try reader["importDataSetSummary"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + return value + } +} + +extension AppTestClientTypes.M2ManagedApplicationStepInput { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.M2ManagedApplicationStepInput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.M2ManagedApplicationStepInput() + value.applicationId = try reader["applicationId"].readIfPresent() + value.runtime = try reader["runtime"].readIfPresent() + value.vpcEndpointServiceName = try reader["vpcEndpointServiceName"].readIfPresent() + value.listenerPort = try reader["listenerPort"].readIfPresent() + value.actionType = try reader["actionType"].readIfPresent() + value.properties = try reader["properties"].readIfPresent(with: AppTestClientTypes.M2ManagedActionProperties.read(from:)) + return value + } +} + +extension AppTestClientTypes.CloudFormationStepSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.CloudFormationStepSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "createCloudformation": + return .createcloudformation(try reader["createCloudformation"].read(with: AppTestClientTypes.CreateCloudFormationSummary.read(from:))) + case "deleteCloudformation": + return .deletecloudformation(try reader["deleteCloudformation"].read(with: AppTestClientTypes.DeleteCloudFormationSummary.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension AppTestClientTypes.DeleteCloudFormationSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.DeleteCloudFormationSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.DeleteCloudFormationSummary() + value.stepInput = try reader["stepInput"].readIfPresent(with: AppTestClientTypes.DeleteCloudFormationStepInput.read(from:)) + value.stepOutput = try reader["stepOutput"].readIfPresent(with: AppTestClientTypes.DeleteCloudFormationStepOutput.read(from:)) + return value + } +} + +extension AppTestClientTypes.DeleteCloudFormationStepOutput { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.DeleteCloudFormationStepOutput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + return AppTestClientTypes.DeleteCloudFormationStepOutput() + } +} + +extension AppTestClientTypes.DeleteCloudFormationStepInput { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.DeleteCloudFormationStepInput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.DeleteCloudFormationStepInput() + value.stackId = try reader["stackId"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.CreateCloudFormationSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.CreateCloudFormationSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.CreateCloudFormationSummary() + value.stepInput = try reader["stepInput"].readIfPresent(with: AppTestClientTypes.CreateCloudFormationStepInput.read(from:)) + value.stepOutput = try reader["stepOutput"].readIfPresent(with: AppTestClientTypes.CreateCloudFormationStepOutput.read(from:)) + return value + } +} + +extension AppTestClientTypes.CreateCloudFormationStepOutput { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.CreateCloudFormationStepOutput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.CreateCloudFormationStepOutput() + value.stackId = try reader["stackId"].readIfPresent() + value.exports = try reader["exports"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + return value + } +} + +extension AppTestClientTypes.CreateCloudFormationStepInput { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.CreateCloudFormationStepInput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.CreateCloudFormationStepInput() + value.templateLocation = try reader["templateLocation"].readIfPresent() + value.parameters = try reader["parameters"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + return value + } +} + +extension AppTestClientTypes.CompareActionSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.CompareActionSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.CompareActionSummary() + value.type = try reader["type"].readIfPresent(with: AppTestClientTypes.File.read(from:)) + return value + } +} + +extension AppTestClientTypes.File { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.File { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "fileType": + return .filetype(try reader["fileType"].read(with: AppTestClientTypes.CompareFileType.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension AppTestClientTypes.CompareFileType { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.CompareFileType { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "datasets": + return .datasets(try reader["datasets"].read(with: AppTestClientTypes.CompareDataSetsSummary.read(from:))) + case "databaseCDC": + return .databasecdc(try reader["databaseCDC"].read(with: AppTestClientTypes.CompareDatabaseCDCSummary.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension AppTestClientTypes.CompareDatabaseCDCSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.CompareDatabaseCDCSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.CompareDatabaseCDCSummary() + value.stepInput = try reader["stepInput"].readIfPresent(with: AppTestClientTypes.CompareDatabaseCDCStepInput.read(from:)) + value.stepOutput = try reader["stepOutput"].readIfPresent(with: AppTestClientTypes.CompareDatabaseCDCStepOutput.read(from:)) + return value + } +} + +extension AppTestClientTypes.CompareDatabaseCDCStepOutput { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.CompareDatabaseCDCStepOutput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.CompareDatabaseCDCStepOutput() + value.comparisonOutputLocation = try reader["comparisonOutputLocation"].readIfPresent() + value.comparisonStatus = try reader["comparisonStatus"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.CompareDatabaseCDCStepInput { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.CompareDatabaseCDCStepInput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.CompareDatabaseCDCStepInput() + value.sourceLocation = try reader["sourceLocation"].readIfPresent() + value.targetLocation = try reader["targetLocation"].readIfPresent() + value.outputLocation = try reader["outputLocation"].readIfPresent() + value.sourceMetadata = try reader["sourceMetadata"].readIfPresent(with: AppTestClientTypes.SourceDatabaseMetadata.read(from:)) + value.targetMetadata = try reader["targetMetadata"].readIfPresent(with: AppTestClientTypes.TargetDatabaseMetadata.read(from:)) + return value + } +} + +extension AppTestClientTypes.CompareDataSetsSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.CompareDataSetsSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.CompareDataSetsSummary() + value.stepInput = try reader["stepInput"].readIfPresent(with: AppTestClientTypes.CompareDataSetsStepInput.read(from:)) + value.stepOutput = try reader["stepOutput"].readIfPresent(with: AppTestClientTypes.CompareDataSetsStepOutput.read(from:)) + return value + } +} + +extension AppTestClientTypes.CompareDataSetsStepOutput { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.CompareDataSetsStepOutput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.CompareDataSetsStepOutput() + value.comparisonOutputLocation = try reader["comparisonOutputLocation"].readIfPresent() + value.comparisonStatus = try reader["comparisonStatus"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.CompareDataSetsStepInput { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.CompareDataSetsStepInput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.CompareDataSetsStepInput() + value.sourceLocation = try reader["sourceLocation"].readIfPresent() + value.targetLocation = try reader["targetLocation"].readIfPresent() + value.sourceDataSets = try reader["sourceDataSets"].readListIfPresent(memberReadingClosure: AppTestClientTypes.DataSet.read(from:), memberNodeInfo: "member", isFlattened: false) + value.targetDataSets = try reader["targetDataSets"].readListIfPresent(memberReadingClosure: AppTestClientTypes.DataSet.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension AppTestClientTypes.MainframeActionSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.MainframeActionSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "batch": + return .batch(try reader["batch"].read(with: AppTestClientTypes.BatchSummary.read(from:))) + case "tn3270": + return .tn3270(try reader["tn3270"].read(with: AppTestClientTypes.TN3270Summary.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension AppTestClientTypes.TN3270Summary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.TN3270Summary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.TN3270Summary() + value.stepInput = try reader["stepInput"].readIfPresent(with: AppTestClientTypes.TN3270StepInput.read(from:)) + value.stepOutput = try reader["stepOutput"].readIfPresent(with: AppTestClientTypes.TN3270StepOutput.read(from:)) + return value + } +} + +extension AppTestClientTypes.TN3270StepOutput { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.TN3270StepOutput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.TN3270StepOutput() + value.dataSetExportLocation = try reader["dataSetExportLocation"].readIfPresent() + value.dmsOutputLocation = try reader["dmsOutputLocation"].readIfPresent() + value.dataSetDetails = try reader["dataSetDetails"].readListIfPresent(memberReadingClosure: AppTestClientTypes.DataSet.read(from:), memberNodeInfo: "member", isFlattened: false) + value.scriptOutputLocation = try reader["scriptOutputLocation"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.TN3270StepInput { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.TN3270StepInput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.TN3270StepInput() + value.resource = try reader["resource"].readIfPresent(with: AppTestClientTypes.MainframeResourceSummary.read(from:)) + value.script = try reader["script"].readIfPresent(with: AppTestClientTypes.ScriptSummary.read(from:)) + value.exportDataSetNames = try reader["exportDataSetNames"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) + value.properties = try reader["properties"].readIfPresent(with: AppTestClientTypes.MainframeActionProperties.read(from:)) + return value + } +} + +extension AppTestClientTypes.ScriptSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.ScriptSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.ScriptSummary() + value.scriptLocation = try reader["scriptLocation"].readIfPresent() + value.type = try reader["type"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.MainframeResourceSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.MainframeResourceSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "m2ManagedApplication": + return .m2managedapplication(try reader["m2ManagedApplication"].read(with: AppTestClientTypes.M2ManagedApplicationSummary.read(from:))) + case "m2NonManagedApplication": + return .m2nonmanagedapplication(try reader["m2NonManagedApplication"].read(with: AppTestClientTypes.M2NonManagedApplicationSummary.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension AppTestClientTypes.M2NonManagedApplicationSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.M2NonManagedApplicationSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.M2NonManagedApplicationSummary() + value.vpcEndpointServiceName = try reader["vpcEndpointServiceName"].readIfPresent() + value.listenerPort = try reader["listenerPort"].readIfPresent() + value.runtime = try reader["runtime"].readIfPresent() + value.webAppName = try reader["webAppName"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.M2ManagedApplicationSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.M2ManagedApplicationSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.M2ManagedApplicationSummary() + value.applicationId = try reader["applicationId"].readIfPresent() + value.runtime = try reader["runtime"].readIfPresent() + value.listenerPort = try reader["listenerPort"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.BatchSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.BatchSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.BatchSummary() + value.stepInput = try reader["stepInput"].readIfPresent(with: AppTestClientTypes.BatchStepInput.read(from:)) + value.stepOutput = try reader["stepOutput"].readIfPresent(with: AppTestClientTypes.BatchStepOutput.read(from:)) + return value + } +} + +extension AppTestClientTypes.BatchStepOutput { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.BatchStepOutput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.BatchStepOutput() + value.dataSetExportLocation = try reader["dataSetExportLocation"].readIfPresent() + value.dmsOutputLocation = try reader["dmsOutputLocation"].readIfPresent() + value.dataSetDetails = try reader["dataSetDetails"].readListIfPresent(memberReadingClosure: AppTestClientTypes.DataSet.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension AppTestClientTypes.BatchStepInput { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.BatchStepInput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.BatchStepInput() + value.resource = try reader["resource"].readIfPresent(with: AppTestClientTypes.MainframeResourceSummary.read(from:)) + value.batchJobName = try reader["batchJobName"].readIfPresent() + value.batchJobParameters = try reader["batchJobParameters"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + value.exportDataSetNames = try reader["exportDataSetNames"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) + value.properties = try reader["properties"].readIfPresent(with: AppTestClientTypes.MainframeActionProperties.read(from:)) + return value + } +} + +extension AppTestClientTypes.TestSuiteLatestVersion { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.TestSuiteLatestVersion { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.TestSuiteLatestVersion() + value.version = try reader["version"].readIfPresent() + value.status = try reader["status"].readIfPresent() + value.statusReason = try reader["statusReason"].readIfPresent() + return value + } +} + +extension AppTestClientTypes.TestCases { + + static func write(value: AppTestClientTypes.TestCases?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + switch value { + case let .sequential(sequential): + try writer["sequential"].writeList(sequential, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) + case let .sdkUnknown(sdkUnknown): + try writer["sdkUnknown"].write(sdkUnknown) + } + } + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.TestCases { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "sequential": + return .sequential(try reader["sequential"].readList(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false)) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension AppTestClientTypes.TestCaseSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.TestCaseSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.TestCaseSummary() + value.testCaseId = try reader["testCaseId"].readIfPresent() + value.testCaseArn = try reader["testCaseArn"].readIfPresent() + value.name = try reader["name"].readIfPresent() + value.statusReason = try reader["statusReason"].readIfPresent() + value.latestVersion = try reader["latestVersion"].readIfPresent() + value.status = try reader["status"].readIfPresent() + value.creationTime = try reader["creationTime"].readTimestampIfPresent(format: .epochSeconds) + value.lastUpdateTime = try reader["lastUpdateTime"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +extension AppTestClientTypes.TestConfigurationSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.TestConfigurationSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.TestConfigurationSummary() + value.testConfigurationId = try reader["testConfigurationId"].readIfPresent() + value.name = try reader["name"].readIfPresent() + value.statusReason = try reader["statusReason"].readIfPresent() + value.latestVersion = try reader["latestVersion"].readIfPresent() + value.testConfigurationArn = try reader["testConfigurationArn"].readIfPresent() + value.status = try reader["status"].readIfPresent() + value.creationTime = try reader["creationTime"].readTimestampIfPresent(format: .epochSeconds) + value.lastUpdateTime = try reader["lastUpdateTime"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +extension AppTestClientTypes.TestRunSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.TestRunSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.TestRunSummary() + value.testRunId = try reader["testRunId"].readIfPresent() + value.testRunArn = try reader["testRunArn"].readIfPresent() + value.testSuiteId = try reader["testSuiteId"].readIfPresent() + value.testSuiteVersion = try reader["testSuiteVersion"].readIfPresent() + value.testConfigurationId = try reader["testConfigurationId"].readIfPresent() + value.testConfigurationVersion = try reader["testConfigurationVersion"].readIfPresent() + value.status = try reader["status"].readIfPresent() + value.statusReason = try reader["statusReason"].readIfPresent() + value.runStartTime = try reader["runStartTime"].readTimestampIfPresent(format: .epochSeconds) + value.runEndTime = try reader["runEndTime"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +extension AppTestClientTypes.TestRunStepSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.TestRunStepSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.TestRunStepSummary() + value.stepName = try reader["stepName"].readIfPresent() + value.testRunId = try reader["testRunId"].readIfPresent() + value.testCaseId = try reader["testCaseId"].readIfPresent() + value.testCaseVersion = try reader["testCaseVersion"].readIfPresent() + value.testSuiteId = try reader["testSuiteId"].readIfPresent() + value.testSuiteVersion = try reader["testSuiteVersion"].readIfPresent() + value.beforeStep = try reader["beforeStep"].readIfPresent() + value.afterStep = try reader["afterStep"].readIfPresent() + value.status = try reader["status"].readIfPresent() + value.statusReason = try reader["statusReason"].readIfPresent() + value.runStartTime = try reader["runStartTime"].readTimestampIfPresent(format: .epochSeconds) + value.runEndTime = try reader["runEndTime"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +extension AppTestClientTypes.TestCaseRunSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.TestCaseRunSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.TestCaseRunSummary() + value.testCaseId = try reader["testCaseId"].readIfPresent() + value.testCaseVersion = try reader["testCaseVersion"].readIfPresent() + value.testRunId = try reader["testRunId"].readIfPresent() + value.status = try reader["status"].readIfPresent() + value.statusReason = try reader["statusReason"].readIfPresent() + value.runStartTime = try reader["runStartTime"].readTimestampIfPresent(format: .epochSeconds) + value.runEndTime = try reader["runEndTime"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +extension AppTestClientTypes.TestSuiteSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.TestSuiteSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.TestSuiteSummary() + value.testSuiteId = try reader["testSuiteId"].readIfPresent() + value.name = try reader["name"].readIfPresent() + value.statusReason = try reader["statusReason"].readIfPresent() + value.latestVersion = try reader["latestVersion"].readIfPresent() + value.testSuiteArn = try reader["testSuiteArn"].readIfPresent() + value.status = try reader["status"].readIfPresent() + value.creationTime = try reader["creationTime"].readTimestampIfPresent(format: .epochSeconds) + value.lastUpdateTime = try reader["lastUpdateTime"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +extension AppTestClientTypes.ValidationExceptionField { + + static func read(from reader: SmithyJSON.Reader) throws -> AppTestClientTypes.ValidationExceptionField { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = AppTestClientTypes.ValidationExceptionField() + value.name = try reader["name"].readIfPresent() + value.message = try reader["message"].readIfPresent() + return value + } +} + +public enum AppTestClientTypes {} diff --git a/Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/Plugins.swift b/Sources/Services/AWSAppTest/Sources/AWSAppTest/Plugins.swift similarity index 77% rename from Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/Plugins.swift rename to Sources/Services/AWSAppTest/Sources/AWSAppTest/Plugins.swift index 61709a686e3..b497fbb3ed4 100644 --- a/Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/Plugins.swift +++ b/Sources/Services/AWSAppTest/Sources/AWSAppTest/Plugins.swift @@ -8,7 +8,7 @@ import protocol SmithyIdentity.AWSCredentialIdentityResolver import struct AWSSDKHTTPAuth.SigV4AuthScheme import typealias SmithyHTTPAuthAPI.AuthSchemes -public class BackupStorageClientEndpointPlugin: Plugin { +public class AppTestClientEndpointPlugin: Plugin { private var endpointResolver: EndpointResolver public init(endpointResolver: EndpointResolver) { @@ -20,7 +20,7 @@ public class BackupStorageClientEndpointPlugin: Plugin { } public func configureClient(clientConfiguration: ClientRuntime.ClientConfiguration) throws { - if let config = clientConfiguration as? BackupStorageClient.BackupStorageClientConfiguration { + if let config = clientConfiguration as? AppTestClient.AppTestClientConfiguration { config.endpointResolver = self.endpointResolver } } @@ -31,27 +31,27 @@ public class DefaultAWSAuthSchemePlugin: ClientRuntime.Plugin { public init() {} public func configureClient(clientConfiguration: ClientRuntime.ClientConfiguration) throws { - if let config = clientConfiguration as? BackupStorageClient.BackupStorageClientConfiguration { - config.authSchemeResolver = DefaultBackupStorageAuthSchemeResolver() + if let config = clientConfiguration as? AppTestClient.AppTestClientConfiguration { + config.authSchemeResolver = DefaultAppTestAuthSchemeResolver() config.authSchemes = [AWSSDKHTTPAuth.SigV4AuthScheme()] config.awsCredentialIdentityResolver = try AWSClientRuntime.AWSClientConfigDefaultsProvider.awsCredentialIdentityResolver() } } } -public class BackupStorageClientAuthSchemePlugin: ClientRuntime.Plugin { +public class AppTestClientAuthSchemePlugin: ClientRuntime.Plugin { private var authSchemes: SmithyHTTPAuthAPI.AuthSchemes? private var authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver? private var awsCredentialIdentityResolver: (any SmithyIdentity.AWSCredentialIdentityResolver)? - public init(authSchemes: SmithyHTTPAuthAPI.AuthSchemes? = nil, authSchemeResolver: BackupStorageAuthSchemeResolver? = nil, awsCredentialIdentityResolver: (any SmithyIdentity.AWSCredentialIdentityResolver)? = nil) { + public init(authSchemes: SmithyHTTPAuthAPI.AuthSchemes? = nil, authSchemeResolver: AppTestAuthSchemeResolver? = nil, awsCredentialIdentityResolver: (any SmithyIdentity.AWSCredentialIdentityResolver)? = nil) { self.authSchemeResolver = authSchemeResolver self.authSchemes = authSchemes self.awsCredentialIdentityResolver = awsCredentialIdentityResolver } public func configureClient(clientConfiguration: ClientRuntime.ClientConfiguration) throws { - if let config = clientConfiguration as? BackupStorageClient.BackupStorageClientConfiguration { + if let config = clientConfiguration as? AppTestClient.AppTestClientConfiguration { if (self.authSchemes != nil) { config.authSchemes = self.authSchemes } diff --git a/Sources/Services/AWSAppTest/Tests/AWSAppTestTests/EndpointResolverTest.swift b/Sources/Services/AWSAppTest/Tests/AWSAppTestTests/EndpointResolverTest.swift new file mode 100644 index 00000000000..dba27e8ddba --- /dev/null +++ b/Sources/Services/AWSAppTest/Tests/AWSAppTestTests/EndpointResolverTest.swift @@ -0,0 +1,509 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +@testable import AWSAppTest +import XCTest +import enum ClientRuntime.EndpointError +import struct AwsCommonRuntimeKit.CommonRuntimeKit +import struct SmithyHTTPAPI.Endpoint +import struct SmithyHTTPAPI.Headers + +class EndpointResolverTest: XCTestCase { + + override class func setUp() { + AwsCommonRuntimeKit.CommonRuntimeKit.initialize() + } + + /// For region us-east-1 with FIPS enabled and DualStack enabled + func testResolve1() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://apptest-fips.us-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-east-1 with FIPS enabled and DualStack disabled + func testResolve2() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://apptest-fips.us-east-1.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-east-1 with FIPS disabled and DualStack enabled + func testResolve3() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://apptest.us-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-east-1 with FIPS disabled and DualStack disabled + func testResolve4() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://apptest.us-east-1.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-north-1 with FIPS enabled and DualStack enabled + func testResolve5() throws { + let endpointParams = EndpointParams( + region: "cn-north-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://apptest-fips.cn-north-1.api.amazonwebservices.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-north-1 with FIPS enabled and DualStack disabled + func testResolve6() throws { + let endpointParams = EndpointParams( + region: "cn-north-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://apptest-fips.cn-north-1.amazonaws.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-north-1 with FIPS disabled and DualStack enabled + func testResolve7() throws { + let endpointParams = EndpointParams( + region: "cn-north-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://apptest.cn-north-1.api.amazonwebservices.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-north-1 with FIPS disabled and DualStack disabled + func testResolve8() throws { + let endpointParams = EndpointParams( + region: "cn-north-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://apptest.cn-north-1.amazonaws.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-gov-east-1 with FIPS enabled and DualStack enabled + func testResolve9() throws { + let endpointParams = EndpointParams( + region: "us-gov-east-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://apptest-fips.us-gov-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-gov-east-1 with FIPS enabled and DualStack disabled + func testResolve10() throws { + let endpointParams = EndpointParams( + region: "us-gov-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://apptest-fips.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-gov-east-1 with FIPS disabled and DualStack enabled + func testResolve11() throws { + let endpointParams = EndpointParams( + region: "us-gov-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://apptest.us-gov-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-gov-east-1 with FIPS disabled and DualStack disabled + func testResolve12() throws { + let endpointParams = EndpointParams( + region: "us-gov-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://apptest.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-iso-east-1 with FIPS enabled and DualStack enabled + func testResolve13() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case ClientRuntime.EndpointError.unresolved(let message): + XCTAssertEqual("FIPS and DualStack are enabled, but this partition does not support one or both", message) + default: + XCTFail() + } + } + } + + /// For region us-iso-east-1 with FIPS enabled and DualStack disabled + func testResolve14() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://apptest-fips.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-iso-east-1 with FIPS disabled and DualStack enabled + func testResolve15() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case ClientRuntime.EndpointError.unresolved(let message): + XCTAssertEqual("DualStack is enabled but this partition does not support DualStack", message) + default: + XCTFail() + } + } + } + + /// For region us-iso-east-1 with FIPS disabled and DualStack disabled + func testResolve16() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://apptest.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-isob-east-1 with FIPS enabled and DualStack enabled + func testResolve17() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case ClientRuntime.EndpointError.unresolved(let message): + XCTAssertEqual("FIPS and DualStack are enabled, but this partition does not support one or both", message) + default: + XCTFail() + } + } + } + + /// For region us-isob-east-1 with FIPS enabled and DualStack disabled + func testResolve18() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://apptest-fips.us-isob-east-1.sc2s.sgov.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-isob-east-1 with FIPS disabled and DualStack enabled + func testResolve19() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case ClientRuntime.EndpointError.unresolved(let message): + XCTAssertEqual("DualStack is enabled but this partition does not support DualStack", message) + default: + XCTFail() + } + } + } + + /// For region us-isob-east-1 with FIPS disabled and DualStack disabled + func testResolve20() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://apptest.us-isob-east-1.sc2s.sgov.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For custom endpoint with region set and fips disabled and dualstack disabled + func testResolve21() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + region: "us-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://example.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For custom endpoint with region not set and fips disabled and dualstack disabled + func testResolve22() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://example.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For custom endpoint with fips enabled and dualstack disabled + func testResolve23() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + region: "us-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case ClientRuntime.EndpointError.unresolved(let message): + XCTAssertEqual("Invalid Configuration: FIPS and custom endpoint are not supported", message) + default: + XCTFail() + } + } + } + + /// For custom endpoint with fips disabled and dualstack enabled + func testResolve24() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + region: "us-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case ClientRuntime.EndpointError.unresolved(let message): + XCTAssertEqual("Invalid Configuration: Dualstack and custom endpoint are not supported", message) + default: + XCTFail() + } + } + } + + /// Missing region + func testResolve25() throws { + let endpointParams = EndpointParams( + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case ClientRuntime.EndpointError.unresolved(let message): + XCTAssertEqual("Invalid Configuration: Missing Region", message) + default: + XCTFail() + } + } + } + +} diff --git a/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/ApplicationSignalsClient.swift b/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/ApplicationSignalsClient.swift new file mode 100644 index 00000000000..5d5dc4b8618 --- /dev/null +++ b/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/ApplicationSignalsClient.swift @@ -0,0 +1,928 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import Foundation +import class AWSClientRuntime.AWSClientConfigDefaultsProvider +import class AWSClientRuntime.DefaultAWSClientPlugin +import class ClientRuntime.ClientBuilder +import class ClientRuntime.DefaultClientPlugin +import class ClientRuntime.HttpClientConfiguration +import class ClientRuntime.SdkHttpClient +import class Smithy.ContextBuilder +import class SmithyJSON.Writer +import enum AWSClientRuntime.AWSRetryErrorInfoProvider +import enum AWSClientRuntime.AWSRetryMode +import enum ClientRuntime.ClientLogMode +import enum ClientRuntime.DefaultTelemetry +import protocol AWSClientRuntime.AWSDefaultClientConfiguration +import protocol AWSClientRuntime.AWSRegionClientConfiguration +import protocol ClientRuntime.Client +import protocol ClientRuntime.DefaultClientConfiguration +import protocol ClientRuntime.DefaultHttpClientConfiguration +import protocol ClientRuntime.IdempotencyTokenGenerator +import protocol ClientRuntime.TelemetryProvider +import protocol Smithy.LogAgent +import protocol SmithyHTTPAPI.HTTPClient +import protocol SmithyHTTPAuthAPI.AuthSchemeResolver +import protocol SmithyIdentity.AWSCredentialIdentityResolver +import struct AWSClientRuntime.AWSUserAgentMetadata +import struct AWSClientRuntime.EndpointResolverMiddleware +import struct AWSClientRuntime.UserAgentMiddleware +import struct AWSSDKHTTPAuth.SigV4AuthScheme +import struct ClientRuntime.AuthSchemeMiddleware +import struct ClientRuntime.BodyMiddleware +import struct ClientRuntime.ContentLengthMiddleware +import struct ClientRuntime.ContentTypeMiddleware +import struct ClientRuntime.DeserializeMiddleware +import struct ClientRuntime.LoggerMiddleware +import struct ClientRuntime.OperationStack +import struct ClientRuntime.QueryItemMiddleware +import struct ClientRuntime.RetryMiddleware +import struct ClientRuntime.SignerMiddleware +import struct ClientRuntime.URLHostMiddleware +import struct ClientRuntime.URLPathMiddleware +import struct SmithyRetries.DefaultRetryStrategy +import struct SmithyRetriesAPI.RetryStrategyOptions +import typealias SmithyHTTPAuthAPI.AuthSchemes + +public class ApplicationSignalsClient: ClientRuntime.Client { + public static let clientName = "ApplicationSignalsClient" + let client: ClientRuntime.SdkHttpClient + let config: ApplicationSignalsClient.ApplicationSignalsClientConfiguration + let serviceName = "Application Signals" + + public required init(config: ApplicationSignalsClient.ApplicationSignalsClientConfiguration) { + client = ClientRuntime.SdkHttpClient(engine: config.httpClientEngine, config: config.httpClientConfiguration) + self.config = config + } + + public convenience init(region: Swift.String) throws { + let config = try ApplicationSignalsClient.ApplicationSignalsClientConfiguration(region: region) + self.init(config: config) + } + + public convenience required init() async throws { + let config = try await ApplicationSignalsClient.ApplicationSignalsClientConfiguration() + self.init(config: config) + } +} + +extension ApplicationSignalsClient { + public class ApplicationSignalsClientConfiguration: AWSClientRuntime.AWSDefaultClientConfiguration & AWSClientRuntime.AWSRegionClientConfiguration & ClientRuntime.DefaultClientConfiguration & ClientRuntime.DefaultHttpClientConfiguration { + public var useFIPS: Swift.Bool? + + public var useDualStack: Swift.Bool? + + public var appID: Swift.String? + + public var awsCredentialIdentityResolver: any SmithyIdentity.AWSCredentialIdentityResolver + + public var awsRetryMode: AWSClientRuntime.AWSRetryMode + + public var region: Swift.String? + + public var signingRegion: Swift.String? + + public var endpointResolver: EndpointResolver + + public var telemetryProvider: ClientRuntime.TelemetryProvider + + public var retryStrategyOptions: SmithyRetriesAPI.RetryStrategyOptions + + public var clientLogMode: ClientRuntime.ClientLogMode + + public var endpoint: Swift.String? + + public var idempotencyTokenGenerator: ClientRuntime.IdempotencyTokenGenerator + + public var httpClientEngine: SmithyHTTPAPI.HTTPClient + + public var httpClientConfiguration: ClientRuntime.HttpClientConfiguration + + public var authSchemes: SmithyHTTPAuthAPI.AuthSchemes? + + public var authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver + + internal let logger: Smithy.LogAgent + + private init(_ useFIPS: Swift.Bool?, _ useDualStack: Swift.Bool?, _ appID: Swift.String?, _ awsCredentialIdentityResolver: any SmithyIdentity.AWSCredentialIdentityResolver, _ awsRetryMode: AWSClientRuntime.AWSRetryMode, _ region: Swift.String?, _ signingRegion: Swift.String?, _ endpointResolver: EndpointResolver, _ telemetryProvider: ClientRuntime.TelemetryProvider, _ retryStrategyOptions: SmithyRetriesAPI.RetryStrategyOptions, _ clientLogMode: ClientRuntime.ClientLogMode, _ endpoint: Swift.String?, _ idempotencyTokenGenerator: ClientRuntime.IdempotencyTokenGenerator, _ httpClientEngine: SmithyHTTPAPI.HTTPClient, _ httpClientConfiguration: ClientRuntime.HttpClientConfiguration, _ authSchemes: SmithyHTTPAuthAPI.AuthSchemes?, _ authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver) { + self.useFIPS = useFIPS + self.useDualStack = useDualStack + self.appID = appID + self.awsCredentialIdentityResolver = awsCredentialIdentityResolver + self.awsRetryMode = awsRetryMode + self.region = region + self.signingRegion = signingRegion + self.endpointResolver = endpointResolver + self.telemetryProvider = telemetryProvider + self.retryStrategyOptions = retryStrategyOptions + self.clientLogMode = clientLogMode + self.endpoint = endpoint + self.idempotencyTokenGenerator = idempotencyTokenGenerator + self.httpClientEngine = httpClientEngine + self.httpClientConfiguration = httpClientConfiguration + self.authSchemes = authSchemes + self.authSchemeResolver = authSchemeResolver + self.logger = telemetryProvider.loggerProvider.getLogger(name: ApplicationSignalsClient.clientName) + } + + public convenience init(useFIPS: Swift.Bool? = nil, useDualStack: Swift.Bool? = nil, appID: Swift.String? = nil, awsCredentialIdentityResolver: (any SmithyIdentity.AWSCredentialIdentityResolver)? = nil, awsRetryMode: AWSClientRuntime.AWSRetryMode? = nil, region: Swift.String? = nil, signingRegion: Swift.String? = nil, endpointResolver: EndpointResolver? = nil, telemetryProvider: ClientRuntime.TelemetryProvider? = nil, retryStrategyOptions: SmithyRetriesAPI.RetryStrategyOptions? = nil, clientLogMode: ClientRuntime.ClientLogMode? = nil, endpoint: Swift.String? = nil, idempotencyTokenGenerator: ClientRuntime.IdempotencyTokenGenerator? = nil, httpClientEngine: SmithyHTTPAPI.HTTPClient? = nil, httpClientConfiguration: ClientRuntime.HttpClientConfiguration? = nil, authSchemes: SmithyHTTPAuthAPI.AuthSchemes? = nil, authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver? = nil) throws { + self.init(useFIPS, useDualStack, try appID ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.appID(), try awsCredentialIdentityResolver ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.awsCredentialIdentityResolver(awsCredentialIdentityResolver), try awsRetryMode ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.retryMode(), region, signingRegion, try endpointResolver ?? DefaultEndpointResolver(), telemetryProvider ?? ClientRuntime.DefaultTelemetry.provider, try retryStrategyOptions ?? AWSClientConfigDefaultsProvider.retryStrategyOptions(), clientLogMode ?? AWSClientConfigDefaultsProvider.clientLogMode, endpoint, idempotencyTokenGenerator ?? AWSClientConfigDefaultsProvider.idempotencyTokenGenerator, httpClientEngine ?? AWSClientConfigDefaultsProvider.httpClientEngine, httpClientConfiguration ?? AWSClientConfigDefaultsProvider.httpClientConfiguration, authSchemes ?? [AWSSDKHTTPAuth.SigV4AuthScheme()], authSchemeResolver ?? DefaultApplicationSignalsAuthSchemeResolver()) + } + + public convenience init(useFIPS: Swift.Bool? = nil, useDualStack: Swift.Bool? = nil, appID: Swift.String? = nil, awsCredentialIdentityResolver: (any SmithyIdentity.AWSCredentialIdentityResolver)? = nil, awsRetryMode: AWSClientRuntime.AWSRetryMode? = nil, region: Swift.String? = nil, signingRegion: Swift.String? = nil, endpointResolver: EndpointResolver? = nil, telemetryProvider: ClientRuntime.TelemetryProvider? = nil, retryStrategyOptions: SmithyRetriesAPI.RetryStrategyOptions? = nil, clientLogMode: ClientRuntime.ClientLogMode? = nil, endpoint: Swift.String? = nil, idempotencyTokenGenerator: ClientRuntime.IdempotencyTokenGenerator? = nil, httpClientEngine: SmithyHTTPAPI.HTTPClient? = nil, httpClientConfiguration: ClientRuntime.HttpClientConfiguration? = nil, authSchemes: SmithyHTTPAuthAPI.AuthSchemes? = nil, authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver? = nil) async throws { + self.init(useFIPS, useDualStack, try appID ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.appID(), try awsCredentialIdentityResolver ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.awsCredentialIdentityResolver(awsCredentialIdentityResolver), try awsRetryMode ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.retryMode(), try await AWSClientRuntime.AWSClientConfigDefaultsProvider.region(region), try await AWSClientRuntime.AWSClientConfigDefaultsProvider.region(region), try endpointResolver ?? DefaultEndpointResolver(), telemetryProvider ?? ClientRuntime.DefaultTelemetry.provider, try retryStrategyOptions ?? AWSClientConfigDefaultsProvider.retryStrategyOptions(), clientLogMode ?? AWSClientConfigDefaultsProvider.clientLogMode, endpoint, idempotencyTokenGenerator ?? AWSClientConfigDefaultsProvider.idempotencyTokenGenerator, httpClientEngine ?? AWSClientConfigDefaultsProvider.httpClientEngine, httpClientConfiguration ?? AWSClientConfigDefaultsProvider.httpClientConfiguration, authSchemes ?? [AWSSDKHTTPAuth.SigV4AuthScheme()], authSchemeResolver ?? DefaultApplicationSignalsAuthSchemeResolver()) + } + + public convenience required init() async throws { + try await self.init(useFIPS: nil, useDualStack: nil, appID: nil, awsCredentialIdentityResolver: nil, awsRetryMode: nil, region: nil, signingRegion: nil, endpointResolver: nil, telemetryProvider: nil, retryStrategyOptions: nil, clientLogMode: nil, endpoint: nil, idempotencyTokenGenerator: nil, httpClientEngine: nil, httpClientConfiguration: nil, authSchemes: nil, authSchemeResolver: nil) + } + + public convenience init(region: String) throws { + self.init(nil, nil, try AWSClientRuntime.AWSClientConfigDefaultsProvider.appID(), try AWSClientConfigDefaultsProvider.awsCredentialIdentityResolver(), try AWSClientRuntime.AWSClientConfigDefaultsProvider.retryMode(), region, region, try DefaultEndpointResolver(), ClientRuntime.DefaultTelemetry.provider, try AWSClientConfigDefaultsProvider.retryStrategyOptions(), AWSClientConfigDefaultsProvider.clientLogMode, nil, AWSClientConfigDefaultsProvider.idempotencyTokenGenerator, AWSClientConfigDefaultsProvider.httpClientEngine, AWSClientConfigDefaultsProvider.httpClientConfiguration, [AWSSDKHTTPAuth.SigV4AuthScheme()], DefaultApplicationSignalsAuthSchemeResolver()) + } + + public var partitionID: String? { + return "\(ApplicationSignalsClient.clientName) - \(region ?? "")" + } + } + + public static func builder() -> ClientRuntime.ClientBuilder { + return ClientRuntime.ClientBuilder(defaultPlugins: [ + ClientRuntime.DefaultClientPlugin(), + AWSClientRuntime.DefaultAWSClientPlugin(clientName: self.clientName), + DefaultAWSAuthSchemePlugin() + ]) + } +} + +extension ApplicationSignalsClient { + /// Performs the `BatchGetServiceLevelObjectiveBudgetReport` operation on the `ApplicationSignals` service. + /// + /// Use this operation to retrieve one or more service level objective (SLO) budget reports. An error budget is the amount of time in unhealthy periods that your service can accumulate during an interval before your overall SLO budget health is breached and the SLO is considered to be unmet. For example, an SLO with a threshold of 99.95% and a monthly interval translates to an error budget of 21.9 minutes of downtime in a 30-day month. Budget reports include a health indicator, the attainment value, and remaining budget. For more information about SLO error budgets, see [ SLO concepts](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-ServiceLevelObjectives.html#CloudWatch-ServiceLevelObjectives-concepts). + /// + /// - Parameter BatchGetServiceLevelObjectiveBudgetReportInput : [no documentation found] + /// + /// - Returns: `BatchGetServiceLevelObjectiveBudgetReportOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `ThrottlingException` : The request was throttled because of quota limits. + /// - `ValidationException` : The resource is not valid. + public func batchGetServiceLevelObjectiveBudgetReport(input: BatchGetServiceLevelObjectiveBudgetReportInput) async throws -> BatchGetServiceLevelObjectiveBudgetReportOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "batchGetServiceLevelObjectiveBudgetReport") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "application-signals") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "batchGetServiceLevelObjectiveBudgetReport") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(BatchGetServiceLevelObjectiveBudgetReportInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: BatchGetServiceLevelObjectiveBudgetReportInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(BatchGetServiceLevelObjectiveBudgetReportOutput.httpOutput(from:), BatchGetServiceLevelObjectiveBudgetReportOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `CreateServiceLevelObjective` operation on the `ApplicationSignals` service. + /// + /// Creates a service level objective (SLO), which can help you ensure that your critical business operations are meeting customer expectations. Use SLOs to set and track specific target levels for the reliability and availability of your applications and services. SLOs use service level indicators (SLIs) to calculate whether the application is performing at the level that you want. Create an SLO to set a target for a service or operation’s availability or latency. CloudWatch measures this target frequently you can find whether it has been breached. When you create an SLO, you set an attainment goal for it. An attainment goal is the ratio of good periods that meet the threshold requirements to the total periods within the interval. For example, an attainment goal of 99.9% means that within your interval, you are targeting 99.9% of the periods to be in healthy state. After you have created an SLO, you can retrieve error budget reports for it. An error budget is the number of periods or amount of time that your service can accumulate during an interval before your overall SLO budget health is breached and the SLO is considered to be unmet. for example, an SLO with a threshold that 99.95% of requests must be completed under 2000ms every month translates to an error budget of 21.9 minutes of downtime per month. When you call this operation, Application Signals creates the AWSServiceRoleForCloudWatchApplicationSignals service-linked role, if it doesn't already exist in your account. This service- linked role has the following permissions: + /// + /// * xray:GetServiceGraph + /// + /// * logs:StartQuery + /// + /// * logs:GetQueryResults + /// + /// * cloudwatch:GetMetricData + /// + /// * cloudwatch:ListMetrics + /// + /// * tag:GetResources + /// + /// * autoscaling:DescribeAutoScalingGroups + /// + /// + /// You can easily set SLO targets for your applications that are discovered by Application Signals, using critical metrics such as latency and availability. You can also set SLOs against any CloudWatch metric or math expression that produces a time series. For more information about SLOs, see [ Service level objectives (SLOs)](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-ServiceLevelObjectives.html). + /// + /// - Parameter CreateServiceLevelObjectiveInput : [no documentation found] + /// + /// - Returns: `CreateServiceLevelObjectiveOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You don't have sufficient permissions to perform this action. + /// - `ConflictException` : This operation attempted to create a resource that already exists. + /// - `ServiceQuotaExceededException` : This request exceeds a service quota. + /// - `ThrottlingException` : The request was throttled because of quota limits. + /// - `ValidationException` : The resource is not valid. + public func createServiceLevelObjective(input: CreateServiceLevelObjectiveInput) async throws -> CreateServiceLevelObjectiveOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createServiceLevelObjective") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "application-signals") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "createServiceLevelObjective") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(CreateServiceLevelObjectiveInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: CreateServiceLevelObjectiveInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(CreateServiceLevelObjectiveOutput.httpOutput(from:), CreateServiceLevelObjectiveOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `DeleteServiceLevelObjective` operation on the `ApplicationSignals` service. + /// + /// Deletes the specified service level objective. + /// + /// - Parameter DeleteServiceLevelObjectiveInput : [no documentation found] + /// + /// - Returns: `DeleteServiceLevelObjectiveOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `ResourceNotFoundException` : Resource not found. + /// - `ThrottlingException` : The request was throttled because of quota limits. + /// - `ValidationException` : The resource is not valid. + public func deleteServiceLevelObjective(input: DeleteServiceLevelObjectiveInput) async throws -> DeleteServiceLevelObjectiveOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteServiceLevelObjective") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "application-signals") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteServiceLevelObjective") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(DeleteServiceLevelObjectiveInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(DeleteServiceLevelObjectiveOutput.httpOutput(from:), DeleteServiceLevelObjectiveOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `GetService` operation on the `ApplicationSignals` service. + /// + /// Returns information about a service discovered by Application Signals. + /// + /// - Parameter GetServiceInput : [no documentation found] + /// + /// - Returns: `GetServiceOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `ThrottlingException` : The request was throttled because of quota limits. + /// - `ValidationException` : The resource is not valid. + public func getService(input: GetServiceInput) async throws -> GetServiceOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "getService") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "application-signals") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getService") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GetServiceInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(GetServiceInput.queryItemProvider(_:))) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: GetServiceInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GetServiceOutput.httpOutput(from:), GetServiceOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `GetServiceLevelObjective` operation on the `ApplicationSignals` service. + /// + /// Returns information about one SLO created in the account. + /// + /// - Parameter GetServiceLevelObjectiveInput : [no documentation found] + /// + /// - Returns: `GetServiceLevelObjectiveOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `ResourceNotFoundException` : Resource not found. + /// - `ThrottlingException` : The request was throttled because of quota limits. + /// - `ValidationException` : The resource is not valid. + public func getServiceLevelObjective(input: GetServiceLevelObjectiveInput) async throws -> GetServiceLevelObjectiveOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getServiceLevelObjective") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "application-signals") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getServiceLevelObjective") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GetServiceLevelObjectiveInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GetServiceLevelObjectiveOutput.httpOutput(from:), GetServiceLevelObjectiveOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `ListServiceDependencies` operation on the `ApplicationSignals` service. + /// + /// Returns a list of service dependencies of the service that you specify. A dependency is an infrastructure component that an operation of this service connects with. Dependencies can include Amazon Web Services services, Amazon Web Services resources, and third-party services. + /// + /// - Parameter ListServiceDependenciesInput : [no documentation found] + /// + /// - Returns: `ListServiceDependenciesOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `ThrottlingException` : The request was throttled because of quota limits. + /// - `ValidationException` : The resource is not valid. + public func listServiceDependencies(input: ListServiceDependenciesInput) async throws -> ListServiceDependenciesOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listServiceDependencies") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "application-signals") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listServiceDependencies") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListServiceDependenciesInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListServiceDependenciesInput.queryItemProvider(_:))) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: ListServiceDependenciesInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListServiceDependenciesOutput.httpOutput(from:), ListServiceDependenciesOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `ListServiceDependents` operation on the `ApplicationSignals` service. + /// + /// Returns the list of dependents that invoked the specified service during the provided time range. Dependents include other services, CloudWatch Synthetics canaries, and clients that are instrumented with CloudWatch RUM app monitors. + /// + /// - Parameter ListServiceDependentsInput : [no documentation found] + /// + /// - Returns: `ListServiceDependentsOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `ThrottlingException` : The request was throttled because of quota limits. + /// - `ValidationException` : The resource is not valid. + public func listServiceDependents(input: ListServiceDependentsInput) async throws -> ListServiceDependentsOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listServiceDependents") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "application-signals") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listServiceDependents") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListServiceDependentsInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListServiceDependentsInput.queryItemProvider(_:))) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: ListServiceDependentsInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListServiceDependentsOutput.httpOutput(from:), ListServiceDependentsOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `ListServiceLevelObjectives` operation on the `ApplicationSignals` service. + /// + /// Returns a list of SLOs created in this account. + /// + /// - Parameter ListServiceLevelObjectivesInput : [no documentation found] + /// + /// - Returns: `ListServiceLevelObjectivesOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `ThrottlingException` : The request was throttled because of quota limits. + /// - `ValidationException` : The resource is not valid. + public func listServiceLevelObjectives(input: ListServiceLevelObjectivesInput) async throws -> ListServiceLevelObjectivesOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listServiceLevelObjectives") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "application-signals") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listServiceLevelObjectives") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListServiceLevelObjectivesInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListServiceLevelObjectivesInput.queryItemProvider(_:))) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: ListServiceLevelObjectivesInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListServiceLevelObjectivesOutput.httpOutput(from:), ListServiceLevelObjectivesOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `ListServiceOperations` operation on the `ApplicationSignals` service. + /// + /// Returns a list of the operations of this service that have been discovered by Application Signals. Only the operations that were invoked during the specified time range are returned. + /// + /// - Parameter ListServiceOperationsInput : [no documentation found] + /// + /// - Returns: `ListServiceOperationsOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `ThrottlingException` : The request was throttled because of quota limits. + /// - `ValidationException` : The resource is not valid. + public func listServiceOperations(input: ListServiceOperationsInput) async throws -> ListServiceOperationsOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listServiceOperations") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "application-signals") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listServiceOperations") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListServiceOperationsInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListServiceOperationsInput.queryItemProvider(_:))) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: ListServiceOperationsInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListServiceOperationsOutput.httpOutput(from:), ListServiceOperationsOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `ListServices` operation on the `ApplicationSignals` service. + /// + /// Returns a list of services that have been discovered by Application Signals. A service represents a minimum logical and transactional unit that completes a business function. Services are discovered through Application Signals instrumentation. + /// + /// - Parameter ListServicesInput : [no documentation found] + /// + /// - Returns: `ListServicesOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `ThrottlingException` : The request was throttled because of quota limits. + /// - `ValidationException` : The resource is not valid. + public func listServices(input: ListServicesInput) async throws -> ListServicesOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listServices") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "application-signals") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listServices") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListServicesInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListServicesInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListServicesOutput.httpOutput(from:), ListServicesOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `ListTagsForResource` operation on the `ApplicationSignals` service. + /// + /// Displays the tags associated with a CloudWatch resource. Tags can be assigned to service level objectives. + /// + /// - Parameter ListTagsForResourceInput : [no documentation found] + /// + /// - Returns: `ListTagsForResourceOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `ResourceNotFoundException` : Resource not found. + /// - `ThrottlingException` : The request was throttled because of quota limits. + public func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listTagsForResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "application-signals") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listTagsForResource") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListTagsForResourceInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListTagsForResourceInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListTagsForResourceOutput.httpOutput(from:), ListTagsForResourceOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `StartDiscovery` operation on the `ApplicationSignals` service. + /// + /// Enables this Amazon Web Services account to be able to use CloudWatch Application Signals by creating the AWSServiceRoleForCloudWatchApplicationSignals service-linked role. This service- linked role has the following permissions: + /// + /// * xray:GetServiceGraph + /// + /// * logs:StartQuery + /// + /// * logs:GetQueryResults + /// + /// * cloudwatch:GetMetricData + /// + /// * cloudwatch:ListMetrics + /// + /// * tag:GetResources + /// + /// * autoscaling:DescribeAutoScalingGroups + /// + /// + /// After completing this step, you still need to instrument your Java and Python applications to send data to Application Signals. For more information, see [ Enabling Application Signals](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Signals-Enable.html). + /// + /// - Parameter StartDiscoveryInput : [no documentation found] + /// + /// - Returns: `StartDiscoveryOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You don't have sufficient permissions to perform this action. + /// - `ThrottlingException` : The request was throttled because of quota limits. + /// - `ValidationException` : The resource is not valid. + public func startDiscovery(input: StartDiscoveryInput) async throws -> StartDiscoveryOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "startDiscovery") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "application-signals") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "startDiscovery") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(StartDiscoveryInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(StartDiscoveryOutput.httpOutput(from:), StartDiscoveryOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `TagResource` operation on the `ApplicationSignals` service. + /// + /// Assigns one or more tags (key-value pairs) to the specified CloudWatch resource, such as a service level objective. Tags can help you organize and categorize your resources. You can also use them to scope user permissions by granting a user permission to access or change only resources with certain tag values. Tags don't have any semantic meaning to Amazon Web Services and are interpreted strictly as strings of characters. You can use the TagResource action with an alarm that already has tags. If you specify a new tag key for the alarm, this tag is appended to the list of tags associated with the alarm. If you specify a tag key that is already associated with the alarm, the new tag value that you specify replaces the previous value for that tag. You can associate as many as 50 tags with a CloudWatch resource. + /// + /// - Parameter TagResourceInput : [no documentation found] + /// + /// - Returns: `TagResourceOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `ResourceNotFoundException` : Resource not found. + /// - `ServiceQuotaExceededException` : This request exceeds a service quota. + /// - `ThrottlingException` : The request was throttled because of quota limits. + public func tagResource(input: TagResourceInput) async throws -> TagResourceOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "tagResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "application-signals") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "tagResource") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(TagResourceInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: TagResourceInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(TagResourceOutput.httpOutput(from:), TagResourceOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `UntagResource` operation on the `ApplicationSignals` service. + /// + /// Removes one or more tags from the specified resource. + /// + /// - Parameter UntagResourceInput : [no documentation found] + /// + /// - Returns: `UntagResourceOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `ResourceNotFoundException` : Resource not found. + /// - `ThrottlingException` : The request was throttled because of quota limits. + public func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "untagResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "application-signals") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "untagResource") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(UntagResourceInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: UntagResourceInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(UntagResourceOutput.httpOutput(from:), UntagResourceOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `UpdateServiceLevelObjective` operation on the `ApplicationSignals` service. + /// + /// Updates an existing service level objective (SLO). If you omit parameters, the previous values of those parameters are retained. + /// + /// - Parameter UpdateServiceLevelObjectiveInput : [no documentation found] + /// + /// - Returns: `UpdateServiceLevelObjectiveOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `ResourceNotFoundException` : Resource not found. + /// - `ThrottlingException` : The request was throttled because of quota limits. + /// - `ValidationException` : The resource is not valid. + public func updateServiceLevelObjective(input: UpdateServiceLevelObjectiveInput) async throws -> UpdateServiceLevelObjectiveOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .patch) + .withServiceName(value: serviceName) + .withOperation(value: "updateServiceLevelObjective") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "application-signals") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "updateServiceLevelObjective") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(UpdateServiceLevelObjectiveInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: UpdateServiceLevelObjectiveInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(UpdateServiceLevelObjectiveOutput.httpOutput(from:), UpdateServiceLevelObjectiveOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + +} diff --git a/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/AuthSchemeResolver.swift b/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/AuthSchemeResolver.swift new file mode 100644 index 00000000000..907b3c7ab1f --- /dev/null +++ b/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/AuthSchemeResolver.swift @@ -0,0 +1,49 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import class Smithy.Context +import enum Smithy.ClientError +import enum SmithyHTTPAuthAPI.SigningPropertyKeys +import protocol SmithyHTTPAuthAPI.AuthSchemeResolver +import protocol SmithyHTTPAuthAPI.AuthSchemeResolverParameters +import struct SmithyHTTPAuthAPI.AuthOption + +public struct ApplicationSignalsAuthSchemeResolverParameters: SmithyHTTPAuthAPI.AuthSchemeResolverParameters { + public let operation: Swift.String + // Region is used for SigV4 auth scheme + public let region: Swift.String? +} + +public protocol ApplicationSignalsAuthSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver { + // Intentionally empty. + // This is the parent protocol that all auth scheme resolver implementations of + // the service ApplicationSignals must conform to. +} + +public struct DefaultApplicationSignalsAuthSchemeResolver: ApplicationSignalsAuthSchemeResolver { + + public func resolveAuthScheme(params: SmithyHTTPAuthAPI.AuthSchemeResolverParameters) throws -> [SmithyHTTPAuthAPI.AuthOption] { + var validAuthOptions = [SmithyHTTPAuthAPI.AuthOption]() + guard let serviceParams = params as? ApplicationSignalsAuthSchemeResolverParameters else { + throw Smithy.ClientError.authError("Service specific auth scheme parameters type must be passed to auth scheme resolver.") + } + switch serviceParams.operation { + default: + var sigV4Option = SmithyHTTPAuthAPI.AuthOption(schemeID: "aws.auth#sigv4") + sigV4Option.signingProperties.set(key: SmithyHTTPAuthAPI.SigningPropertyKeys.signingName, value: "application-signals") + guard let region = serviceParams.region else { + throw Smithy.ClientError.authError("Missing region in auth scheme parameters for SigV4 auth scheme.") + } + sigV4Option.signingProperties.set(key: SmithyHTTPAuthAPI.SigningPropertyKeys.signingRegion, value: region) + validAuthOptions.append(sigV4Option) + } + return validAuthOptions + } + + public func constructParameters(context: Smithy.Context) throws -> SmithyHTTPAuthAPI.AuthSchemeResolverParameters { + guard let opName = context.getOperation() else { + throw Smithy.ClientError.dataNotFound("Operation name not configured in middleware context for auth scheme resolver params construction.") + } + let opRegion = context.getRegion() + return ApplicationSignalsAuthSchemeResolverParameters(operation: opName, region: opRegion) + } +} diff --git a/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/Endpoints.swift b/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/Endpoints.swift new file mode 100644 index 00000000000..07f65c948ea --- /dev/null +++ b/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/Endpoints.swift @@ -0,0 +1,56 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import class ClientRuntime.EndpointsRequestContext +import let AWSClientRuntime.awsPartitionJSON +import protocol ClientRuntime.EndpointsRequestContextProviding +import struct ClientRuntime.DefaultEndpointResolver +import struct SmithyHTTPAPI.Endpoint + +public struct EndpointParams { + /// Override the endpoint used to send this request + public let endpoint: Swift.String? + /// The AWS region used to dispatch the request. + public let region: Swift.String? + /// When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error. + public let useFIPS: Swift.Bool + + public init( + endpoint: Swift.String? = nil, + region: Swift.String? = nil, + useFIPS: Swift.Bool = false + ) + { + self.endpoint = endpoint + self.region = region + self.useFIPS = useFIPS + } +} + +extension EndpointParams: ClientRuntime.EndpointsRequestContextProviding { + + public var context: ClientRuntime.EndpointsRequestContext { + get throws { + let context = try ClientRuntime.EndpointsRequestContext() + try context.add(name: "Endpoint", value: self.endpoint) + try context.add(name: "Region", value: self.region) + try context.add(name: "UseFIPS", value: self.useFIPS) + return context + } + } +} + +public protocol EndpointResolver { + func resolve(params: EndpointParams) throws -> SmithyHTTPAPI.Endpoint +} + +typealias DefaultEndpointResolver = ClientRuntime.DefaultEndpointResolver + +extension DefaultEndpointResolver { + private static let ruleSet = "{\"version\":\"1.0\",\"parameters\":{\"UseFIPS\":{\"builtIn\":\"AWS::UseFIPS\",\"required\":true,\"default\":false,\"documentation\":\"When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.\",\"type\":\"Boolean\"},\"Endpoint\":{\"builtIn\":\"SDK::Endpoint\",\"required\":false,\"documentation\":\"Override the endpoint used to send this request\",\"type\":\"String\"},\"Region\":{\"builtIn\":\"AWS::Region\",\"required\":false,\"documentation\":\"The AWS region used to dispatch the request.\",\"type\":\"String\"}},\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"endpoint\":{\"url\":{\"ref\":\"Endpoint\"},\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://application-signals-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://application-signals.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}],\"type\":\"tree\"}]}" + + init() throws { + try self.init(partitions: AWSClientRuntime.awsPartitionJSON, ruleSet: Self.ruleSet) + } +} + +extension DefaultEndpointResolver: EndpointResolver {} diff --git a/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/Models.swift b/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/Models.swift new file mode 100644 index 00000000000..334bdca2449 --- /dev/null +++ b/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/Models.swift @@ -0,0 +1,3072 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import Foundation +import class SmithyHTTPAPI.HttpResponse +import class SmithyJSON.Reader +import class SmithyJSON.Writer +import enum ClientRuntime.ErrorFault +import enum Smithy.ClientError +import enum SmithyReadWrite.ReaderError +import enum SmithyReadWrite.ReadingClosures +import enum SmithyReadWrite.WritingClosures +import func SmithyReadWrite.mapReadingClosure +import protocol AWSClientRuntime.AWSServiceError +import protocol ClientRuntime.HTTPError +import protocol ClientRuntime.ModeledError +import struct AWSClientRuntime.RestJSONError +@_spi(UnknownAWSHTTPServiceError) import struct AWSClientRuntime.UnknownAWSHTTPServiceError +import struct Smithy.URIQueryItem +import struct SmithyTimestamps.TimestampFormatter + +/// You don't have sufficient permissions to perform this action. +public struct AccessDeniedException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "AccessDenied" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +/// The request was throttled because of quota limits. +public struct ThrottlingException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ThrottlingException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +/// The resource is not valid. +public struct ValidationException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ValidationError" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +public struct BatchGetServiceLevelObjectiveBudgetReportInput { + /// An array containing the IDs of the service level objectives that you want to include in the report. + /// This member is required. + public var sloIds: [Swift.String]? + /// The date and time that you want the report to be for. It is expressed as the number of milliseconds since Jan 1, 1970 00:00:00 UTC. + /// This member is required. + public var timestamp: Foundation.Date? + + public init( + sloIds: [Swift.String]? = nil, + timestamp: Foundation.Date? = nil + ) + { + self.sloIds = sloIds + self.timestamp = timestamp + } +} + +extension ApplicationSignalsClientTypes { + /// A structure containing information about one error that occurred during a [BatchGetServiceLevelObjectiveBudgetReport](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_BatchGetServiceLevelObjectiveBudgetReport.html) operation. + public struct ServiceLevelObjectiveBudgetReportError { + /// The ARN of the SLO that this error is related to. + /// This member is required. + public var arn: Swift.String? + /// The error code for this error. + /// This member is required. + public var errorCode: Swift.String? + /// The message for this error. + /// This member is required. + public var errorMessage: Swift.String? + /// The name of the SLO that this error is related to. + /// This member is required. + public var name: Swift.String? + + public init( + arn: Swift.String? = nil, + errorCode: Swift.String? = nil, + errorMessage: Swift.String? = nil, + name: Swift.String? = nil + ) + { + self.arn = arn + self.errorCode = errorCode + self.errorMessage = errorMessage + self.name = name + } + } + +} + +extension ApplicationSignalsClientTypes { + + public enum ServiceLevelObjectiveBudgetStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case breached + case insufficientData + case ok + case warning + case sdkUnknown(Swift.String) + + public static var allCases: [ServiceLevelObjectiveBudgetStatus] { + return [ + .breached, + .insufficientData, + .ok, + .warning + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .breached: return "BREACHED" + case .insufficientData: return "INSUFFICIENT_DATA" + case .ok: return "OK" + case .warning: return "WARNING" + case let .sdkUnknown(s): return s + } + } + } +} + +extension ApplicationSignalsClientTypes { + + public enum DurationUnit: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case day + case month + case sdkUnknown(Swift.String) + + public static var allCases: [DurationUnit] { + return [ + .day, + .month + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .day: return "DAY" + case .month: return "MONTH" + case let .sdkUnknown(s): return s + } + } + } +} + +extension ApplicationSignalsClientTypes { + /// If the interval for this service level objective is a calendar interval, this structure contains the interval specifications. + public struct CalendarInterval { + /// Specifies the duration of each calendar interval. For example, if Duration is 1 and DurationUnit is MONTH, each interval is one month, aligned with the calendar. + /// This member is required. + public var duration: Swift.Int? + /// Specifies the calendar interval unit. + /// This member is required. + public var durationUnit: ApplicationSignalsClientTypes.DurationUnit? + /// The date and time when you want the first interval to start. Be sure to choose a time that configures the intervals the way that you want. For example, if you want weekly intervals starting on Mondays at 6 a.m., be sure to specify a start time that is a Monday at 6 a.m. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 As soon as one calendar interval ends, another automatically begins. + /// This member is required. + public var startTime: Foundation.Date? + + public init( + duration: Swift.Int? = nil, + durationUnit: ApplicationSignalsClientTypes.DurationUnit? = nil, + startTime: Foundation.Date? = nil + ) + { + self.duration = duration + self.durationUnit = durationUnit + self.startTime = startTime + } + } + +} + +extension ApplicationSignalsClientTypes { + /// If the interval for this SLO is a rolling interval, this structure contains the interval specifications. + public struct RollingInterval { + /// Specifies the duration of each rolling interval. For example, if Duration is 7 and DurationUnit is DAY, each rolling interval is seven days. + /// This member is required. + public var duration: Swift.Int? + /// Specifies the rolling interval unit. + /// This member is required. + public var durationUnit: ApplicationSignalsClientTypes.DurationUnit? + + public init( + duration: Swift.Int? = nil, + durationUnit: ApplicationSignalsClientTypes.DurationUnit? = nil + ) + { + self.duration = duration + self.durationUnit = durationUnit + } + } + +} + +extension ApplicationSignalsClientTypes { + /// The time period used to evaluate the SLO. It can be either a calendar interval or rolling interval. + public enum Interval { + /// If the interval is a rolling interval, this structure contains the interval specifications. + case rollinginterval(ApplicationSignalsClientTypes.RollingInterval) + /// If the interval is a calendar interval, this structure contains the interval specifications. + case calendarinterval(ApplicationSignalsClientTypes.CalendarInterval) + case sdkUnknown(Swift.String) + } + +} + +extension ApplicationSignalsClientTypes { + /// This structure contains the attributes that determine the goal of an SLO. This includes the time period for evaluation and the attainment threshold. + public struct Goal { + /// The threshold that determines if the goal is being met. An attainment goal is the ratio of good periods that meet the threshold requirements to the total periods within the interval. For example, an attainment goal of 99.9% means that within your interval, you are targeting 99.9% of the periods to be in healthy state. If you omit this parameter, 99 is used to represent 99% as the attainment goal. + public var attainmentGoal: Swift.Double? + /// The time period used to evaluate the SLO. It can be either a calendar interval or rolling interval. If you omit this parameter, a rolling interval of 7 days is used. + public var interval: ApplicationSignalsClientTypes.Interval? + /// The percentage of remaining budget over total budget that you want to get warnings for. If you omit this parameter, the default of 50.0 is used. + public var warningThreshold: Swift.Double? + + public init( + attainmentGoal: Swift.Double? = nil, + interval: ApplicationSignalsClientTypes.Interval? = nil, + warningThreshold: Swift.Double? = nil + ) + { + self.attainmentGoal = attainmentGoal + self.interval = interval + self.warningThreshold = warningThreshold + } + } + +} + +extension ApplicationSignalsClientTypes { + + public enum ServiceLevelIndicatorComparisonOperator: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case greaterThan + case greaterThanOrEqualTo + case lessThan + case lessThanOrEqualTo + case sdkUnknown(Swift.String) + + public static var allCases: [ServiceLevelIndicatorComparisonOperator] { + return [ + .greaterThan, + .greaterThanOrEqualTo, + .lessThan, + .lessThanOrEqualTo + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .greaterThan: return "GreaterThan" + case .greaterThanOrEqualTo: return "GreaterThanOrEqualTo" + case .lessThan: return "LessThan" + case .lessThanOrEqualTo: return "LessThanOrEqualTo" + case let .sdkUnknown(s): return s + } + } + } +} + +extension ApplicationSignalsClientTypes { + /// A dimension is a name/value pair that is part of the identity of a metric. Because dimensions are part of the unique identifier for a metric, whenever you add a unique name/value pair to one of your metrics, you are creating a new variation of that metric. For example, many Amazon EC2 metrics publish InstanceId as a dimension name, and the actual instance ID as the value for that dimension. You can assign up to 30 dimensions to a metric. + public struct Dimension { + /// The name of the dimension. Dimension names must contain only ASCII characters, must include at least one non-whitespace character, and cannot start with a colon (:). ASCII control characters are not supported as part of dimension names. + /// This member is required. + public var name: Swift.String? + /// The value of the dimension. Dimension values must contain only ASCII characters and must include at least one non-whitespace character. ASCII control characters are not supported as part of dimension values. + /// This member is required. + public var value: Swift.String? + + public init( + name: Swift.String? = nil, + value: Swift.String? = nil + ) + { + self.name = name + self.value = value + } + } + +} + +extension ApplicationSignalsClientTypes { + /// This structure defines the metric used for a service level indicator, including the metric name, namespace, and dimensions + public struct Metric { + /// An array of one or more dimensions to use to define the metric that you want to use. For more information, see [Dimensions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension). + public var dimensions: [ApplicationSignalsClientTypes.Dimension]? + /// The name of the metric to use. + public var metricName: Swift.String? + /// The namespace of the metric. For more information, see [Namespaces](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Namespace). + public var namespace: Swift.String? + + public init( + dimensions: [ApplicationSignalsClientTypes.Dimension]? = nil, + metricName: Swift.String? = nil, + namespace: Swift.String? = nil + ) + { + self.dimensions = dimensions + self.metricName = metricName + self.namespace = namespace + } + } + +} + +extension ApplicationSignalsClientTypes { + + public enum StandardUnit: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case bits + case bitsSecond + case bytes + case bytesSecond + case count + case countSecond + case gigabits + case gigabitsSecond + case gigabytes + case gigabytesSecond + case kilobits + case kilobitsSecond + case kilobytes + case kilobytesSecond + case megabits + case megabitsSecond + case megabytes + case megabytesSecond + case microseconds + case milliseconds + case `none` + case percent + case seconds + case terabits + case terabitsSecond + case terabytes + case terabytesSecond + case sdkUnknown(Swift.String) + + public static var allCases: [StandardUnit] { + return [ + .bits, + .bitsSecond, + .bytes, + .bytesSecond, + .count, + .countSecond, + .gigabits, + .gigabitsSecond, + .gigabytes, + .gigabytesSecond, + .kilobits, + .kilobitsSecond, + .kilobytes, + .kilobytesSecond, + .megabits, + .megabitsSecond, + .megabytes, + .megabytesSecond, + .microseconds, + .milliseconds, + .none, + .percent, + .seconds, + .terabits, + .terabitsSecond, + .terabytes, + .terabytesSecond + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .bits: return "Bits" + case .bitsSecond: return "Bits/Second" + case .bytes: return "Bytes" + case .bytesSecond: return "Bytes/Second" + case .count: return "Count" + case .countSecond: return "Count/Second" + case .gigabits: return "Gigabits" + case .gigabitsSecond: return "Gigabits/Second" + case .gigabytes: return "Gigabytes" + case .gigabytesSecond: return "Gigabytes/Second" + case .kilobits: return "Kilobits" + case .kilobitsSecond: return "Kilobits/Second" + case .kilobytes: return "Kilobytes" + case .kilobytesSecond: return "Kilobytes/Second" + case .megabits: return "Megabits" + case .megabitsSecond: return "Megabits/Second" + case .megabytes: return "Megabytes" + case .megabytesSecond: return "Megabytes/Second" + case .microseconds: return "Microseconds" + case .milliseconds: return "Milliseconds" + case .none: return "None" + case .percent: return "Percent" + case .seconds: return "Seconds" + case .terabits: return "Terabits" + case .terabitsSecond: return "Terabits/Second" + case .terabytes: return "Terabytes" + case .terabytesSecond: return "Terabytes/Second" + case let .sdkUnknown(s): return s + } + } + } +} + +extension ApplicationSignalsClientTypes { + /// This structure defines the metric to be used as the service level indicator, along with the statistics, period, and unit. + public struct MetricStat { + /// The metric to use as the service level indicator, including the metric name, namespace, and dimensions. + /// This member is required. + public var metric: ApplicationSignalsClientTypes.Metric? + /// The granularity, in seconds, to be used for the metric. For metrics with regular resolution, a period can be as short as one minute (60 seconds) and must be a multiple of 60. For high-resolution metrics that are collected at intervals of less than one minute, the period can be 1, 5, 10, 30, 60, or any multiple of 60. High-resolution metrics are those metrics stored by a PutMetricData call that includes a StorageResolution of 1 second. + /// This member is required. + public var period: Swift.Int? + /// The statistic to use for comparison to the threshold. It can be any CloudWatch statistic or extended statistic. For more information about statistics, see [CloudWatch statistics definitions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Statistics-definitions.html). + /// This member is required. + public var stat: Swift.String? + /// If you omit Unit then all data that was collected with any unit is returned, along with the corresponding units that were specified when the data was reported to CloudWatch. If you specify a unit, the operation returns only data that was collected with that unit specified. If you specify a unit that does not match the data collected, the results of the operation are null. CloudWatch does not perform unit conversions. + public var unit: ApplicationSignalsClientTypes.StandardUnit? + + public init( + metric: ApplicationSignalsClientTypes.Metric? = nil, + period: Swift.Int? = nil, + stat: Swift.String? = nil, + unit: ApplicationSignalsClientTypes.StandardUnit? = nil + ) + { + self.metric = metric + self.period = period + self.stat = stat + self.unit = unit + } + } + +} + +extension ApplicationSignalsClientTypes { + /// Use this structure to define a metric or metric math expression that you want to use as for a service level objective. Each MetricDataQuery in the MetricDataQueries array specifies either a metric to retrieve, or a metric math expression to be performed on retrieved metrics. A single MetricDataQueries array can include as many as 20 MetricDataQuery structures in the array. The 20 structures can include as many as 10 structures that contain a MetricStat parameter to retrieve a metric, and as many as 10 structures that contain the Expression parameter to perform a math expression. Of those Expression structures, exactly one must have true as the value for ReturnData. The result of this expression used for the SLO. For more information about metric math expressions, see [CloudWatchUse metric math](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html). Within each MetricDataQuery object, you must specify either Expression or MetricStat but not both. + public struct MetricDataQuery { + /// The ID of the account where this metric is located. If you are performing this operatiion in a monitoring account, use this to specify which source account to retrieve this metric from. + public var accountId: Swift.String? + /// This field can contain a metric math expression to be performed on the other metrics that you are retrieving within this MetricDataQueries structure. A math expression can use the Id of the other metrics or queries to refer to those metrics, and can also use the Id of other expressions to use the result of those expressions. For more information about metric math expressions, see [Metric Math Syntax and Functions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html#metric-math-syntax) in the Amazon CloudWatch User Guide. Within each MetricDataQuery object, you must specify either Expression or MetricStat but not both. + public var expression: Swift.String? + /// A short name used to tie this object to the results in the response. This Id must be unique within a MetricDataQueries array. If you are performing math expressions on this set of data, this name represents that data and can serve as a variable in the metric math expression. The valid characters are letters, numbers, and underscore. The first character must be a lowercase letter. + /// This member is required. + public var id: Swift.String? + /// A human-readable label for this metric or expression. This is especially useful if this is an expression, so that you know what the value represents. If the metric or expression is shown in a CloudWatch dashboard widget, the label is shown. If Label is omitted, CloudWatch generates a default. You can put dynamic expressions into a label, so that it is more descriptive. For more information, see [Using Dynamic Labels](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph-dynamic-labels.html). + public var label: Swift.String? + /// A metric to be used directly for the SLO, or to be used in the math expression that will be used for the SLO. Within one MetricDataQuery object, you must specify either Expression or MetricStat but not both. + public var metricStat: ApplicationSignalsClientTypes.MetricStat? + /// The granularity, in seconds, of the returned data points for this metric. For metrics with regular resolution, a period can be as short as one minute (60 seconds) and must be a multiple of 60. For high-resolution metrics that are collected at intervals of less than one minute, the period can be 1, 5, 10, 30, 60, or any multiple of 60. High-resolution metrics are those metrics stored by a PutMetricData call that includes a StorageResolution of 1 second. If the StartTime parameter specifies a time stamp that is greater than 3 hours ago, you must specify the period as follows or no data points in that time range is returned: + /// + /// * Start time between 3 hours and 15 days ago - Use a multiple of 60 seconds (1 minute). + /// + /// * Start time between 15 and 63 days ago - Use a multiple of 300 seconds (5 minutes). + /// + /// * Start time greater than 63 days ago - Use a multiple of 3600 seconds (1 hour). + public var period: Swift.Int? + /// Use this only if you are using a metric math expression for the SLO. Specify true for ReturnData for only the one expression result to use as the alarm. For all other metrics and expressions in the same CreateServiceLevelObjective operation, specify ReturnData as false. + public var returnData: Swift.Bool? + + public init( + accountId: Swift.String? = nil, + expression: Swift.String? = nil, + id: Swift.String? = nil, + label: Swift.String? = nil, + metricStat: ApplicationSignalsClientTypes.MetricStat? = nil, + period: Swift.Int? = nil, + returnData: Swift.Bool? = nil + ) + { + self.accountId = accountId + self.expression = expression + self.id = id + self.label = label + self.metricStat = metricStat + self.period = period + self.returnData = returnData + } + } + +} + +extension ApplicationSignalsClientTypes { + + public enum ServiceLevelIndicatorMetricType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case availability + case latency + case sdkUnknown(Swift.String) + + public static var allCases: [ServiceLevelIndicatorMetricType] { + return [ + .availability, + .latency + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .availability: return "AVAILABILITY" + case .latency: return "LATENCY" + case let .sdkUnknown(s): return s + } + } + } +} + +extension ApplicationSignalsClientTypes { + /// This structure contains the information about the metric that is used for the SLO. + public struct ServiceLevelIndicatorMetric { + /// This is a string-to-string map that contains information about the type of object that this SLO is related to. It can include the following fields. + /// + /// * Type designates the type of object that this SLO is related to. + /// + /// * ResourceType specifies the type of the resource. This field is used only when the value of the Type field is Resource or AWS::Resource. + /// + /// * Name specifies the name of the object. This is used only if the value of the Type field is Service, RemoteService, or AWS::Service. + /// + /// * Identifier identifies the resource objects of this resource. This is used only if the value of the Type field is Resource or AWS::Resource. + /// + /// * Environment specifies the location where this object is hosted, or what it belongs to. + public var keyAttributes: [Swift.String: Swift.String]? + /// If this SLO monitors a CloudWatch metric or the result of a CloudWatch metric math expression, this structure includes the information about that metric or expression. + /// This member is required. + public var metricDataQueries: [ApplicationSignalsClientTypes.MetricDataQuery]? + /// If the SLO monitors either the LATENCY or AVAILABILITY metric that Application Signals collects, this field displays which of those metrics is used. + public var metricType: ApplicationSignalsClientTypes.ServiceLevelIndicatorMetricType? + /// If the SLO monitors a specific operation of the service, this field displays that operation name. + public var operationName: Swift.String? + + public init( + keyAttributes: [Swift.String: Swift.String]? = nil, + metricDataQueries: [ApplicationSignalsClientTypes.MetricDataQuery]? = nil, + metricType: ApplicationSignalsClientTypes.ServiceLevelIndicatorMetricType? = nil, + operationName: Swift.String? = nil + ) + { + self.keyAttributes = keyAttributes + self.metricDataQueries = metricDataQueries + self.metricType = metricType + self.operationName = operationName + } + } + +} + +extension ApplicationSignalsClientTypes { + /// This structure contains information about the performance metric that an SLO monitors. + public struct ServiceLevelIndicator { + /// The arithmetic operation used when comparing the specified metric to the threshold. + /// This member is required. + public var comparisonOperator: ApplicationSignalsClientTypes.ServiceLevelIndicatorComparisonOperator? + /// The value that the SLI metric is compared to. + /// This member is required. + public var metricThreshold: Swift.Double? + /// A structure that contains information about the metric that the SLO monitors. + /// This member is required. + public var sliMetric: ApplicationSignalsClientTypes.ServiceLevelIndicatorMetric? + + public init( + comparisonOperator: ApplicationSignalsClientTypes.ServiceLevelIndicatorComparisonOperator? = nil, + metricThreshold: Swift.Double? = nil, + sliMetric: ApplicationSignalsClientTypes.ServiceLevelIndicatorMetric? = nil + ) + { + self.comparisonOperator = comparisonOperator + self.metricThreshold = metricThreshold + self.sliMetric = sliMetric + } + } + +} + +extension ApplicationSignalsClientTypes { + /// A structure containing an SLO budget report that you have requested. + public struct ServiceLevelObjectiveBudgetReport { + /// The ARN of the SLO that this report is for. + /// This member is required. + public var arn: Swift.String? + /// A number between 0 and 100 that represents the percentage of time periods that the service has attained the SLO's attainment goal, as of the time of the request. + public var attainment: Swift.Double? + /// The budget amount remaining before the SLO status becomes BREACHING, at the time specified in the Timestemp parameter of the request. If this value is negative, then the SLO is already in BREACHING status. + public var budgetSecondsRemaining: Swift.Int? + /// The status of this SLO, as it relates to the error budget for the entire time interval. + /// + /// * OK means that the SLO had remaining budget above the warning threshold, as of the time that you specified in TimeStamp. + /// + /// * WARNING means that the SLO's remaining budget was below the warning threshold, as of the time that you specified in TimeStamp. + /// + /// * BREACHED means that the SLO's budget was exhausted, as of the time that you specified in TimeStamp. + /// + /// * INSUFFICIENT_DATA means that the specifed start and end times were before the SLO was created, or that attainment data is missing. + /// This member is required. + public var budgetStatus: ApplicationSignalsClientTypes.ServiceLevelObjectiveBudgetStatus? + /// This structure contains the attributes that determine the goal of an SLO. This includes the time period for evaluation and the attainment threshold. + public var goal: ApplicationSignalsClientTypes.Goal? + /// The name of the SLO that this report is for. + /// This member is required. + public var name: Swift.String? + /// A structure that contains information about the performance metric that this SLO monitors. + public var sli: ApplicationSignalsClientTypes.ServiceLevelIndicator? + /// The total number of seconds in the error budget for the interval. + public var totalBudgetSeconds: Swift.Int? + + public init( + arn: Swift.String? = nil, + attainment: Swift.Double? = nil, + budgetSecondsRemaining: Swift.Int? = nil, + budgetStatus: ApplicationSignalsClientTypes.ServiceLevelObjectiveBudgetStatus? = nil, + goal: ApplicationSignalsClientTypes.Goal? = nil, + name: Swift.String? = nil, + sli: ApplicationSignalsClientTypes.ServiceLevelIndicator? = nil, + totalBudgetSeconds: Swift.Int? = nil + ) + { + self.arn = arn + self.attainment = attainment + self.budgetSecondsRemaining = budgetSecondsRemaining + self.budgetStatus = budgetStatus + self.goal = goal + self.name = name + self.sli = sli + self.totalBudgetSeconds = totalBudgetSeconds + } + } + +} + +public struct BatchGetServiceLevelObjectiveBudgetReportOutput { + /// An array of structures, where each structure includes an error indicating that one of the requests in the array was not valid. + /// This member is required. + public var errors: [ApplicationSignalsClientTypes.ServiceLevelObjectiveBudgetReportError]? + /// An array of structures, where each structure is one budget report. + /// This member is required. + public var reports: [ApplicationSignalsClientTypes.ServiceLevelObjectiveBudgetReport]? + /// The date and time that the report is for. It is expressed as the number of milliseconds since Jan 1, 1970 00:00:00 UTC. + /// This member is required. + public var timestamp: Foundation.Date? + + public init( + errors: [ApplicationSignalsClientTypes.ServiceLevelObjectiveBudgetReportError]? = nil, + reports: [ApplicationSignalsClientTypes.ServiceLevelObjectiveBudgetReport]? = nil, + timestamp: Foundation.Date? = nil + ) + { + self.errors = errors + self.reports = reports + self.timestamp = timestamp + } +} + +public struct GetServiceInput { + /// The end of the time period to retrieve information about. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var endTime: Foundation.Date? + /// Use this field to specify which service you want to retrieve information for. You must specify at least the Type, Name, and Environment attributes. This is a string-to-string map. It can include the following fields. + /// + /// * Type designates the type of object this is. + /// + /// * ResourceType specifies the type of the resource. This field is used only when the value of the Type field is Resource or AWS::Resource. + /// + /// * Name specifies the name of the object. This is used only if the value of the Type field is Service, RemoteService, or AWS::Service. + /// + /// * Identifier identifies the resource objects of this resource. This is used only if the value of the Type field is Resource or AWS::Resource. + /// + /// * Environment specifies the location where this object is hosted, or what it belongs to. + /// This member is required. + public var keyAttributes: [Swift.String: Swift.String]? + /// The start of the time period to retrieve information about. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var startTime: Foundation.Date? + + public init( + endTime: Foundation.Date? = nil, + keyAttributes: [Swift.String: Swift.String]? = nil, + startTime: Foundation.Date? = nil + ) + { + self.endTime = endTime + self.keyAttributes = keyAttributes + self.startTime = startTime + } +} + +extension ApplicationSignalsClientTypes { + /// This structure contains information about one CloudWatch metric associated with this entity discovered by Application Signals. + public struct MetricReference { + /// An array of one or more dimensions that further define the metric. For more information, see [CloudWatchDimensions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension). + public var dimensions: [ApplicationSignalsClientTypes.Dimension]? + /// The name of the metric. + /// This member is required. + public var metricName: Swift.String? + /// Used to display the appropriate statistics in the CloudWatch console. + /// This member is required. + public var metricType: Swift.String? + /// The namespace of the metric. For more information, see [CloudWatchNamespaces](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Namespace). + /// This member is required. + public var namespace: Swift.String? + + public init( + dimensions: [ApplicationSignalsClientTypes.Dimension]? = nil, + metricName: Swift.String? = nil, + metricType: Swift.String? = nil, + namespace: Swift.String? = nil + ) + { + self.dimensions = dimensions + self.metricName = metricName + self.metricType = metricType + self.namespace = namespace + } + } + +} + +extension ApplicationSignalsClientTypes { + /// This structure contains information about one of your services that was discovered by Application Signals. + public struct Service { + /// This structure contains one or more string-to-string maps that help identify this service. It can include platform attributes, application attributes, and telemetry attributes. Platform attributes contain information the service's platform. + /// + /// * PlatformType defines the hosted-in platform. + /// + /// * EKS.Cluster is the name of the Amazon EKS cluster. + /// + /// * K8s.Cluster is the name of the self-hosted Kubernetes cluster. + /// + /// * K8s.Namespace is the name of the Kubernetes namespace in either Amazon EKS or Kubernetes clusters. + /// + /// * K8s.Workload is the name of the Kubernetes workload in either Amazon EKS or Kubernetes clusters. + /// + /// * K8s.Node is the name of the Kubernetes node in either Amazon EKS or Kubernetes clusters. + /// + /// * K8s.Pod is the name of the Kubernetes pod in either Amazon EKS or Kubernetes clusters. + /// + /// * EC2.AutoScalingGroup is the name of the Amazon EC2 Auto Scaling group. + /// + /// * EC2.InstanceId is the ID of the Amazon EC2 instance. + /// + /// * Host is the name of the host, for all platform types. + /// + /// + /// Applciation attributes contain information about the application. + /// + /// * AWS.Application is the application's name in Amazon Web Services Service Catalog AppRegistry. + /// + /// * AWS.Application.ARN is the application's ARN in Amazon Web Services Service Catalog AppRegistry. + /// + /// + /// Telemetry attributes contain telemetry information. + /// + /// * Telemetry.SDK is the fingerprint of the OpenTelemetry SDK version for instrumented services. + /// + /// * Telemetry.Agent is the fingerprint of the agent used to collect and send telemetry data. + /// + /// * Telemetry.Source Specifies the point of application where the telemetry was collected or specifies what was used for the source of telemetry data. + public var attributeMaps: [[Swift.String: Swift.String]]? + /// This is a string-to-string map. It can include the following fields. + /// + /// * Type designates the type of object this is. + /// + /// * ResourceType specifies the type of the resource. This field is used only when the value of the Type field is Resource or AWS::Resource. + /// + /// * Name specifies the name of the object. This is used only if the value of the Type field is Service, RemoteService, or AWS::Service. + /// + /// * Identifier identifies the resource objects of this resource. This is used only if the value of the Type field is Resource or AWS::Resource. + /// + /// * Environment specifies the location where this object is hosted, or what it belongs to. + /// This member is required. + public var keyAttributes: [Swift.String: Swift.String]? + /// An array of structures that each contain information about one metric associated with this service. + /// This member is required. + public var metricReferences: [ApplicationSignalsClientTypes.MetricReference]? + + public init( + attributeMaps: [[Swift.String: Swift.String]]? = nil, + keyAttributes: [Swift.String: Swift.String]? = nil, + metricReferences: [ApplicationSignalsClientTypes.MetricReference]? = nil + ) + { + self.attributeMaps = attributeMaps + self.keyAttributes = keyAttributes + self.metricReferences = metricReferences + } + } + +} + +public struct GetServiceOutput { + /// The end time of the data included in the response. In a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057. + /// This member is required. + public var endTime: Foundation.Date? + /// A structure containing information about the service. + /// This member is required. + public var service: ApplicationSignalsClientTypes.Service? + /// The start time of the data included in the response. In a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057. + /// This member is required. + public var startTime: Foundation.Date? + + public init( + endTime: Foundation.Date? = nil, + service: ApplicationSignalsClientTypes.Service? = nil, + startTime: Foundation.Date? = nil + ) + { + self.endTime = endTime + self.service = service + self.startTime = startTime + } +} + +public struct ListServiceDependenciesInput { + /// The end of the time period to retrieve information about. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var endTime: Foundation.Date? + /// Use this field to specify which service you want to retrieve information for. You must specify at least the Type, Name, and Environment attributes. This is a string-to-string map. It can include the following fields. + /// + /// * Type designates the type of object this is. + /// + /// * ResourceType specifies the type of the resource. This field is used only when the value of the Type field is Resource or AWS::Resource. + /// + /// * Name specifies the name of the object. This is used only if the value of the Type field is Service, RemoteService, or AWS::Service. + /// + /// * Identifier identifies the resource objects of this resource. This is used only if the value of the Type field is Resource or AWS::Resource. + /// + /// * Environment specifies the location where this object is hosted, or what it belongs to. + /// This member is required. + public var keyAttributes: [Swift.String: Swift.String]? + /// The maximum number of results to return in one operation. If you omit this parameter, the default of 50 is used. + public var maxResults: Swift.Int? + /// Include this value, if it was returned by the previous operation, to get the next set of service dependencies. + public var nextToken: Swift.String? + /// The start of the time period to retrieve information about. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var startTime: Foundation.Date? + + public init( + endTime: Foundation.Date? = nil, + keyAttributes: [Swift.String: Swift.String]? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + startTime: Foundation.Date? = nil + ) + { + self.endTime = endTime + self.keyAttributes = keyAttributes + self.maxResults = maxResults + self.nextToken = nextToken + self.startTime = startTime + } +} + +extension ApplicationSignalsClientTypes { + /// This structure contains information about one dependency of this service. + public struct ServiceDependency { + /// This is a string-to-string map. It can include the following fields. + /// + /// * Type designates the type of object this is. + /// + /// * ResourceType specifies the type of the resource. This field is used only when the value of the Type field is Resource or AWS::Resource. + /// + /// * Name specifies the name of the object. This is used only if the value of the Type field is Service, RemoteService, or AWS::Service. + /// + /// * Identifier identifies the resource objects of this resource. This is used only if the value of the Type field is Resource or AWS::Resource. + /// + /// * Environment specifies the location where this object is hosted, or what it belongs to. + /// This member is required. + public var dependencyKeyAttributes: [Swift.String: Swift.String]? + /// The name of the called operation in the dependency. + /// This member is required. + public var dependencyOperationName: Swift.String? + /// An array of structures that each contain information about one metric associated with this service dependency that was discovered by Application Signals. + /// This member is required. + public var metricReferences: [ApplicationSignalsClientTypes.MetricReference]? + /// The name of the operation in this service that calls the dependency. + /// This member is required. + public var operationName: Swift.String? + + public init( + dependencyKeyAttributes: [Swift.String: Swift.String]? = nil, + dependencyOperationName: Swift.String? = nil, + metricReferences: [ApplicationSignalsClientTypes.MetricReference]? = nil, + operationName: Swift.String? = nil + ) + { + self.dependencyKeyAttributes = dependencyKeyAttributes + self.dependencyOperationName = dependencyOperationName + self.metricReferences = metricReferences + self.operationName = operationName + } + } + +} + +public struct ListServiceDependenciesOutput { + /// The end of the time period that the returned information applies to. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var endTime: Foundation.Date? + /// Include this value in your next use of this API to get next set of service dependencies. + public var nextToken: Swift.String? + /// An array, where each object in the array contains information about one of the dependencies of this service. + /// This member is required. + public var serviceDependencies: [ApplicationSignalsClientTypes.ServiceDependency]? + /// The start of the time period that the returned information applies to. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var startTime: Foundation.Date? + + public init( + endTime: Foundation.Date? = nil, + nextToken: Swift.String? = nil, + serviceDependencies: [ApplicationSignalsClientTypes.ServiceDependency]? = nil, + startTime: Foundation.Date? = nil + ) + { + self.endTime = endTime + self.nextToken = nextToken + self.serviceDependencies = serviceDependencies + self.startTime = startTime + } +} + +public struct ListServiceDependentsInput { + /// The end of the time period to retrieve information about. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var endTime: Foundation.Date? + /// Use this field to specify which service you want to retrieve information for. You must specify at least the Type, Name, and Environment attributes. This is a string-to-string map. It can include the following fields. + /// + /// * Type designates the type of object this is. + /// + /// * ResourceType specifies the type of the resource. This field is used only when the value of the Type field is Resource or AWS::Resource. + /// + /// * Name specifies the name of the object. This is used only if the value of the Type field is Service, RemoteService, or AWS::Service. + /// + /// * Identifier identifies the resource objects of this resource. This is used only if the value of the Type field is Resource or AWS::Resource. + /// + /// * Environment specifies the location where this object is hosted, or what it belongs to. + /// This member is required. + public var keyAttributes: [Swift.String: Swift.String]? + /// The maximum number of results to return in one operation. If you omit this parameter, the default of 50 is used. + public var maxResults: Swift.Int? + /// Include this value, if it was returned by the previous operation, to get the next set of service dependents. + public var nextToken: Swift.String? + /// The start of the time period to retrieve information about. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var startTime: Foundation.Date? + + public init( + endTime: Foundation.Date? = nil, + keyAttributes: [Swift.String: Swift.String]? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + startTime: Foundation.Date? = nil + ) + { + self.endTime = endTime + self.keyAttributes = keyAttributes + self.maxResults = maxResults + self.nextToken = nextToken + self.startTime = startTime + } +} + +extension ApplicationSignalsClientTypes { + /// This structure contains information about a service dependent that was discovered by Application Signals. A dependent is an entity that invoked the specified service during the provided time range. Dependents include other services, CloudWatch Synthetics canaries, and clients that are instrumented with CloudWatch RUM app monitors. + public struct ServiceDependent { + /// This is a string-to-string map. It can include the following fields. + /// + /// * Type designates the type of object this is. + /// + /// * ResourceType specifies the type of the resource. This field is used only when the value of the Type field is Resource or AWS::Resource. + /// + /// * Name specifies the name of the object. This is used only if the value of the Type field is Service, RemoteService, or AWS::Service. + /// + /// * Identifier identifies the resource objects of this resource. This is used only if the value of the Type field is Resource or AWS::Resource. + /// + /// * Environment specifies the location where this object is hosted, or what it belongs to. + /// This member is required. + public var dependentKeyAttributes: [Swift.String: Swift.String]? + /// If the dependent invoker was a service that invoked it from an operation, the name of that dependent operation is displayed here. + public var dependentOperationName: Swift.String? + /// An array of structures that each contain information about one metric associated with this service dependent that was discovered by Application Signals. + /// This member is required. + public var metricReferences: [ApplicationSignalsClientTypes.MetricReference]? + /// If the invoked entity is an operation on an entity, the name of that dependent operation is displayed here. + public var operationName: Swift.String? + + public init( + dependentKeyAttributes: [Swift.String: Swift.String]? = nil, + dependentOperationName: Swift.String? = nil, + metricReferences: [ApplicationSignalsClientTypes.MetricReference]? = nil, + operationName: Swift.String? = nil + ) + { + self.dependentKeyAttributes = dependentKeyAttributes + self.dependentOperationName = dependentOperationName + self.metricReferences = metricReferences + self.operationName = operationName + } + } + +} + +public struct ListServiceDependentsOutput { + /// The end of the time period that the returned information applies to. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var endTime: Foundation.Date? + /// Include this value in your next use of this API to get next set of service dependents. + public var nextToken: Swift.String? + /// An array, where each object in the array contains information about one of the dependents of this service. + /// This member is required. + public var serviceDependents: [ApplicationSignalsClientTypes.ServiceDependent]? + /// The start of the time period that the returned information applies to. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var startTime: Foundation.Date? + + public init( + endTime: Foundation.Date? = nil, + nextToken: Swift.String? = nil, + serviceDependents: [ApplicationSignalsClientTypes.ServiceDependent]? = nil, + startTime: Foundation.Date? = nil + ) + { + self.endTime = endTime + self.nextToken = nextToken + self.serviceDependents = serviceDependents + self.startTime = startTime + } +} + +public struct ListServiceOperationsInput { + /// The end of the time period to retrieve information about. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var endTime: Foundation.Date? + /// Use this field to specify which service you want to retrieve information for. You must specify at least the Type, Name, and Environment attributes. This is a string-to-string map. It can include the following fields. + /// + /// * Type designates the type of object this is. + /// + /// * ResourceType specifies the type of the resource. This field is used only when the value of the Type field is Resource or AWS::Resource. + /// + /// * Name specifies the name of the object. This is used only if the value of the Type field is Service, RemoteService, or AWS::Service. + /// + /// * Identifier identifies the resource objects of this resource. This is used only if the value of the Type field is Resource or AWS::Resource. + /// + /// * Environment specifies the location where this object is hosted, or what it belongs to. + /// This member is required. + public var keyAttributes: [Swift.String: Swift.String]? + /// The maximum number of results to return in one operation. If you omit this parameter, the default of 50 is used. + public var maxResults: Swift.Int? + /// Include this value, if it was returned by the previous operation, to get the next set of service operations. + public var nextToken: Swift.String? + /// The start of the time period to retrieve information about. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var startTime: Foundation.Date? + + public init( + endTime: Foundation.Date? = nil, + keyAttributes: [Swift.String: Swift.String]? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + startTime: Foundation.Date? = nil + ) + { + self.endTime = endTime + self.keyAttributes = keyAttributes + self.maxResults = maxResults + self.nextToken = nextToken + self.startTime = startTime + } +} + +extension ApplicationSignalsClientTypes { + /// This structure contains information about an operation discovered by Application Signals. An operation is a specific function performed by a service that was discovered by Application Signals, and is often an API that is called by an upstream dependent. + public struct ServiceOperation { + /// An array of structures that each contain information about one metric associated with this service operation that was discovered by Application Signals. + /// This member is required. + public var metricReferences: [ApplicationSignalsClientTypes.MetricReference]? + /// The name of the operation, discovered by Application Signals. + /// This member is required. + public var name: Swift.String? + + public init( + metricReferences: [ApplicationSignalsClientTypes.MetricReference]? = nil, + name: Swift.String? = nil + ) + { + self.metricReferences = metricReferences + self.name = name + } + } + +} + +public struct ListServiceOperationsOutput { + /// The end of the time period that the returned information applies to. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var endTime: Foundation.Date? + /// Include this value in your next use of this API to get next set of service operations. + public var nextToken: Swift.String? + /// An array of structures that each contain information about one operation of this service. + /// This member is required. + public var serviceOperations: [ApplicationSignalsClientTypes.ServiceOperation]? + /// The start of the time period that the returned information applies to. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var startTime: Foundation.Date? + + public init( + endTime: Foundation.Date? = nil, + nextToken: Swift.String? = nil, + serviceOperations: [ApplicationSignalsClientTypes.ServiceOperation]? = nil, + startTime: Foundation.Date? = nil + ) + { + self.endTime = endTime + self.nextToken = nextToken + self.serviceOperations = serviceOperations + self.startTime = startTime + } +} + +public struct ListServicesInput { + /// The end of the time period to retrieve information about. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var endTime: Foundation.Date? + /// The maximum number of results to return in one operation. If you omit this parameter, the default of 50 is used. + public var maxResults: Swift.Int? + /// Include this value, if it was returned by the previous operation, to get the next set of services. + public var nextToken: Swift.String? + /// The start of the time period to retrieve information about. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var startTime: Foundation.Date? + + public init( + endTime: Foundation.Date? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + startTime: Foundation.Date? = nil + ) + { + self.endTime = endTime + self.maxResults = maxResults + self.nextToken = nextToken + self.startTime = startTime + } +} + +extension ApplicationSignalsClientTypes { + /// This structure contains information about one of your services that was discoverd by Application Signals + public struct ServiceSummary { + /// This structure contains one or more string-to-string maps that help identify this service. It can include platform attributes, application attributes, and telemetry attributes. Platform attributes contain information the service's platform. + /// + /// * PlatformType defines the hosted-in platform. + /// + /// * EKS.Cluster is the name of the Amazon EKS cluster. + /// + /// * K8s.Cluster is the name of the self-hosted Kubernetes cluster. + /// + /// * K8s.Namespace is the name of the Kubernetes namespace in either Amazon EKS or Kubernetes clusters. + /// + /// * K8s.Workload is the name of the Kubernetes workload in either Amazon EKS or Kubernetes clusters. + /// + /// * K8s.Node is the name of the Kubernetes node in either Amazon EKS or Kubernetes clusters. + /// + /// * K8s.Pod is the name of the Kubernetes pod in either Amazon EKS or Kubernetes clusters. + /// + /// * EC2.AutoScalingGroup is the name of the Amazon EC2 Auto Scaling group. + /// + /// * EC2.InstanceId is the ID of the Amazon EC2 instance. + /// + /// * Host is the name of the host, for all platform types. + /// + /// + /// Applciation attributes contain information about the application. + /// + /// * AWS.Application is the application's name in Amazon Web Services Service Catalog AppRegistry. + /// + /// * AWS.Application.ARN is the application's ARN in Amazon Web Services Service Catalog AppRegistry. + /// + /// + /// Telemetry attributes contain telemetry information. + /// + /// * Telemetry.SDK is the fingerprint of the OpenTelemetry SDK version for instrumented services. + /// + /// * Telemetry.Agent is the fingerprint of the agent used to collect and send telemetry data. + /// + /// * Telemetry.Source Specifies the point of application where the telemetry was collected or specifies what was used for the source of telemetry data. + public var attributeMaps: [[Swift.String: Swift.String]]? + /// This is a string-to-string map that help identify the objects discovered by Application Signals. It can include the following fields. + /// + /// * Type designates the type of object this is. + /// + /// * ResourceType specifies the type of the resource. This field is used only when the value of the Type field is Resource or AWS::Resource. + /// + /// * Name specifies the name of the object. This is used only if the value of the Type field is Service, RemoteService, or AWS::Service. + /// + /// * Identifier identifies the resource objects of this resource. This is used only if the value of the Type field is Resource or AWS::Resource. + /// + /// * Environment specifies the location where this object is hosted, or what it belongs to. + /// This member is required. + public var keyAttributes: [Swift.String: Swift.String]? + /// An array of structures that each contain information about one metric associated with this service. + /// This member is required. + public var metricReferences: [ApplicationSignalsClientTypes.MetricReference]? + + public init( + attributeMaps: [[Swift.String: Swift.String]]? = nil, + keyAttributes: [Swift.String: Swift.String]? = nil, + metricReferences: [ApplicationSignalsClientTypes.MetricReference]? = nil + ) + { + self.attributeMaps = attributeMaps + self.keyAttributes = keyAttributes + self.metricReferences = metricReferences + } + } + +} + +public struct ListServicesOutput { + /// The end of the time period that the returned information applies to. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var endTime: Foundation.Date? + /// Include this value in your next use of this API to get next set of services. + public var nextToken: Swift.String? + /// An array of structures, where each structure contains some information about a service. To get complete information about a service, use [GetService](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetService.html). + /// This member is required. + public var serviceSummaries: [ApplicationSignalsClientTypes.ServiceSummary]? + /// The start of the time period that the returned information applies to. When used in a raw HTTP Query API, it is formatted as be epoch time in seconds. For example: 1698778057 + /// This member is required. + public var startTime: Foundation.Date? + + public init( + endTime: Foundation.Date? = nil, + nextToken: Swift.String? = nil, + serviceSummaries: [ApplicationSignalsClientTypes.ServiceSummary]? = nil, + startTime: Foundation.Date? = nil + ) + { + self.endTime = endTime + self.nextToken = nextToken + self.serviceSummaries = serviceSummaries + self.startTime = startTime + } +} + +/// Resource not found. +public struct ResourceNotFoundException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + /// Cannot find the resource id. + /// This member is required. + public internal(set) var resourceId: Swift.String? = nil + /// The resource type is not valid. + /// This member is required. + public internal(set) var resourceType: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ResourceNotFoundException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil, + resourceId: Swift.String? = nil, + resourceType: Swift.String? = nil + ) + { + self.properties.message = message + self.properties.resourceId = resourceId + self.properties.resourceType = resourceType + } +} + +public struct ListTagsForResourceInput { + /// The Amazon Resource Name (ARN) of the CloudWatch resource that you want to view tags for. The ARN format of an Application Signals SLO is arn:aws:cloudwatch:Region:account-id:slo:slo-name For more information about ARN format, see [ Resource Types Defined by Amazon CloudWatch](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazoncloudwatch.html#amazoncloudwatch-resources-for-iam-policies) in the Amazon Web Services General Reference. + /// This member is required. + public var resourceArn: Swift.String? + + public init( + resourceArn: Swift.String? = nil + ) + { + self.resourceArn = resourceArn + } +} + +extension ApplicationSignalsClientTypes { + /// A key-value pair associated with a resource. Tags can help you organize and categorize your resources. + public struct Tag { + /// A string that you can use to assign a value. The combination of tag keys and values can help you organize and categorize your resources. + /// This member is required. + public var key: Swift.String? + /// The value for the specified tag key. + /// This member is required. + public var value: Swift.String? + + public init( + key: Swift.String? = nil, + value: Swift.String? = nil + ) + { + self.key = key + self.value = value + } + } + +} + +public struct ListTagsForResourceOutput { + /// The list of tag keys and values associated with the resource you specified. + public var tags: [ApplicationSignalsClientTypes.Tag]? + + public init( + tags: [ApplicationSignalsClientTypes.Tag]? = nil + ) + { + self.tags = tags + } +} + +/// This operation attempted to create a resource that already exists. +public struct ConflictException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ConflictException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +/// This request exceeds a service quota. +public struct ServiceQuotaExceededException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ServiceQuotaExceededException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +extension ApplicationSignalsClientTypes { + /// Use this structure to specify the information for the metric that the SLO will monitor. + public struct ServiceLevelIndicatorMetricConfig { + /// If this SLO is related to a metric collected by Application Signals, you must use this field to specify which service the SLO metric is related to. To do so, you must specify at least the Type, Name, and Environment attributes. This is a string-to-string map. It can include the following fields. + /// + /// * Type designates the type of object this is. + /// + /// * ResourceType specifies the type of the resource. This field is used only when the value of the Type field is Resource or AWS::Resource. + /// + /// * Name specifies the name of the object. This is used only if the value of the Type field is Service, RemoteService, or AWS::Service. + /// + /// * Identifier identifies the resource objects of this resource. This is used only if the value of the Type field is Resource or AWS::Resource. + /// + /// * Environment specifies the location where this object is hosted, or what it belongs to. + public var keyAttributes: [Swift.String: Swift.String]? + /// If this SLO monitors a CloudWatch metric or the result of a CloudWatch metric math expression, use this structure to specify that metric or expression. + public var metricDataQueries: [ApplicationSignalsClientTypes.MetricDataQuery]? + /// If the SLO is to monitor either the LATENCY or AVAILABILITY metric that Application Signals collects, use this field to specify which of those metrics is used. + public var metricType: ApplicationSignalsClientTypes.ServiceLevelIndicatorMetricType? + /// If the SLO is to monitor a specific operation of the service, use this field to specify the name of that operation. + public var operationName: Swift.String? + /// The number of seconds to use as the period for SLO evaluation. Your application's performance is compared to the SLI during each period. For each period, the application is determined to have either achieved or not achieved the necessary performance. + public var periodSeconds: Swift.Int? + /// The statistic to use for comparison to the threshold. It can be any CloudWatch statistic or extended statistic. For more information about statistics, see [CloudWatch statistics definitions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Statistics-definitions.html). + public var statistic: Swift.String? + + public init( + keyAttributes: [Swift.String: Swift.String]? = nil, + metricDataQueries: [ApplicationSignalsClientTypes.MetricDataQuery]? = nil, + metricType: ApplicationSignalsClientTypes.ServiceLevelIndicatorMetricType? = nil, + operationName: Swift.String? = nil, + periodSeconds: Swift.Int? = nil, + statistic: Swift.String? = nil + ) + { + self.keyAttributes = keyAttributes + self.metricDataQueries = metricDataQueries + self.metricType = metricType + self.operationName = operationName + self.periodSeconds = periodSeconds + self.statistic = statistic + } + } + +} + +extension ApplicationSignalsClientTypes { + /// This structure specifies the information about the service and the performance metric that an SLO is to monitor. + public struct ServiceLevelIndicatorConfig { + /// The arithmetic operation to use when comparing the specified metric to the threshold. + /// This member is required. + public var comparisonOperator: ApplicationSignalsClientTypes.ServiceLevelIndicatorComparisonOperator? + /// The value that the SLI metric is compared to. + /// This member is required. + public var metricThreshold: Swift.Double? + /// Use this structure to specify the metric to be used for the SLO. + /// This member is required. + public var sliMetricConfig: ApplicationSignalsClientTypes.ServiceLevelIndicatorMetricConfig? + + public init( + comparisonOperator: ApplicationSignalsClientTypes.ServiceLevelIndicatorComparisonOperator? = nil, + metricThreshold: Swift.Double? = nil, + sliMetricConfig: ApplicationSignalsClientTypes.ServiceLevelIndicatorMetricConfig? = nil + ) + { + self.comparisonOperator = comparisonOperator + self.metricThreshold = metricThreshold + self.sliMetricConfig = sliMetricConfig + } + } + +} + +public struct CreateServiceLevelObjectiveInput { + /// An optional description for this SLO. + public var description: Swift.String? + /// A structure that contains the attributes that determine the goal of the SLO. This includes the time period for evaluation and the attainment threshold. + public var goal: ApplicationSignalsClientTypes.Goal? + /// A name for this SLO. + /// This member is required. + public var name: Swift.String? + /// A structure that contains information about what service and what performance metric that this SLO will monitor. + /// This member is required. + public var sliConfig: ApplicationSignalsClientTypes.ServiceLevelIndicatorConfig? + /// A list of key-value pairs to associate with the SLO. You can associate as many as 50 tags with an SLO. To be able to associate tags with the SLO when you create the SLO, you must have the cloudwatch:TagResource permission. Tags can help you organize and categorize your resources. You can also use them to scope user permissions by granting a user permission to access or change only resources with certain tag values. + public var tags: [ApplicationSignalsClientTypes.Tag]? + + public init( + description: Swift.String? = nil, + goal: ApplicationSignalsClientTypes.Goal? = nil, + name: Swift.String? = nil, + sliConfig: ApplicationSignalsClientTypes.ServiceLevelIndicatorConfig? = nil, + tags: [ApplicationSignalsClientTypes.Tag]? = nil + ) + { + self.description = description + self.goal = goal + self.name = name + self.sliConfig = sliConfig + self.tags = tags + } +} + +extension ApplicationSignalsClientTypes { + /// A structure containing information about one service level objective (SLO) that has been created in Application Signals. Creating SLOs can help you ensure your services are performing to the level that you expect. SLOs help you set and track a specific target level for the reliability and availability of your applications and services. Each SLO uses a service level indicator (SLI), which is a key performance metric, to calculate how much underperformance can be tolerated before the goal that you set for the SLO is not achieved. + public struct ServiceLevelObjective { + /// The ARN of this SLO. + /// This member is required. + public var arn: Swift.String? + /// The date and time that this SLO was created. When used in a raw HTTP Query API, it is formatted as yyyy-MM-dd'T'HH:mm:ss. For example, 2019-07-01T23:59:59. + /// This member is required. + public var createdTime: Foundation.Date? + /// The description that you created for this SLO. + public var description: Swift.String? + /// This structure contains the attributes that determine the goal of an SLO. This includes the time period for evaluation and the attainment threshold. + /// This member is required. + public var goal: ApplicationSignalsClientTypes.Goal? + /// The time that this SLO was most recently updated. When used in a raw HTTP Query API, it is formatted as yyyy-MM-dd'T'HH:mm:ss. For example, 2019-07-01T23:59:59. + /// This member is required. + public var lastUpdatedTime: Foundation.Date? + /// The name of this SLO. + /// This member is required. + public var name: Swift.String? + /// A structure containing information about the performance metric that this SLO monitors. + /// This member is required. + public var sli: ApplicationSignalsClientTypes.ServiceLevelIndicator? + + public init( + arn: Swift.String? = nil, + createdTime: Foundation.Date? = nil, + description: Swift.String? = nil, + goal: ApplicationSignalsClientTypes.Goal? = nil, + lastUpdatedTime: Foundation.Date? = nil, + name: Swift.String? = nil, + sli: ApplicationSignalsClientTypes.ServiceLevelIndicator? = nil + ) + { + self.arn = arn + self.createdTime = createdTime + self.description = description + self.goal = goal + self.lastUpdatedTime = lastUpdatedTime + self.name = name + self.sli = sli + } + } + +} + +public struct CreateServiceLevelObjectiveOutput { + /// A structure that contains information about the SLO that you just created. + /// This member is required. + public var slo: ApplicationSignalsClientTypes.ServiceLevelObjective? + + public init( + slo: ApplicationSignalsClientTypes.ServiceLevelObjective? = nil + ) + { + self.slo = slo + } +} + +public struct DeleteServiceLevelObjectiveInput { + /// The ARN or name of the service level objective to delete. + /// This member is required. + public var id: Swift.String? + + public init( + id: Swift.String? = nil + ) + { + self.id = id + } +} + +public struct DeleteServiceLevelObjectiveOutput { + + public init() { } +} + +public struct GetServiceLevelObjectiveInput { + /// The ARN or name of the SLO that you want to retrieve information about. You can find the ARNs of SLOs by using the [ListServiceLevelObjectives](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_ListServiceLevelObjectives.html) operation. + /// This member is required. + public var id: Swift.String? + + public init( + id: Swift.String? = nil + ) + { + self.id = id + } +} + +public struct GetServiceLevelObjectiveOutput { + /// A structure containing the information about the SLO. + /// This member is required. + public var slo: ApplicationSignalsClientTypes.ServiceLevelObjective? + + public init( + slo: ApplicationSignalsClientTypes.ServiceLevelObjective? = nil + ) + { + self.slo = slo + } +} + +public struct ListServiceLevelObjectivesInput { + /// You can use this optional field to specify which services you want to retrieve SLO information for. This is a string-to-string map. It can include the following fields. + /// + /// * Type designates the type of object this is. + /// + /// * ResourceType specifies the type of the resource. This field is used only when the value of the Type field is Resource or AWS::Resource. + /// + /// * Name specifies the name of the object. This is used only if the value of the Type field is Service, RemoteService, or AWS::Service. + /// + /// * Identifier identifies the resource objects of this resource. This is used only if the value of the Type field is Resource or AWS::Resource. + /// + /// * Environment specifies the location where this object is hosted, or what it belongs to. + public var keyAttributes: [Swift.String: Swift.String]? + /// The maximum number of results to return in one operation. If you omit this parameter, the default of 50 is used. + public var maxResults: Swift.Int? + /// Include this value, if it was returned by the previous operation, to get the next set of service level objectives. + public var nextToken: Swift.String? + /// The name of the operation that this SLO is associated with. + public var operationName: Swift.String? + + public init( + keyAttributes: [Swift.String: Swift.String]? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + operationName: Swift.String? = nil + ) + { + self.keyAttributes = keyAttributes + self.maxResults = maxResults + self.nextToken = nextToken + self.operationName = operationName + } +} + +extension ApplicationSignalsClientTypes { + /// A structure that contains information about one service level objective (SLO) created in Application Signals. + public struct ServiceLevelObjectiveSummary { + /// The ARN of this service level objective. + /// This member is required. + public var arn: Swift.String? + /// The date and time that this service level objective was created. It is expressed as the number of milliseconds since Jan 1, 1970 00:00:00 UTC. + public var createdTime: Foundation.Date? + /// This is a string-to-string map. It can include the following fields. + /// + /// * Type designates the type of object this service level objective is for. + /// + /// * ResourceType specifies the type of the resource. This field is used only when the value of the Type field is Resource or AWS::Resource. + /// + /// * Name specifies the name of the object. This is used only if the value of the Type field is Service, RemoteService, or AWS::Service. + /// + /// * Identifier identifies the resource objects of this resource. This is used only if the value of the Type field is Resource or AWS::Resource. + /// + /// * Environment specifies the location where this object is hosted, or what it belongs to. + public var keyAttributes: [Swift.String: Swift.String]? + /// The name of the service level objective. + /// This member is required. + public var name: Swift.String? + /// If this service level objective is specific to a single operation, this field displays the name of that operation. + public var operationName: Swift.String? + + public init( + arn: Swift.String? = nil, + createdTime: Foundation.Date? = nil, + keyAttributes: [Swift.String: Swift.String]? = nil, + name: Swift.String? = nil, + operationName: Swift.String? = nil + ) + { + self.arn = arn + self.createdTime = createdTime + self.keyAttributes = keyAttributes + self.name = name + self.operationName = operationName + } + } + +} + +public struct ListServiceLevelObjectivesOutput { + /// Include this value in your next use of this API to get next set of service level objectives. + public var nextToken: Swift.String? + /// An array of structures, where each structure contains information about one SLO. + public var sloSummaries: [ApplicationSignalsClientTypes.ServiceLevelObjectiveSummary]? + + public init( + nextToken: Swift.String? = nil, + sloSummaries: [ApplicationSignalsClientTypes.ServiceLevelObjectiveSummary]? = nil + ) + { + self.nextToken = nextToken + self.sloSummaries = sloSummaries + } +} + +public struct UpdateServiceLevelObjectiveInput { + /// An optional description for the SLO. + public var description: Swift.String? + /// A structure that contains the attributes that determine the goal of the SLO. This includes the time period for evaluation and the attainment threshold. + public var goal: ApplicationSignalsClientTypes.Goal? + /// The Amazon Resource Name (ARN) or name of the service level objective that you want to update. + /// This member is required. + public var id: Swift.String? + /// A structure that contains information about what performance metric this SLO will monitor. + public var sliConfig: ApplicationSignalsClientTypes.ServiceLevelIndicatorConfig? + + public init( + description: Swift.String? = nil, + goal: ApplicationSignalsClientTypes.Goal? = nil, + id: Swift.String? = nil, + sliConfig: ApplicationSignalsClientTypes.ServiceLevelIndicatorConfig? = nil + ) + { + self.description = description + self.goal = goal + self.id = id + self.sliConfig = sliConfig + } +} + +public struct UpdateServiceLevelObjectiveOutput { + /// A structure that contains information about the SLO that you just updated. + /// This member is required. + public var slo: ApplicationSignalsClientTypes.ServiceLevelObjective? + + public init( + slo: ApplicationSignalsClientTypes.ServiceLevelObjective? = nil + ) + { + self.slo = slo + } +} + +public struct StartDiscoveryInput { + + public init() { } +} + +public struct StartDiscoveryOutput { + + public init() { } +} + +public struct TagResourceInput { + /// The Amazon Resource Name (ARN) of the CloudWatch resource that you want to set tags for. The ARN format of an Application Signals SLO is arn:aws:cloudwatch:Region:account-id:slo:slo-name For more information about ARN format, see [ Resource Types Defined by Amazon CloudWatch](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazoncloudwatch.html#amazoncloudwatch-resources-for-iam-policies) in the Amazon Web Services General Reference. + /// This member is required. + public var resourceArn: Swift.String? + /// The list of key-value pairs to associate with the alarm. + /// This member is required. + public var tags: [ApplicationSignalsClientTypes.Tag]? + + public init( + resourceArn: Swift.String? = nil, + tags: [ApplicationSignalsClientTypes.Tag]? = nil + ) + { + self.resourceArn = resourceArn + self.tags = tags + } +} + +public struct TagResourceOutput { + + public init() { } +} + +public struct UntagResourceInput { + /// The Amazon Resource Name (ARN) of the CloudWatch resource that you want to delete tags from. The ARN format of an Application Signals SLO is arn:aws:cloudwatch:Region:account-id:slo:slo-name For more information about ARN format, see [ Resource Types Defined by Amazon CloudWatch](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazoncloudwatch.html#amazoncloudwatch-resources-for-iam-policies) in the Amazon Web Services General Reference. + /// This member is required. + public var resourceArn: Swift.String? + /// The list of tag keys to remove from the resource. + /// This member is required. + public var tagKeys: [Swift.String]? + + public init( + resourceArn: Swift.String? = nil, + tagKeys: [Swift.String]? = nil + ) + { + self.resourceArn = resourceArn + self.tagKeys = tagKeys + } +} + +public struct UntagResourceOutput { + + public init() { } +} + +extension BatchGetServiceLevelObjectiveBudgetReportInput { + + static func urlPathProvider(_ value: BatchGetServiceLevelObjectiveBudgetReportInput) -> Swift.String? { + return "/budget-report" + } +} + +extension CreateServiceLevelObjectiveInput { + + static func urlPathProvider(_ value: CreateServiceLevelObjectiveInput) -> Swift.String? { + return "/slo" + } +} + +extension DeleteServiceLevelObjectiveInput { + + static func urlPathProvider(_ value: DeleteServiceLevelObjectiveInput) -> Swift.String? { + guard let id = value.id else { + return nil + } + return "/slo/\(id.urlPercentEncoding())" + } +} + +extension GetServiceInput { + + static func urlPathProvider(_ value: GetServiceInput) -> Swift.String? { + return "/service" + } +} + +extension GetServiceInput { + + static func queryItemProvider(_ value: GetServiceInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + guard let endTime = value.endTime else { + let message = "Creating a URL Query Item failed. endTime is required and must not be nil." + throw Smithy.ClientError.unknownError(message) + } + let endTimeQueryItem = Smithy.URIQueryItem(name: "EndTime".urlPercentEncoding(), value: Swift.String(SmithyTimestamps.TimestampFormatter(format: .dateTime).string(from: endTime)).urlPercentEncoding()) + items.append(endTimeQueryItem) + guard let startTime = value.startTime else { + let message = "Creating a URL Query Item failed. startTime is required and must not be nil." + throw Smithy.ClientError.unknownError(message) + } + let startTimeQueryItem = Smithy.URIQueryItem(name: "StartTime".urlPercentEncoding(), value: Swift.String(SmithyTimestamps.TimestampFormatter(format: .dateTime).string(from: startTime)).urlPercentEncoding()) + items.append(startTimeQueryItem) + return items + } +} + +extension GetServiceLevelObjectiveInput { + + static func urlPathProvider(_ value: GetServiceLevelObjectiveInput) -> Swift.String? { + guard let id = value.id else { + return nil + } + return "/slo/\(id.urlPercentEncoding())" + } +} + +extension ListServiceDependenciesInput { + + static func urlPathProvider(_ value: ListServiceDependenciesInput) -> Swift.String? { + return "/service-dependencies" + } +} + +extension ListServiceDependenciesInput { + + static func queryItemProvider(_ value: ListServiceDependenciesInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + guard let endTime = value.endTime else { + let message = "Creating a URL Query Item failed. endTime is required and must not be nil." + throw Smithy.ClientError.unknownError(message) + } + let endTimeQueryItem = Smithy.URIQueryItem(name: "EndTime".urlPercentEncoding(), value: Swift.String(SmithyTimestamps.TimestampFormatter(format: .dateTime).string(from: endTime)).urlPercentEncoding()) + items.append(endTimeQueryItem) + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "NextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "MaxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + guard let startTime = value.startTime else { + let message = "Creating a URL Query Item failed. startTime is required and must not be nil." + throw Smithy.ClientError.unknownError(message) + } + let startTimeQueryItem = Smithy.URIQueryItem(name: "StartTime".urlPercentEncoding(), value: Swift.String(SmithyTimestamps.TimestampFormatter(format: .dateTime).string(from: startTime)).urlPercentEncoding()) + items.append(startTimeQueryItem) + return items + } +} + +extension ListServiceDependentsInput { + + static func urlPathProvider(_ value: ListServiceDependentsInput) -> Swift.String? { + return "/service-dependents" + } +} + +extension ListServiceDependentsInput { + + static func queryItemProvider(_ value: ListServiceDependentsInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + guard let endTime = value.endTime else { + let message = "Creating a URL Query Item failed. endTime is required and must not be nil." + throw Smithy.ClientError.unknownError(message) + } + let endTimeQueryItem = Smithy.URIQueryItem(name: "EndTime".urlPercentEncoding(), value: Swift.String(SmithyTimestamps.TimestampFormatter(format: .dateTime).string(from: endTime)).urlPercentEncoding()) + items.append(endTimeQueryItem) + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "NextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "MaxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + guard let startTime = value.startTime else { + let message = "Creating a URL Query Item failed. startTime is required and must not be nil." + throw Smithy.ClientError.unknownError(message) + } + let startTimeQueryItem = Smithy.URIQueryItem(name: "StartTime".urlPercentEncoding(), value: Swift.String(SmithyTimestamps.TimestampFormatter(format: .dateTime).string(from: startTime)).urlPercentEncoding()) + items.append(startTimeQueryItem) + return items + } +} + +extension ListServiceLevelObjectivesInput { + + static func urlPathProvider(_ value: ListServiceLevelObjectivesInput) -> Swift.String? { + return "/slos" + } +} + +extension ListServiceLevelObjectivesInput { + + static func queryItemProvider(_ value: ListServiceLevelObjectivesInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "NextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let operationName = value.operationName { + let operationNameQueryItem = Smithy.URIQueryItem(name: "OperationName".urlPercentEncoding(), value: Swift.String(operationName).urlPercentEncoding()) + items.append(operationNameQueryItem) + } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "MaxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + return items + } +} + +extension ListServiceOperationsInput { + + static func urlPathProvider(_ value: ListServiceOperationsInput) -> Swift.String? { + return "/service-operations" + } +} + +extension ListServiceOperationsInput { + + static func queryItemProvider(_ value: ListServiceOperationsInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + guard let endTime = value.endTime else { + let message = "Creating a URL Query Item failed. endTime is required and must not be nil." + throw Smithy.ClientError.unknownError(message) + } + let endTimeQueryItem = Smithy.URIQueryItem(name: "EndTime".urlPercentEncoding(), value: Swift.String(SmithyTimestamps.TimestampFormatter(format: .dateTime).string(from: endTime)).urlPercentEncoding()) + items.append(endTimeQueryItem) + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "NextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "MaxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + guard let startTime = value.startTime else { + let message = "Creating a URL Query Item failed. startTime is required and must not be nil." + throw Smithy.ClientError.unknownError(message) + } + let startTimeQueryItem = Smithy.URIQueryItem(name: "StartTime".urlPercentEncoding(), value: Swift.String(SmithyTimestamps.TimestampFormatter(format: .dateTime).string(from: startTime)).urlPercentEncoding()) + items.append(startTimeQueryItem) + return items + } +} + +extension ListServicesInput { + + static func urlPathProvider(_ value: ListServicesInput) -> Swift.String? { + return "/services" + } +} + +extension ListServicesInput { + + static func queryItemProvider(_ value: ListServicesInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + guard let endTime = value.endTime else { + let message = "Creating a URL Query Item failed. endTime is required and must not be nil." + throw Smithy.ClientError.unknownError(message) + } + let endTimeQueryItem = Smithy.URIQueryItem(name: "EndTime".urlPercentEncoding(), value: Swift.String(SmithyTimestamps.TimestampFormatter(format: .dateTime).string(from: endTime)).urlPercentEncoding()) + items.append(endTimeQueryItem) + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "NextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "MaxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + guard let startTime = value.startTime else { + let message = "Creating a URL Query Item failed. startTime is required and must not be nil." + throw Smithy.ClientError.unknownError(message) + } + let startTimeQueryItem = Smithy.URIQueryItem(name: "StartTime".urlPercentEncoding(), value: Swift.String(SmithyTimestamps.TimestampFormatter(format: .dateTime).string(from: startTime)).urlPercentEncoding()) + items.append(startTimeQueryItem) + return items + } +} + +extension ListTagsForResourceInput { + + static func urlPathProvider(_ value: ListTagsForResourceInput) -> Swift.String? { + return "/tags" + } +} + +extension ListTagsForResourceInput { + + static func queryItemProvider(_ value: ListTagsForResourceInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + guard let resourceArn = value.resourceArn else { + let message = "Creating a URL Query Item failed. resourceArn is required and must not be nil." + throw Smithy.ClientError.unknownError(message) + } + let resourceArnQueryItem = Smithy.URIQueryItem(name: "ResourceArn".urlPercentEncoding(), value: Swift.String(resourceArn).urlPercentEncoding()) + items.append(resourceArnQueryItem) + return items + } +} + +extension StartDiscoveryInput { + + static func urlPathProvider(_ value: StartDiscoveryInput) -> Swift.String? { + return "/start-discovery" + } +} + +extension TagResourceInput { + + static func urlPathProvider(_ value: TagResourceInput) -> Swift.String? { + return "/tag-resource" + } +} + +extension UntagResourceInput { + + static func urlPathProvider(_ value: UntagResourceInput) -> Swift.String? { + return "/untag-resource" + } +} + +extension UpdateServiceLevelObjectiveInput { + + static func urlPathProvider(_ value: UpdateServiceLevelObjectiveInput) -> Swift.String? { + guard let id = value.id else { + return nil + } + return "/slo/\(id.urlPercentEncoding())" + } +} + +extension BatchGetServiceLevelObjectiveBudgetReportInput { + + static func write(value: BatchGetServiceLevelObjectiveBudgetReportInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["SloIds"].writeList(value.sloIds, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["Timestamp"].writeTimestamp(value.timestamp, format: .epochSeconds) + } +} + +extension CreateServiceLevelObjectiveInput { + + static func write(value: CreateServiceLevelObjectiveInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Description"].write(value.description) + try writer["Goal"].write(value.goal, with: ApplicationSignalsClientTypes.Goal.write(value:to:)) + try writer["Name"].write(value.name) + try writer["SliConfig"].write(value.sliConfig, with: ApplicationSignalsClientTypes.ServiceLevelIndicatorConfig.write(value:to:)) + try writer["Tags"].writeList(value.tags, memberWritingClosure: ApplicationSignalsClientTypes.Tag.write(value:to:), memberNodeInfo: "member", isFlattened: false) + } +} + +extension GetServiceInput { + + static func write(value: GetServiceInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["KeyAttributes"].writeMap(value.keyAttributes, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + } +} + +extension ListServiceDependenciesInput { + + static func write(value: ListServiceDependenciesInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["KeyAttributes"].writeMap(value.keyAttributes, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + } +} + +extension ListServiceDependentsInput { + + static func write(value: ListServiceDependentsInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["KeyAttributes"].writeMap(value.keyAttributes, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + } +} + +extension ListServiceLevelObjectivesInput { + + static func write(value: ListServiceLevelObjectivesInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["KeyAttributes"].writeMap(value.keyAttributes, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + } +} + +extension ListServiceOperationsInput { + + static func write(value: ListServiceOperationsInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["KeyAttributes"].writeMap(value.keyAttributes, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + } +} + +extension TagResourceInput { + + static func write(value: TagResourceInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["ResourceArn"].write(value.resourceArn) + try writer["Tags"].writeList(value.tags, memberWritingClosure: ApplicationSignalsClientTypes.Tag.write(value:to:), memberNodeInfo: "member", isFlattened: false) + } +} + +extension UntagResourceInput { + + static func write(value: UntagResourceInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["ResourceArn"].write(value.resourceArn) + try writer["TagKeys"].writeList(value.tagKeys, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) + } +} + +extension UpdateServiceLevelObjectiveInput { + + static func write(value: UpdateServiceLevelObjectiveInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Description"].write(value.description) + try writer["Goal"].write(value.goal, with: ApplicationSignalsClientTypes.Goal.write(value:to:)) + try writer["SliConfig"].write(value.sliConfig, with: ApplicationSignalsClientTypes.ServiceLevelIndicatorConfig.write(value:to:)) + } +} + +extension BatchGetServiceLevelObjectiveBudgetReportOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> BatchGetServiceLevelObjectiveBudgetReportOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = BatchGetServiceLevelObjectiveBudgetReportOutput() + value.errors = try reader["Errors"].readListIfPresent(memberReadingClosure: ApplicationSignalsClientTypes.ServiceLevelObjectiveBudgetReportError.read(from:), memberNodeInfo: "member", isFlattened: false) + value.reports = try reader["Reports"].readListIfPresent(memberReadingClosure: ApplicationSignalsClientTypes.ServiceLevelObjectiveBudgetReport.read(from:), memberNodeInfo: "member", isFlattened: false) + value.timestamp = try reader["Timestamp"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +extension CreateServiceLevelObjectiveOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CreateServiceLevelObjectiveOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = CreateServiceLevelObjectiveOutput() + value.slo = try reader["Slo"].readIfPresent(with: ApplicationSignalsClientTypes.ServiceLevelObjective.read(from:)) + return value + } +} + +extension DeleteServiceLevelObjectiveOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DeleteServiceLevelObjectiveOutput { + return DeleteServiceLevelObjectiveOutput() + } +} + +extension GetServiceOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetServiceOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = GetServiceOutput() + value.endTime = try reader["EndTime"].readTimestampIfPresent(format: .epochSeconds) + value.service = try reader["Service"].readIfPresent(with: ApplicationSignalsClientTypes.Service.read(from:)) + value.startTime = try reader["StartTime"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +extension GetServiceLevelObjectiveOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetServiceLevelObjectiveOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = GetServiceLevelObjectiveOutput() + value.slo = try reader["Slo"].readIfPresent(with: ApplicationSignalsClientTypes.ServiceLevelObjective.read(from:)) + return value + } +} + +extension ListServiceDependenciesOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListServiceDependenciesOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListServiceDependenciesOutput() + value.endTime = try reader["EndTime"].readTimestampIfPresent(format: .epochSeconds) + value.nextToken = try reader["NextToken"].readIfPresent() + value.serviceDependencies = try reader["ServiceDependencies"].readListIfPresent(memberReadingClosure: ApplicationSignalsClientTypes.ServiceDependency.read(from:), memberNodeInfo: "member", isFlattened: false) + value.startTime = try reader["StartTime"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +extension ListServiceDependentsOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListServiceDependentsOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListServiceDependentsOutput() + value.endTime = try reader["EndTime"].readTimestampIfPresent(format: .epochSeconds) + value.nextToken = try reader["NextToken"].readIfPresent() + value.serviceDependents = try reader["ServiceDependents"].readListIfPresent(memberReadingClosure: ApplicationSignalsClientTypes.ServiceDependent.read(from:), memberNodeInfo: "member", isFlattened: false) + value.startTime = try reader["StartTime"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +extension ListServiceLevelObjectivesOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListServiceLevelObjectivesOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListServiceLevelObjectivesOutput() + value.nextToken = try reader["NextToken"].readIfPresent() + value.sloSummaries = try reader["SloSummaries"].readListIfPresent(memberReadingClosure: ApplicationSignalsClientTypes.ServiceLevelObjectiveSummary.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension ListServiceOperationsOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListServiceOperationsOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListServiceOperationsOutput() + value.endTime = try reader["EndTime"].readTimestampIfPresent(format: .epochSeconds) + value.nextToken = try reader["NextToken"].readIfPresent() + value.serviceOperations = try reader["ServiceOperations"].readListIfPresent(memberReadingClosure: ApplicationSignalsClientTypes.ServiceOperation.read(from:), memberNodeInfo: "member", isFlattened: false) + value.startTime = try reader["StartTime"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +extension ListServicesOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListServicesOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListServicesOutput() + value.endTime = try reader["EndTime"].readTimestampIfPresent(format: .epochSeconds) + value.nextToken = try reader["NextToken"].readIfPresent() + value.serviceSummaries = try reader["ServiceSummaries"].readListIfPresent(memberReadingClosure: ApplicationSignalsClientTypes.ServiceSummary.read(from:), memberNodeInfo: "member", isFlattened: false) + value.startTime = try reader["StartTime"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +extension ListTagsForResourceOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListTagsForResourceOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListTagsForResourceOutput() + value.tags = try reader["Tags"].readListIfPresent(memberReadingClosure: ApplicationSignalsClientTypes.Tag.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension StartDiscoveryOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> StartDiscoveryOutput { + return StartDiscoveryOutput() + } +} + +extension TagResourceOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> TagResourceOutput { + return TagResourceOutput() + } +} + +extension UntagResourceOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> UntagResourceOutput { + return UntagResourceOutput() + } +} + +extension UpdateServiceLevelObjectiveOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> UpdateServiceLevelObjectiveOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = UpdateServiceLevelObjectiveOutput() + value.slo = try reader["Slo"].readIfPresent(with: ApplicationSignalsClientTypes.ServiceLevelObjective.read(from:)) + return value + } +} + +enum BatchGetServiceLevelObjectiveBudgetReportOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationError": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum CreateServiceLevelObjectiveOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDenied": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "ServiceQuotaExceededException": return try ServiceQuotaExceededException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationError": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum DeleteServiceLevelObjectiveOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationError": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum GetServiceOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationError": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum GetServiceLevelObjectiveOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationError": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum ListServiceDependenciesOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationError": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum ListServiceDependentsOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationError": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum ListServiceLevelObjectivesOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationError": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum ListServiceOperationsOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationError": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum ListServicesOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationError": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum ListTagsForResourceOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum StartDiscoveryOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDenied": return try AccessDeniedException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationError": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum TagResourceOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ServiceQuotaExceededException": return try ServiceQuotaExceededException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum UntagResourceOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum UpdateServiceLevelObjectiveOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationError": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +extension ThrottlingException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ThrottlingException { + let reader = baseError.errorBodyReader + var value = ThrottlingException() + value.properties.message = try reader["Message"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension ValidationException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ValidationException { + let reader = baseError.errorBodyReader + var value = ValidationException() + value.properties.message = try reader["message"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension ServiceQuotaExceededException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ServiceQuotaExceededException { + let reader = baseError.errorBodyReader + var value = ServiceQuotaExceededException() + value.properties.message = try reader["Message"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension AccessDeniedException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> AccessDeniedException { + let reader = baseError.errorBodyReader + var value = AccessDeniedException() + value.properties.message = try reader["Message"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension ConflictException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ConflictException { + let reader = baseError.errorBodyReader + var value = ConflictException() + value.properties.message = try reader["Message"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension ResourceNotFoundException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ResourceNotFoundException { + let reader = baseError.errorBodyReader + var value = ResourceNotFoundException() + value.properties.message = try reader["Message"].readIfPresent() + value.properties.resourceId = try reader["ResourceId"].readIfPresent() + value.properties.resourceType = try reader["ResourceType"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension ApplicationSignalsClientTypes.ServiceLevelObjectiveBudgetReport { + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.ServiceLevelObjectiveBudgetReport { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.ServiceLevelObjectiveBudgetReport() + value.arn = try reader["Arn"].readIfPresent() + value.name = try reader["Name"].readIfPresent() + value.budgetStatus = try reader["BudgetStatus"].readIfPresent() + value.attainment = try reader["Attainment"].readIfPresent() + value.totalBudgetSeconds = try reader["TotalBudgetSeconds"].readIfPresent() + value.budgetSecondsRemaining = try reader["BudgetSecondsRemaining"].readIfPresent() + value.sli = try reader["Sli"].readIfPresent(with: ApplicationSignalsClientTypes.ServiceLevelIndicator.read(from:)) + value.goal = try reader["Goal"].readIfPresent(with: ApplicationSignalsClientTypes.Goal.read(from:)) + return value + } +} + +extension ApplicationSignalsClientTypes.Goal { + + static func write(value: ApplicationSignalsClientTypes.Goal?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["AttainmentGoal"].write(value.attainmentGoal) + try writer["Interval"].write(value.interval, with: ApplicationSignalsClientTypes.Interval.write(value:to:)) + try writer["WarningThreshold"].write(value.warningThreshold) + } + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.Goal { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.Goal() + value.interval = try reader["Interval"].readIfPresent(with: ApplicationSignalsClientTypes.Interval.read(from:)) + value.attainmentGoal = try reader["AttainmentGoal"].readIfPresent() + value.warningThreshold = try reader["WarningThreshold"].readIfPresent() + return value + } +} + +extension ApplicationSignalsClientTypes.Interval { + + static func write(value: ApplicationSignalsClientTypes.Interval?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + switch value { + case let .calendarinterval(calendarinterval): + try writer["CalendarInterval"].write(calendarinterval, with: ApplicationSignalsClientTypes.CalendarInterval.write(value:to:)) + case let .rollinginterval(rollinginterval): + try writer["RollingInterval"].write(rollinginterval, with: ApplicationSignalsClientTypes.RollingInterval.write(value:to:)) + case let .sdkUnknown(sdkUnknown): + try writer["sdkUnknown"].write(sdkUnknown) + } + } + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.Interval { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "RollingInterval": + return .rollinginterval(try reader["RollingInterval"].read(with: ApplicationSignalsClientTypes.RollingInterval.read(from:))) + case "CalendarInterval": + return .calendarinterval(try reader["CalendarInterval"].read(with: ApplicationSignalsClientTypes.CalendarInterval.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension ApplicationSignalsClientTypes.CalendarInterval { + + static func write(value: ApplicationSignalsClientTypes.CalendarInterval?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Duration"].write(value.duration) + try writer["DurationUnit"].write(value.durationUnit) + try writer["StartTime"].writeTimestamp(value.startTime, format: .epochSeconds) + } + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.CalendarInterval { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.CalendarInterval() + value.startTime = try reader["StartTime"].readTimestampIfPresent(format: .epochSeconds) + value.durationUnit = try reader["DurationUnit"].readIfPresent() + value.duration = try reader["Duration"].readIfPresent() + return value + } +} + +extension ApplicationSignalsClientTypes.RollingInterval { + + static func write(value: ApplicationSignalsClientTypes.RollingInterval?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Duration"].write(value.duration) + try writer["DurationUnit"].write(value.durationUnit) + } + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.RollingInterval { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.RollingInterval() + value.durationUnit = try reader["DurationUnit"].readIfPresent() + value.duration = try reader["Duration"].readIfPresent() + return value + } +} + +extension ApplicationSignalsClientTypes.ServiceLevelIndicator { + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.ServiceLevelIndicator { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.ServiceLevelIndicator() + value.sliMetric = try reader["SliMetric"].readIfPresent(with: ApplicationSignalsClientTypes.ServiceLevelIndicatorMetric.read(from:)) + value.metricThreshold = try reader["MetricThreshold"].readIfPresent() + value.comparisonOperator = try reader["ComparisonOperator"].readIfPresent() + return value + } +} + +extension ApplicationSignalsClientTypes.ServiceLevelIndicatorMetric { + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.ServiceLevelIndicatorMetric { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.ServiceLevelIndicatorMetric() + value.keyAttributes = try reader["KeyAttributes"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + value.operationName = try reader["OperationName"].readIfPresent() + value.metricType = try reader["MetricType"].readIfPresent() + value.metricDataQueries = try reader["MetricDataQueries"].readListIfPresent(memberReadingClosure: ApplicationSignalsClientTypes.MetricDataQuery.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension ApplicationSignalsClientTypes.MetricDataQuery { + + static func write(value: ApplicationSignalsClientTypes.MetricDataQuery?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["AccountId"].write(value.accountId) + try writer["Expression"].write(value.expression) + try writer["Id"].write(value.id) + try writer["Label"].write(value.label) + try writer["MetricStat"].write(value.metricStat, with: ApplicationSignalsClientTypes.MetricStat.write(value:to:)) + try writer["Period"].write(value.period) + try writer["ReturnData"].write(value.returnData) + } + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.MetricDataQuery { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.MetricDataQuery() + value.id = try reader["Id"].readIfPresent() + value.metricStat = try reader["MetricStat"].readIfPresent(with: ApplicationSignalsClientTypes.MetricStat.read(from:)) + value.expression = try reader["Expression"].readIfPresent() + value.label = try reader["Label"].readIfPresent() + value.returnData = try reader["ReturnData"].readIfPresent() + value.period = try reader["Period"].readIfPresent() + value.accountId = try reader["AccountId"].readIfPresent() + return value + } +} + +extension ApplicationSignalsClientTypes.MetricStat { + + static func write(value: ApplicationSignalsClientTypes.MetricStat?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Metric"].write(value.metric, with: ApplicationSignalsClientTypes.Metric.write(value:to:)) + try writer["Period"].write(value.period) + try writer["Stat"].write(value.stat) + try writer["Unit"].write(value.unit) + } + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.MetricStat { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.MetricStat() + value.metric = try reader["Metric"].readIfPresent(with: ApplicationSignalsClientTypes.Metric.read(from:)) + value.period = try reader["Period"].readIfPresent() + value.stat = try reader["Stat"].readIfPresent() + value.unit = try reader["Unit"].readIfPresent() + return value + } +} + +extension ApplicationSignalsClientTypes.Metric { + + static func write(value: ApplicationSignalsClientTypes.Metric?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Dimensions"].writeList(value.dimensions, memberWritingClosure: ApplicationSignalsClientTypes.Dimension.write(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["MetricName"].write(value.metricName) + try writer["Namespace"].write(value.namespace) + } + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.Metric { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.Metric() + value.namespace = try reader["Namespace"].readIfPresent() + value.metricName = try reader["MetricName"].readIfPresent() + value.dimensions = try reader["Dimensions"].readListIfPresent(memberReadingClosure: ApplicationSignalsClientTypes.Dimension.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension ApplicationSignalsClientTypes.Dimension { + + static func write(value: ApplicationSignalsClientTypes.Dimension?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Name"].write(value.name) + try writer["Value"].write(value.value) + } + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.Dimension { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.Dimension() + value.name = try reader["Name"].readIfPresent() + value.value = try reader["Value"].readIfPresent() + return value + } +} + +extension ApplicationSignalsClientTypes.ServiceLevelObjectiveBudgetReportError { + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.ServiceLevelObjectiveBudgetReportError { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.ServiceLevelObjectiveBudgetReportError() + value.name = try reader["Name"].readIfPresent() + value.arn = try reader["Arn"].readIfPresent() + value.errorCode = try reader["ErrorCode"].readIfPresent() + value.errorMessage = try reader["ErrorMessage"].readIfPresent() + return value + } +} + +extension ApplicationSignalsClientTypes.ServiceLevelObjective { + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.ServiceLevelObjective { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.ServiceLevelObjective() + value.arn = try reader["Arn"].readIfPresent() + value.name = try reader["Name"].readIfPresent() + value.description = try reader["Description"].readIfPresent() + value.createdTime = try reader["CreatedTime"].readTimestampIfPresent(format: .epochSeconds) + value.lastUpdatedTime = try reader["LastUpdatedTime"].readTimestampIfPresent(format: .epochSeconds) + value.sli = try reader["Sli"].readIfPresent(with: ApplicationSignalsClientTypes.ServiceLevelIndicator.read(from:)) + value.goal = try reader["Goal"].readIfPresent(with: ApplicationSignalsClientTypes.Goal.read(from:)) + return value + } +} + +extension ApplicationSignalsClientTypes.Service { + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.Service { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.Service() + value.keyAttributes = try reader["KeyAttributes"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + value.attributeMaps = try reader["AttributeMaps"].readListIfPresent(memberReadingClosure: SmithyReadWrite.mapReadingClosure(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false), memberNodeInfo: "member", isFlattened: false) + value.metricReferences = try reader["MetricReferences"].readListIfPresent(memberReadingClosure: ApplicationSignalsClientTypes.MetricReference.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension ApplicationSignalsClientTypes.MetricReference { + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.MetricReference { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.MetricReference() + value.namespace = try reader["Namespace"].readIfPresent() + value.metricType = try reader["MetricType"].readIfPresent() + value.dimensions = try reader["Dimensions"].readListIfPresent(memberReadingClosure: ApplicationSignalsClientTypes.Dimension.read(from:), memberNodeInfo: "member", isFlattened: false) + value.metricName = try reader["MetricName"].readIfPresent() + return value + } +} + +extension ApplicationSignalsClientTypes.ServiceDependency { + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.ServiceDependency { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.ServiceDependency() + value.operationName = try reader["OperationName"].readIfPresent() + value.dependencyKeyAttributes = try reader["DependencyKeyAttributes"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + value.dependencyOperationName = try reader["DependencyOperationName"].readIfPresent() + value.metricReferences = try reader["MetricReferences"].readListIfPresent(memberReadingClosure: ApplicationSignalsClientTypes.MetricReference.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension ApplicationSignalsClientTypes.ServiceDependent { + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.ServiceDependent { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.ServiceDependent() + value.operationName = try reader["OperationName"].readIfPresent() + value.dependentKeyAttributes = try reader["DependentKeyAttributes"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + value.dependentOperationName = try reader["DependentOperationName"].readIfPresent() + value.metricReferences = try reader["MetricReferences"].readListIfPresent(memberReadingClosure: ApplicationSignalsClientTypes.MetricReference.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension ApplicationSignalsClientTypes.ServiceLevelObjectiveSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.ServiceLevelObjectiveSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.ServiceLevelObjectiveSummary() + value.arn = try reader["Arn"].readIfPresent() + value.name = try reader["Name"].readIfPresent() + value.keyAttributes = try reader["KeyAttributes"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + value.operationName = try reader["OperationName"].readIfPresent() + value.createdTime = try reader["CreatedTime"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +extension ApplicationSignalsClientTypes.ServiceOperation { + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.ServiceOperation { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.ServiceOperation() + value.name = try reader["Name"].readIfPresent() + value.metricReferences = try reader["MetricReferences"].readListIfPresent(memberReadingClosure: ApplicationSignalsClientTypes.MetricReference.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension ApplicationSignalsClientTypes.ServiceSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.ServiceSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.ServiceSummary() + value.keyAttributes = try reader["KeyAttributes"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + value.attributeMaps = try reader["AttributeMaps"].readListIfPresent(memberReadingClosure: SmithyReadWrite.mapReadingClosure(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false), memberNodeInfo: "member", isFlattened: false) + value.metricReferences = try reader["MetricReferences"].readListIfPresent(memberReadingClosure: ApplicationSignalsClientTypes.MetricReference.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension ApplicationSignalsClientTypes.Tag { + + static func write(value: ApplicationSignalsClientTypes.Tag?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Key"].write(value.key) + try writer["Value"].write(value.value) + } + + static func read(from reader: SmithyJSON.Reader) throws -> ApplicationSignalsClientTypes.Tag { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ApplicationSignalsClientTypes.Tag() + value.key = try reader["Key"].readIfPresent() + value.value = try reader["Value"].readIfPresent() + return value + } +} + +extension ApplicationSignalsClientTypes.ServiceLevelIndicatorConfig { + + static func write(value: ApplicationSignalsClientTypes.ServiceLevelIndicatorConfig?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["ComparisonOperator"].write(value.comparisonOperator) + try writer["MetricThreshold"].write(value.metricThreshold) + try writer["SliMetricConfig"].write(value.sliMetricConfig, with: ApplicationSignalsClientTypes.ServiceLevelIndicatorMetricConfig.write(value:to:)) + } +} + +extension ApplicationSignalsClientTypes.ServiceLevelIndicatorMetricConfig { + + static func write(value: ApplicationSignalsClientTypes.ServiceLevelIndicatorMetricConfig?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["KeyAttributes"].writeMap(value.keyAttributes, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + try writer["MetricDataQueries"].writeList(value.metricDataQueries, memberWritingClosure: ApplicationSignalsClientTypes.MetricDataQuery.write(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["MetricType"].write(value.metricType) + try writer["OperationName"].write(value.operationName) + try writer["PeriodSeconds"].write(value.periodSeconds) + try writer["Statistic"].write(value.statistic) + } +} + +public enum ApplicationSignalsClientTypes {} diff --git a/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/Paginators.swift b/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/Paginators.swift new file mode 100644 index 00000000000..36f31278bd1 --- /dev/null +++ b/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/Paginators.swift @@ -0,0 +1,137 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import Foundation +import protocol ClientRuntime.PaginateToken +import struct ClientRuntime.PaginatorSequence + +extension ApplicationSignalsClient { + /// Paginate over `[ListServiceDependenciesOutput]` results. + /// + /// When this operation is called, an `AsyncSequence` is created. AsyncSequences are lazy so no service + /// calls are made until the sequence is iterated over. This also means there is no guarantee that the request is valid + /// until then. If there are errors in your request, you will see the failures only after you start iterating. + /// - Parameters: + /// - input: A `[ListServiceDependenciesInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListServiceDependenciesOutput` + public func listServiceDependenciesPaginated(input: ListServiceDependenciesInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \.nextToken, outputKey: \.nextToken, paginationFunction: self.listServiceDependencies(input:)) + } +} + +extension ListServiceDependenciesInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListServiceDependenciesInput { + return ListServiceDependenciesInput( + endTime: self.endTime, + keyAttributes: self.keyAttributes, + maxResults: self.maxResults, + nextToken: token, + startTime: self.startTime + )} +} + +extension PaginatorSequence where OperationStackInput == ListServiceDependenciesInput, OperationStackOutput == ListServiceDependenciesOutput { + /// This paginator transforms the `AsyncSequence` returned by `listServiceDependenciesPaginated` + /// to access the nested member `[ApplicationSignalsClientTypes.ServiceDependency]` + /// - Returns: `[ApplicationSignalsClientTypes.ServiceDependency]` + public func serviceDependencies() async throws -> [ApplicationSignalsClientTypes.ServiceDependency] { + return try await self.asyncCompactMap { item in item.serviceDependencies } + } +} +extension ApplicationSignalsClient { + /// Paginate over `[ListServiceDependentsOutput]` results. + /// + /// When this operation is called, an `AsyncSequence` is created. AsyncSequences are lazy so no service + /// calls are made until the sequence is iterated over. This also means there is no guarantee that the request is valid + /// until then. If there are errors in your request, you will see the failures only after you start iterating. + /// - Parameters: + /// - input: A `[ListServiceDependentsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListServiceDependentsOutput` + public func listServiceDependentsPaginated(input: ListServiceDependentsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \.nextToken, outputKey: \.nextToken, paginationFunction: self.listServiceDependents(input:)) + } +} + +extension ListServiceDependentsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListServiceDependentsInput { + return ListServiceDependentsInput( + endTime: self.endTime, + keyAttributes: self.keyAttributes, + maxResults: self.maxResults, + nextToken: token, + startTime: self.startTime + )} +} + +extension PaginatorSequence where OperationStackInput == ListServiceDependentsInput, OperationStackOutput == ListServiceDependentsOutput { + /// This paginator transforms the `AsyncSequence` returned by `listServiceDependentsPaginated` + /// to access the nested member `[ApplicationSignalsClientTypes.ServiceDependent]` + /// - Returns: `[ApplicationSignalsClientTypes.ServiceDependent]` + public func serviceDependents() async throws -> [ApplicationSignalsClientTypes.ServiceDependent] { + return try await self.asyncCompactMap { item in item.serviceDependents } + } +} +extension ApplicationSignalsClient { + /// Paginate over `[ListServiceOperationsOutput]` results. + /// + /// When this operation is called, an `AsyncSequence` is created. AsyncSequences are lazy so no service + /// calls are made until the sequence is iterated over. This also means there is no guarantee that the request is valid + /// until then. If there are errors in your request, you will see the failures only after you start iterating. + /// - Parameters: + /// - input: A `[ListServiceOperationsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListServiceOperationsOutput` + public func listServiceOperationsPaginated(input: ListServiceOperationsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \.nextToken, outputKey: \.nextToken, paginationFunction: self.listServiceOperations(input:)) + } +} + +extension ListServiceOperationsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListServiceOperationsInput { + return ListServiceOperationsInput( + endTime: self.endTime, + keyAttributes: self.keyAttributes, + maxResults: self.maxResults, + nextToken: token, + startTime: self.startTime + )} +} + +extension PaginatorSequence where OperationStackInput == ListServiceOperationsInput, OperationStackOutput == ListServiceOperationsOutput { + /// This paginator transforms the `AsyncSequence` returned by `listServiceOperationsPaginated` + /// to access the nested member `[ApplicationSignalsClientTypes.ServiceOperation]` + /// - Returns: `[ApplicationSignalsClientTypes.ServiceOperation]` + public func serviceOperations() async throws -> [ApplicationSignalsClientTypes.ServiceOperation] { + return try await self.asyncCompactMap { item in item.serviceOperations } + } +} +extension ApplicationSignalsClient { + /// Paginate over `[ListServicesOutput]` results. + /// + /// When this operation is called, an `AsyncSequence` is created. AsyncSequences are lazy so no service + /// calls are made until the sequence is iterated over. This also means there is no guarantee that the request is valid + /// until then. If there are errors in your request, you will see the failures only after you start iterating. + /// - Parameters: + /// - input: A `[ListServicesInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListServicesOutput` + public func listServicesPaginated(input: ListServicesInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \.nextToken, outputKey: \.nextToken, paginationFunction: self.listServices(input:)) + } +} + +extension ListServicesInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListServicesInput { + return ListServicesInput( + endTime: self.endTime, + maxResults: self.maxResults, + nextToken: token, + startTime: self.startTime + )} +} + +extension PaginatorSequence where OperationStackInput == ListServicesInput, OperationStackOutput == ListServicesOutput { + /// This paginator transforms the `AsyncSequence` returned by `listServicesPaginated` + /// to access the nested member `[ApplicationSignalsClientTypes.ServiceSummary]` + /// - Returns: `[ApplicationSignalsClientTypes.ServiceSummary]` + public func serviceSummaries() async throws -> [ApplicationSignalsClientTypes.ServiceSummary] { + return try await self.asyncCompactMap { item in item.serviceSummaries } + } +} diff --git a/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/Plugins.swift b/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/Plugins.swift new file mode 100644 index 00000000000..9a24872e466 --- /dev/null +++ b/Sources/Services/AWSApplicationSignals/Sources/AWSApplicationSignals/Plugins.swift @@ -0,0 +1,66 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import class AWSClientRuntime.AWSClientConfigDefaultsProvider +import protocol ClientRuntime.ClientConfiguration +import protocol ClientRuntime.Plugin +import protocol SmithyHTTPAuthAPI.AuthSchemeResolver +import protocol SmithyIdentity.AWSCredentialIdentityResolver +import struct AWSSDKHTTPAuth.SigV4AuthScheme +import typealias SmithyHTTPAuthAPI.AuthSchemes + +public class ApplicationSignalsClientEndpointPlugin: Plugin { + private var endpointResolver: EndpointResolver + + public init(endpointResolver: EndpointResolver) { + self.endpointResolver = endpointResolver + } + + public convenience init() throws { + self.init(endpointResolver: try DefaultEndpointResolver()) + } + + public func configureClient(clientConfiguration: ClientRuntime.ClientConfiguration) throws { + if let config = clientConfiguration as? ApplicationSignalsClient.ApplicationSignalsClientConfiguration { + config.endpointResolver = self.endpointResolver + } + } +} + +public class DefaultAWSAuthSchemePlugin: ClientRuntime.Plugin { + + public init() {} + + public func configureClient(clientConfiguration: ClientRuntime.ClientConfiguration) throws { + if let config = clientConfiguration as? ApplicationSignalsClient.ApplicationSignalsClientConfiguration { + config.authSchemeResolver = DefaultApplicationSignalsAuthSchemeResolver() + config.authSchemes = [AWSSDKHTTPAuth.SigV4AuthScheme()] + config.awsCredentialIdentityResolver = try AWSClientRuntime.AWSClientConfigDefaultsProvider.awsCredentialIdentityResolver() + } + } +} + +public class ApplicationSignalsClientAuthSchemePlugin: ClientRuntime.Plugin { + private var authSchemes: SmithyHTTPAuthAPI.AuthSchemes? + private var authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver? + private var awsCredentialIdentityResolver: (any SmithyIdentity.AWSCredentialIdentityResolver)? + + public init(authSchemes: SmithyHTTPAuthAPI.AuthSchemes? = nil, authSchemeResolver: ApplicationSignalsAuthSchemeResolver? = nil, awsCredentialIdentityResolver: (any SmithyIdentity.AWSCredentialIdentityResolver)? = nil) { + self.authSchemeResolver = authSchemeResolver + self.authSchemes = authSchemes + self.awsCredentialIdentityResolver = awsCredentialIdentityResolver + } + + public func configureClient(clientConfiguration: ClientRuntime.ClientConfiguration) throws { + if let config = clientConfiguration as? ApplicationSignalsClient.ApplicationSignalsClientConfiguration { + if (self.authSchemes != nil) { + config.authSchemes = self.authSchemes + } + if (self.authSchemeResolver != nil) { + config.authSchemeResolver = self.authSchemeResolver! + } + if (self.awsCredentialIdentityResolver != nil) { + config.awsCredentialIdentityResolver = self.awsCredentialIdentityResolver! + } + } + } +} diff --git a/Sources/Services/AWSApplicationSignals/Tests/AWSApplicationSignalsTests/EndpointResolverTest.swift b/Sources/Services/AWSApplicationSignals/Tests/AWSApplicationSignalsTests/EndpointResolverTest.swift new file mode 100644 index 00000000000..e32bc7bba60 --- /dev/null +++ b/Sources/Services/AWSApplicationSignals/Tests/AWSApplicationSignalsTests/EndpointResolverTest.swift @@ -0,0 +1,335 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +@testable import AWSApplicationSignals +import XCTest +import enum ClientRuntime.EndpointError +import struct AwsCommonRuntimeKit.CommonRuntimeKit +import struct SmithyHTTPAPI.Endpoint +import struct SmithyHTTPAPI.Headers + +class EndpointResolverTest: XCTestCase { + + override class func setUp() { + AwsCommonRuntimeKit.CommonRuntimeKit.initialize() + } + + /// For custom endpoint with region not set and fips disabled + func testResolve1() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://example.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For custom endpoint with fips enabled + func testResolve2() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case ClientRuntime.EndpointError.unresolved(let message): + XCTAssertEqual("Invalid Configuration: FIPS and custom endpoint are not supported", message) + default: + XCTFail() + } + } + } + + /// For region us-east-1 with FIPS enabled and DualStack enabled + func testResolve3() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://application-signals-fips.us-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-east-1 with FIPS disabled and DualStack enabled + func testResolve4() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://application-signals.us-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-northwest-1 with FIPS enabled and DualStack enabled + func testResolve5() throws { + let endpointParams = EndpointParams( + region: "cn-northwest-1", + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://application-signals-fips.cn-northwest-1.api.amazonwebservices.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-northwest-1 with FIPS disabled and DualStack enabled + func testResolve6() throws { + let endpointParams = EndpointParams( + region: "cn-northwest-1", + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://application-signals.cn-northwest-1.api.amazonwebservices.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-gov-west-1 with FIPS enabled and DualStack enabled + func testResolve7() throws { + let endpointParams = EndpointParams( + region: "us-gov-west-1", + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://application-signals-fips.us-gov-west-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-gov-west-1 with FIPS disabled and DualStack enabled + func testResolve8() throws { + let endpointParams = EndpointParams( + region: "us-gov-west-1", + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://application-signals.us-gov-west-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-iso-east-1 with FIPS enabled and DualStack enabled + func testResolve9() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://application-signals-fips.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-iso-east-1 with FIPS disabled and DualStack enabled + func testResolve10() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://application-signals.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-isob-east-1 with FIPS enabled and DualStack enabled + func testResolve11() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://application-signals-fips.us-isob-east-1.sc2s.sgov.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-isob-east-1 with FIPS disabled and DualStack enabled + func testResolve12() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://application-signals.us-isob-east-1.sc2s.sgov.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region eu-isoe-west-1 with FIPS enabled and DualStack enabled + func testResolve13() throws { + let endpointParams = EndpointParams( + region: "eu-isoe-west-1", + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://application-signals-fips.eu-isoe-west-1.cloud.adc-e.uk", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region eu-isoe-west-1 with FIPS disabled and DualStack enabled + func testResolve14() throws { + let endpointParams = EndpointParams( + region: "eu-isoe-west-1", + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://application-signals.eu-isoe-west-1.cloud.adc-e.uk", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-isof-south-1 with FIPS enabled and DualStack enabled + func testResolve15() throws { + let endpointParams = EndpointParams( + region: "us-isof-south-1", + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://application-signals-fips.us-isof-south-1.csp.hci.ic.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-isof-south-1 with FIPS disabled and DualStack enabled + func testResolve16() throws { + let endpointParams = EndpointParams( + region: "us-isof-south-1", + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://application-signals.us-isof-south-1.csp.hci.ic.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// Missing region + func testResolve17() throws { + let endpointParams = EndpointParams( + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case ClientRuntime.EndpointError.unresolved(let message): + XCTAssertEqual("Invalid Configuration: Missing Region", message) + default: + XCTFail() + } + } + } + +} diff --git a/Sources/Services/AWSAuditManager/Sources/AWSAuditManager/AuditManagerClient.swift b/Sources/Services/AWSAuditManager/Sources/AWSAuditManager/AuditManagerClient.swift index fa8ed182520..59d1c00bddf 100644 --- a/Sources/Services/AWSAuditManager/Sources/AWSAuditManager/AuditManagerClient.swift +++ b/Sources/Services/AWSAuditManager/Sources/AWSAuditManager/AuditManagerClient.swift @@ -488,6 +488,7 @@ extension AuditManagerClient { /// - `InternalServerException` : An internal service error occurred during the processing of your request. Try again later. /// - `ResourceNotFoundException` : The resource that's specified in the request can't be found. /// - `ServiceQuotaExceededException` : You've reached your account quota for this resource type. To perform the requested action, delete some existing resources or [request a quota increase](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) from the Service Quotas console. For a list of Audit Manager service quotas, see [Quotas and restrictions for Audit Manager](https://docs.aws.amazon.com/audit-manager/latest/userguide/service-quotas.html). + /// - `ThrottlingException` : The request was denied due to request throttling. /// - `ValidationException` : The request has invalid or missing parameters. public func createAssessment(input: CreateAssessmentInput) async throws -> CreateAssessmentOutput { let context = Smithy.ContextBuilder() @@ -1870,7 +1871,7 @@ extension AuditManagerClient { /// Performs the `GetServicesInScope` operation on the `BedrockAssessmentManagerLambda` service. /// - /// Gets a list of all of the Amazon Web Services that you can choose to include in your assessment. When you [create an assessment](https://docs.aws.amazon.com/audit-manager/latest/APIReference/API_CreateAssessment.html), specify which of these services you want to include to narrow the assessment's [scope](https://docs.aws.amazon.com/audit-manager/latest/APIReference/API_Scope.html). + /// Gets a list of the Amazon Web Services from which Audit Manager can collect evidence. Audit Manager defines which Amazon Web Services are in scope for an assessment. Audit Manager infers this scope by examining the assessment’s controls and their data sources, and then mapping this information to one or more of the corresponding Amazon Web Services that are in this list. For information about why it's no longer possible to specify services in scope manually, see [I can't edit the services in scope for my assessment](https://docs.aws.amazon.com/audit-manager/latest/userguide/evidence-collection-issues.html#unable-to-edit-services) in the Troubleshooting section of the Audit Manager user guide. /// /// - Parameter GetServicesInScopeInput : [no documentation found] /// @@ -2204,7 +2205,7 @@ extension AuditManagerClient { /// Performs the `ListControlDomainInsights` operation on the `BedrockAssessmentManagerLambda` service. /// - /// Lists the latest analytics data for control domains across all of your active assessments. A control domain is listed only if at least one of the controls within that domain collected evidence on the lastUpdated date of controlDomainInsights. If this condition isn’t met, no data is listed for that control domain. + /// Lists the latest analytics data for control domains across all of your active assessments. Audit Manager supports the control domains that are provided by Amazon Web Services Control Catalog. For information about how to find a list of available control domains, see [ListDomains](https://docs.aws.amazon.com/controlcatalog/latest/APIReference/API_ListDomains.html) in the Amazon Web Services Control Catalog API Reference. A control domain is listed only if at least one of the controls within that domain collected evidence on the lastUpdated date of controlDomainInsights. If this condition isn’t met, no data is listed for that control domain. /// /// - Parameter ListControlDomainInsightsInput : [no documentation found] /// @@ -2253,7 +2254,7 @@ extension AuditManagerClient { /// Performs the `ListControlDomainInsightsByAssessment` operation on the `BedrockAssessmentManagerLambda` service. /// - /// Lists analytics data for control domains within a specified active assessment. A control domain is listed only if at least one of the controls within that domain collected evidence on the lastUpdated date of controlDomainInsights. If this condition isn’t met, no data is listed for that domain. + /// Lists analytics data for control domains within a specified active assessment. Audit Manager supports the control domains that are provided by Amazon Web Services Control Catalog. For information about how to find a list of available control domains, see [ListDomains](https://docs.aws.amazon.com/controlcatalog/latest/APIReference/API_ListDomains.html) in the Amazon Web Services Control Catalog API Reference. A control domain is listed only if at least one of the controls within that domain collected evidence on the lastUpdated date of controlDomainInsights. If this condition isn’t met, no data is listed for that domain. /// /// - Parameter ListControlDomainInsightsByAssessmentInput : [no documentation found] /// @@ -2817,6 +2818,7 @@ extension AuditManagerClient { /// - `AccessDeniedException` : Your account isn't registered with Audit Manager. Check the delegated administrator setup on the Audit Manager settings page, and try again. /// - `InternalServerException` : An internal service error occurred during the processing of your request. Try again later. /// - `ResourceNotFoundException` : The resource that's specified in the request can't be found. + /// - `ThrottlingException` : The request was denied due to request throttling. /// - `ValidationException` : The request has invalid or missing parameters. public func updateAssessment(input: UpdateAssessmentInput) async throws -> UpdateAssessmentOutput { let context = Smithy.ContextBuilder() diff --git a/Sources/Services/AWSAuditManager/Sources/AWSAuditManager/Models.swift b/Sources/Services/AWSAuditManager/Sources/AWSAuditManager/Models.swift index 4d7d2539327..595c533e1f4 100644 --- a/Sources/Services/AWSAuditManager/Sources/AWSAuditManager/Models.swift +++ b/Sources/Services/AWSAuditManager/Sources/AWSAuditManager/Models.swift @@ -293,6 +293,11 @@ extension AuditManagerClientTypes { } +extension AuditManagerClientTypes.AssessmentControl: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "AssessmentControl(assessmentReportEvidenceCount: \(Swift.String(describing: assessmentReportEvidenceCount)), comments: \(Swift.String(describing: comments)), evidenceCount: \(Swift.String(describing: evidenceCount)), evidenceSources: \(Swift.String(describing: evidenceSources)), id: \(Swift.String(describing: id)), name: \(Swift.String(describing: name)), response: \(Swift.String(describing: response)), status: \(Swift.String(describing: status)), description: \"CONTENT_REDACTED\")"} +} + extension AuditManagerClientTypes { public enum RoleType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { @@ -659,11 +664,12 @@ extension AuditManagerClientTypes { } extension AuditManagerClientTypes { - /// The wrapper that contains the Amazon Web Services accounts and services that are in scope for the assessment. + /// The wrapper that contains the Amazon Web Services accounts that are in scope for the assessment. You no longer need to specify which Amazon Web Services are in scope when you create or update an assessment. Audit Manager infers the services in scope by examining your assessment controls and their data sources, and then mapping this information to the relevant Amazon Web Services. If an underlying data source changes for your assessment, we automatically update the services scope as needed to reflect the correct Amazon Web Services. This ensures that your assessment collects accurate and comprehensive evidence about all of the relevant services in your AWS environment. public struct Scope { /// The Amazon Web Services accounts that are included in the scope of the assessment. public var awsAccounts: [AuditManagerClientTypes.AWSAccount]? - /// The Amazon Web Services services that are included in the scope of the assessment. + /// The Amazon Web Services services that are included in the scope of the assessment. This API parameter is no longer supported. If you use this parameter to specify one or more Amazon Web Services, Audit Manager ignores this input. Instead, the value for awsServices will show as empty. + @available(*, deprecated, message: "You can't specify services in scope when creating/updating an assessment. If you use the parameter to specify one or more AWS services, Audit Manager ignores the input. Instead the value of the parameter will show as empty indicating that the services are defined and managed by Audit Manager.") public var awsServices: [AuditManagerClientTypes.AWSService]? public init( @@ -1885,7 +1891,7 @@ public struct CreateAssessmentInput { /// The list of roles for the assessment. /// This member is required. public var roles: [AuditManagerClientTypes.Role]? - /// The wrapper that contains the Amazon Web Services accounts and services that are in scope for the assessment. + /// The wrapper that contains the Amazon Web Services accounts that are in scope for the assessment. You no longer need to specify which Amazon Web Services are in scope when you create or update an assessment. Audit Manager infers the services in scope by examining your assessment controls and their data sources, and then mapping this information to the relevant Amazon Web Services. If an underlying data source changes for your assessment, we automatically update the services scope as needed to reflect the correct Amazon Web Services. This ensures that your assessment collects accurate and comprehensive evidence about all of the relevant services in your AWS environment. /// This member is required. public var scope: AuditManagerClientTypes.Scope? /// The tags that are associated with the assessment. @@ -2183,6 +2189,8 @@ extension AuditManagerClientTypes { case awsCloudtrail case awsConfig case awsSecurityHub + case commonControl + case coreControl case manual case sdkUnknown(Swift.String) @@ -2192,6 +2200,8 @@ extension AuditManagerClientTypes { .awsCloudtrail, .awsConfig, .awsSecurityHub, + .commonControl, + .coreControl, .manual ] } @@ -2207,6 +2217,8 @@ extension AuditManagerClientTypes { case .awsCloudtrail: return "AWS_Cloudtrail" case .awsConfig: return "AWS_Config" case .awsSecurityHub: return "AWS_Security_Hub" + case .commonControl: return "Common_Control" + case .coreControl: return "Core_Control" case .manual: return "MANUAL" case let .sdkUnknown(s): return s } @@ -2235,9 +2247,13 @@ extension AuditManagerClientTypes { public var sourceKeyword: AuditManagerClientTypes.SourceKeyword? /// The name of the source. public var sourceName: Swift.String? - /// The setup option for the data source. This option reflects if the evidence collection is automated or manual. + /// The setup option for the data source. This option reflects if the evidence collection method is automated or manual. If you don’t provide a value for sourceSetUpOption, Audit Manager automatically infers and populates the correct value based on the sourceType that you specify. public var sourceSetUpOption: AuditManagerClientTypes.SourceSetUpOption? - /// Specifies one of the five data source types for evidence collection. + /// Specifies which type of data source is used to collect evidence. + /// + /// * The source can be an individual data source type, such as AWS_Cloudtrail, AWS_Config, AWS_Security_Hub, AWS_API_Call, or MANUAL. + /// + /// * The source can also be a managed grouping of data sources, such as a Core_Control or a Common_Control. public var sourceType: AuditManagerClientTypes.SourceType? /// The instructions for troubleshooting the control. public var troubleshootingText: Swift.String? @@ -2271,15 +2287,46 @@ extension AuditManagerClientTypes.ControlMappingSource: Swift.CustomDebugStringC "ControlMappingSource(sourceDescription: \(Swift.String(describing: sourceDescription)), sourceFrequency: \(Swift.String(describing: sourceFrequency)), sourceId: \(Swift.String(describing: sourceId)), sourceKeyword: \(Swift.String(describing: sourceKeyword)), sourceName: \(Swift.String(describing: sourceName)), sourceSetUpOption: \(Swift.String(describing: sourceSetUpOption)), sourceType: \(Swift.String(describing: sourceType)), troubleshootingText: \"CONTENT_REDACTED\")"} } +extension AuditManagerClientTypes { + + public enum ControlState: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case active + case endOfSupport + case sdkUnknown(Swift.String) + + public static var allCases: [ControlState] { + return [ + .active, + .endOfSupport + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .active: return "ACTIVE" + case .endOfSupport: return "END_OF_SUPPORT" + case let .sdkUnknown(s): return s + } + } + } +} + extension AuditManagerClientTypes { public enum ControlType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case core case custom case standard case sdkUnknown(Swift.String) public static var allCases: [ControlType] { return [ + .core, .custom, .standard ] @@ -2292,6 +2339,7 @@ extension AuditManagerClientTypes { public var rawValue: Swift.String { switch self { + case .core: return "Core" case .custom: return "Custom" case .standard: return "Standard" case let .sdkUnknown(s): return s @@ -2327,6 +2375,8 @@ extension AuditManagerClientTypes { public var lastUpdatedBy: Swift.String? /// The name of the control. public var name: Swift.String? + /// The state of the control. The END_OF_SUPPORT state is applicable to standard controls only. This state indicates that the standard control can still be used to collect evidence, but Audit Manager is no longer updating or maintaining that control. + public var state: AuditManagerClientTypes.ControlState? /// The tags associated with the control. public var tags: [Swift.String: Swift.String]? /// The steps that you should follow to determine if the control has been satisfied. @@ -2347,6 +2397,7 @@ extension AuditManagerClientTypes { lastUpdatedAt: Foundation.Date? = nil, lastUpdatedBy: Swift.String? = nil, name: Swift.String? = nil, + state: AuditManagerClientTypes.ControlState? = nil, tags: [Swift.String: Swift.String]? = nil, testingInformation: Swift.String? = nil, type: AuditManagerClientTypes.ControlType? = nil @@ -2364,6 +2415,7 @@ extension AuditManagerClientTypes { self.lastUpdatedAt = lastUpdatedAt self.lastUpdatedBy = lastUpdatedBy self.name = name + self.state = state self.tags = tags self.testingInformation = testingInformation self.type = type @@ -2374,7 +2426,7 @@ extension AuditManagerClientTypes { extension AuditManagerClientTypes.Control: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "Control(arn: \(Swift.String(describing: arn)), controlMappingSources: \(Swift.String(describing: controlMappingSources)), controlSources: \(Swift.String(describing: controlSources)), createdAt: \(Swift.String(describing: createdAt)), description: \(Swift.String(describing: description)), id: \(Swift.String(describing: id)), lastUpdatedAt: \(Swift.String(describing: lastUpdatedAt)), name: \(Swift.String(describing: name)), tags: \(Swift.String(describing: tags)), type: \(Swift.String(describing: type)), actionPlanInstructions: \"CONTENT_REDACTED\", actionPlanTitle: \"CONTENT_REDACTED\", createdBy: \"CONTENT_REDACTED\", lastUpdatedBy: \"CONTENT_REDACTED\", testingInformation: \"CONTENT_REDACTED\")"} + "Control(arn: \(Swift.String(describing: arn)), controlMappingSources: \(Swift.String(describing: controlMappingSources)), controlSources: \(Swift.String(describing: controlSources)), createdAt: \(Swift.String(describing: createdAt)), id: \(Swift.String(describing: id)), lastUpdatedAt: \(Swift.String(describing: lastUpdatedAt)), name: \(Swift.String(describing: name)), state: \(Swift.String(describing: state)), tags: \(Swift.String(describing: tags)), type: \(Swift.String(describing: type)), actionPlanInstructions: \"CONTENT_REDACTED\", actionPlanTitle: \"CONTENT_REDACTED\", createdBy: \"CONTENT_REDACTED\", description: \"CONTENT_REDACTED\", lastUpdatedBy: \"CONTENT_REDACTED\", testingInformation: \"CONTENT_REDACTED\")"} } extension AuditManagerClientTypes { @@ -2530,7 +2582,7 @@ public struct CreateAssessmentReportOutput { } extension AuditManagerClientTypes { - /// The control mapping fields that represent the source for evidence collection, along with related parameters and metadata. This doesn't contain mappingID. + /// The mapping attributes that determine the evidence source for a given control, along with related parameters and metadata. This doesn't contain mappingID. public struct CreateControlMappingSource { /// The description of the data source that determines where Audit Manager collects evidence from for the control. public var sourceDescription: Swift.String? @@ -2548,9 +2600,13 @@ extension AuditManagerClientTypes { public var sourceKeyword: AuditManagerClientTypes.SourceKeyword? /// The name of the control mapping data source. public var sourceName: Swift.String? - /// The setup option for the data source, which reflects if the evidence collection is automated or manual. + /// The setup option for the data source. This option reflects if the evidence collection method is automated or manual. If you don’t provide a value for sourceSetUpOption, Audit Manager automatically infers and populates the correct value based on the sourceType that you specify. public var sourceSetUpOption: AuditManagerClientTypes.SourceSetUpOption? - /// Specifies one of the five types of data sources for evidence collection. + /// Specifies which type of data source is used to collect evidence. + /// + /// * The source can be an individual data source type, such as AWS_Cloudtrail, AWS_Config, AWS_Security_Hub, AWS_API_Call, or MANUAL. + /// + /// * The source can also be a managed grouping of data sources, such as a Core_Control or a Common_Control. public var sourceType: AuditManagerClientTypes.SourceType? /// The instructions for troubleshooting the control. public var troubleshootingText: Swift.String? @@ -2622,7 +2678,7 @@ public struct CreateControlInput { extension CreateControlInput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "CreateControlInput(controlMappingSources: \(Swift.String(describing: controlMappingSources)), description: \(Swift.String(describing: description)), name: \(Swift.String(describing: name)), tags: \(Swift.String(describing: tags)), actionPlanInstructions: \"CONTENT_REDACTED\", actionPlanTitle: \"CONTENT_REDACTED\", testingInformation: \"CONTENT_REDACTED\")"} + "CreateControlInput(controlMappingSources: \(Swift.String(describing: controlMappingSources)), name: \(Swift.String(describing: name)), tags: \(Swift.String(describing: tags)), actionPlanInstructions: \"CONTENT_REDACTED\", actionPlanTitle: \"CONTENT_REDACTED\", description: \"CONTENT_REDACTED\", testingInformation: \"CONTENT_REDACTED\")"} } public struct CreateControlOutput { @@ -4036,7 +4092,7 @@ public struct ListAssessmentControlInsightsByControlDomainInput { /// The unique identifier for the active assessment. /// This member is required. public var assessmentId: Swift.String? - /// The unique identifier for the control domain. + /// The unique identifier for the control domain. Audit Manager supports the control domains that are provided by Amazon Web Services Control Catalog. For information about how to find a list of available control domains, see [ListDomains](https://docs.aws.amazon.com/controlcatalog/latest/APIReference/API_ListDomains.html) in the Amazon Web Services Control Catalog API Reference. /// This member is required. public var controlDomainId: Swift.String? /// Represents the maximum number of results on a page or for an API request call. @@ -4295,7 +4351,7 @@ extension AuditManagerClientTypes { public var controlsCountByNoncompliantEvidence: Swift.Int? /// A breakdown of the compliance check status for the evidence that’s associated with the control domain. public var evidenceInsights: AuditManagerClientTypes.EvidenceInsights? - /// The unique identifier for the control domain. + /// The unique identifier for the control domain. Audit Manager supports the control domains that are provided by Amazon Web Services Control Catalog. For information about how to find a list of available control domains, see [ListDomains](https://docs.aws.amazon.com/controlcatalog/latest/APIReference/API_ListDomains.html) in the Amazon Web Services Control Catalog API Reference. public var id: Swift.String? /// The time when the control domain insights were last updated. public var lastUpdated: Foundation.Date? @@ -4378,7 +4434,7 @@ public struct ListControlDomainInsightsByAssessmentOutput { } public struct ListControlInsightsByControlDomainInput { - /// The unique identifier for the control domain. + /// The unique identifier for the control domain. Audit Manager supports the control domains that are provided by Amazon Web Services Control Catalog. For information about how to find a list of available control domains, see [ListDomains](https://docs.aws.amazon.com/controlcatalog/latest/APIReference/API_ListDomains.html) in the Amazon Web Services Control Catalog API Reference. /// This member is required. public var controlDomainId: Swift.String? /// Represents the maximum number of results on a page or for an API request call. @@ -4443,20 +4499,24 @@ public struct ListControlInsightsByControlDomainOutput { } public struct ListControlsInput { - /// The type of control, such as a standard control or a custom control. + /// A filter that narrows the list of controls to a specific resource from the Amazon Web Services Control Catalog. To use this parameter, specify the ARN of the Control Catalog resource. You can specify either a control domain, a control objective, or a common control. For information about how to find the ARNs for these resources, see [ListDomains](https://docs.aws.amazon.com/controlcatalog/latest/APIReference/API_ListDomains.html), [ListObjectives](https://docs.aws.amazon.com/controlcatalog/latest/APIReference/API_ListObjectives.html), and [ListCommonControls](https://docs.aws.amazon.com/controlcatalog/latest/APIReference/API_ListCommonControls.html). You can only filter by one Control Catalog resource at a time. Specifying multiple resource ARNs isn’t currently supported. If you want to filter by more than one ARN, we recommend that you run the ListControls operation separately for each ARN. Alternatively, specify UNCATEGORIZED to list controls that aren't mapped to a Control Catalog resource. For example, this operation might return a list of custom controls that don't belong to any control domain or control objective. + public var controlCatalogId: Swift.String? + /// A filter that narrows the list of controls to a specific type. /// This member is required. public var controlType: AuditManagerClientTypes.ControlType? - /// Represents the maximum number of results on a page or for an API request call. + /// The maximum number of results on a page or for an API request call. public var maxResults: Swift.Int? /// The pagination token that's used to fetch the next set of results. public var nextToken: Swift.String? public init( + controlCatalogId: Swift.String? = nil, controlType: AuditManagerClientTypes.ControlType? = nil, maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil ) { + self.controlCatalogId = controlCatalogId self.controlType = controlType self.maxResults = maxResults self.nextToken = nextToken @@ -4515,6 +4575,44 @@ public struct ListControlsOutput { } } +extension AuditManagerClientTypes { + + public enum DataSourceType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case awsApiCall + case awsCloudtrail + case awsConfig + case awsSecurityHub + case manual + case sdkUnknown(Swift.String) + + public static var allCases: [DataSourceType] { + return [ + .awsApiCall, + .awsCloudtrail, + .awsConfig, + .awsSecurityHub, + .manual + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .awsApiCall: return "AWS_API_Call" + case .awsCloudtrail: return "AWS_Cloudtrail" + case .awsConfig: return "AWS_Config" + case .awsSecurityHub: return "AWS_Security_Hub" + case .manual: return "MANUAL" + case let .sdkUnknown(s): return s + } + } + } +} + public struct ListKeywordsForDataSourceInput { /// Represents the maximum number of results on a page or for an API request call. public var maxResults: Swift.Int? @@ -4522,12 +4620,12 @@ public struct ListKeywordsForDataSourceInput { public var nextToken: Swift.String? /// The control mapping data source that the keywords apply to. /// This member is required. - public var source: AuditManagerClientTypes.SourceType? + public var source: AuditManagerClientTypes.DataSourceType? public init( maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, - source: AuditManagerClientTypes.SourceType? = nil + source: AuditManagerClientTypes.DataSourceType? = nil ) { self.maxResults = maxResults @@ -4537,7 +4635,7 @@ public struct ListKeywordsForDataSourceInput { } public struct ListKeywordsForDataSourceOutput { - /// The list of keywords for the event mapping source. + /// The list of keywords for the control mapping source. public var keywords: [Swift.String]? /// The pagination token that's used to fetch the next set of results. public var nextToken: Swift.String? @@ -5156,7 +5254,7 @@ public struct UpdateControlInput { extension UpdateControlInput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "UpdateControlInput(controlId: \(Swift.String(describing: controlId)), controlMappingSources: \(Swift.String(describing: controlMappingSources)), description: \(Swift.String(describing: description)), name: \(Swift.String(describing: name)), actionPlanInstructions: \"CONTENT_REDACTED\", actionPlanTitle: \"CONTENT_REDACTED\", testingInformation: \"CONTENT_REDACTED\")"} + "UpdateControlInput(controlId: \(Swift.String(describing: controlId)), controlMappingSources: \(Swift.String(describing: controlMappingSources)), name: \(Swift.String(describing: name)), actionPlanInstructions: \"CONTENT_REDACTED\", actionPlanTitle: \"CONTENT_REDACTED\", description: \"CONTENT_REDACTED\", testingInformation: \"CONTENT_REDACTED\")"} } public struct UpdateControlOutput { @@ -5988,6 +6086,10 @@ extension ListControlsInput { } let controlTypeQueryItem = Smithy.URIQueryItem(name: "controlType".urlPercentEncoding(), value: Swift.String(controlType.rawValue).urlPercentEncoding()) items.append(controlTypeQueryItem) + if let controlCatalogId = value.controlCatalogId { + let controlCatalogIdQueryItem = Smithy.URIQueryItem(name: "controlCatalogId".urlPercentEncoding(), value: Swift.String(controlCatalogId).urlPercentEncoding()) + items.append(controlCatalogIdQueryItem) + } if let nextToken = value.nextToken { let nextTokenQueryItem = Smithy.URIQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) items.append(nextTokenQueryItem) @@ -7295,6 +7397,7 @@ enum CreateAssessmentOutputError { case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) case "ServiceQuotaExceededException": return try ServiceQuotaExceededException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) case "ValidationException": return try ValidationException.makeError(baseError: baseError) default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) } @@ -8078,6 +8181,7 @@ enum UpdateAssessmentOutputError { case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) case "ValidationException": return try ValidationException.makeError(baseError: baseError) default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) } @@ -8658,6 +8762,7 @@ extension AuditManagerClientTypes.Control { value.createdBy = try reader["createdBy"].readIfPresent() value.lastUpdatedBy = try reader["lastUpdatedBy"].readIfPresent() value.tags = try reader["tags"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + value.state = try reader["state"].readIfPresent() return value } } diff --git a/Sources/Services/AWSAuditManager/Sources/AWSAuditManager/Paginators.swift b/Sources/Services/AWSAuditManager/Sources/AWSAuditManager/Paginators.swift index 34a2dd9b6d1..ec508d9b413 100644 --- a/Sources/Services/AWSAuditManager/Sources/AWSAuditManager/Paginators.swift +++ b/Sources/Services/AWSAuditManager/Sources/AWSAuditManager/Paginators.swift @@ -310,6 +310,7 @@ extension AuditManagerClient { extension ListControlsInput: ClientRuntime.PaginateToken { public func usingPaginationToken(_ token: Swift.String) -> ListControlsInput { return ListControlsInput( + controlCatalogId: self.controlCatalogId, controlType: self.controlType, maxResults: self.maxResults, nextToken: token diff --git a/Sources/Services/AWSB2bi/Sources/AWSB2bi/B2biClient.swift b/Sources/Services/AWSB2bi/Sources/AWSB2bi/B2biClient.swift index 689c08bd8df..a0de18fbdb3 100644 --- a/Sources/Services/AWSB2bi/Sources/AWSB2bi/B2biClient.swift +++ b/Sources/Services/AWSB2bi/Sources/AWSB2bi/B2biClient.swift @@ -871,6 +871,14 @@ extension B2biClient { /// - Parameter ListCapabilitiesInput : [no documentation found] /// /// - Returns: `ListCapabilitiesOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You do not have sufficient access to perform this action. + /// - `InternalServerException` : This exception is thrown when an error occurs in the Amazon Web Services B2B Data Interchange service. + /// - `ThrottlingException` : The request was denied due to throttling: the data speed and rendering may be limited depending on various parameters and conditions. + /// - `ValidationException` : Occurs when a B2BI object cannot be validated against a request from another object. public func listCapabilities(input: ListCapabilitiesInput) async throws -> ListCapabilitiesOutput { let context = Smithy.ContextBuilder() .withMethod(value: .post) @@ -970,6 +978,14 @@ extension B2biClient { /// - Parameter ListProfilesInput : [no documentation found] /// /// - Returns: `ListProfilesOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You do not have sufficient access to perform this action. + /// - `InternalServerException` : This exception is thrown when an error occurs in the Amazon Web Services B2B Data Interchange service. + /// - `ThrottlingException` : The request was denied due to throttling: the data speed and rendering may be limited depending on various parameters and conditions. + /// - `ValidationException` : Occurs when a B2BI object cannot be validated against a request from another object. public func listProfiles(input: ListProfilesInput) async throws -> ListProfilesOutput { let context = Smithy.ContextBuilder() .withMethod(value: .post) @@ -1066,6 +1082,14 @@ extension B2biClient { /// - Parameter ListTransformersInput : [no documentation found] /// /// - Returns: `ListTransformersOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You do not have sufficient access to perform this action. + /// - `InternalServerException` : This exception is thrown when an error occurs in the Amazon Web Services B2B Data Interchange service. + /// - `ThrottlingException` : The request was denied due to throttling: the data speed and rendering may be limited depending on various parameters and conditions. + /// - `ValidationException` : Occurs when a B2BI object cannot be validated against a request from another object. public func listTransformers(input: ListTransformersInput) async throws -> ListTransformersOutput { let context = Smithy.ContextBuilder() .withMethod(value: .post) @@ -1116,6 +1140,7 @@ extension B2biClient { /// /// __Possible Exceptions:__ /// - `AccessDeniedException` : You do not have sufficient access to perform this action. + /// - `ConflictException` : A conflict exception is thrown when you attempt to delete a resource (such as a profile or a capability) that is being used by other resources. /// - `InternalServerException` : This exception is thrown when an error occurs in the Amazon Web Services B2B Data Interchange service. /// - `ResourceNotFoundException` : Occurs when the requested resource does not exist, or cannot be found. In some cases, the resource exists in a region other than the region specified in the API call. /// - `ThrottlingException` : The request was denied due to throttling: the data speed and rendering may be limited depending on various parameters and conditions. diff --git a/Sources/Services/AWSB2bi/Sources/AWSB2bi/Models.swift b/Sources/Services/AWSB2bi/Sources/AWSB2bi/Models.swift index acd1a46daaa..b85adc329c3 100644 --- a/Sources/Services/AWSB2bi/Sources/AWSB2bi/Models.swift +++ b/Sources/Services/AWSB2bi/Sources/AWSB2bi/Models.swift @@ -1058,6 +1058,7 @@ public struct ListTagsForResourceOutput { public struct CreatePartnershipInput { /// Specifies a list of the capabilities associated with this partnership. + /// This member is required. public var capabilities: [Swift.String]? /// Reserved for future use. public var clientToken: Swift.String? @@ -3480,6 +3481,10 @@ enum ListCapabilitiesOutputError { let baseError = try AWSClientRuntime.AWSJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) if let error = baseError.customError() { return error } switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) } } @@ -3511,6 +3516,10 @@ enum ListProfilesOutputError { let baseError = try AWSClientRuntime.AWSJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) if let error = baseError.customError() { return error } switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) } } @@ -3540,6 +3549,10 @@ enum ListTransformersOutputError { let baseError = try AWSClientRuntime.AWSJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) if let error = baseError.customError() { return error } switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) } } @@ -3554,6 +3567,7 @@ enum StartTransformerJobOutputError { if let error = baseError.customError() { return error } switch baseError.code { case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) diff --git a/Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/AuthSchemeResolver.swift b/Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/AuthSchemeResolver.swift deleted file mode 100644 index c7adc713f63..00000000000 --- a/Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/AuthSchemeResolver.swift +++ /dev/null @@ -1,73 +0,0 @@ -// Code generated by smithy-swift-codegen. DO NOT EDIT! - -import class Smithy.Context -import enum Smithy.ClientError -import enum SmithyHTTPAuthAPI.SigningPropertyKeys -import protocol SmithyHTTPAuthAPI.AuthSchemeResolver -import protocol SmithyHTTPAuthAPI.AuthSchemeResolverParameters -import struct SmithyHTTPAuthAPI.AuthOption - -public struct BackupStorageAuthSchemeResolverParameters: SmithyHTTPAuthAPI.AuthSchemeResolverParameters { - public let operation: Swift.String - // Region is used for SigV4 auth scheme - public let region: Swift.String? -} - -public protocol BackupStorageAuthSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver { - // Intentionally empty. - // This is the parent protocol that all auth scheme resolver implementations of - // the service BackupStorage must conform to. -} - -public struct DefaultBackupStorageAuthSchemeResolver: BackupStorageAuthSchemeResolver { - - public func resolveAuthScheme(params: SmithyHTTPAuthAPI.AuthSchemeResolverParameters) throws -> [SmithyHTTPAuthAPI.AuthOption] { - var validAuthOptions = [SmithyHTTPAuthAPI.AuthOption]() - guard let serviceParams = params as? BackupStorageAuthSchemeResolverParameters else { - throw Smithy.ClientError.authError("Service specific auth scheme parameters type must be passed to auth scheme resolver.") - } - switch serviceParams.operation { - case "notifyObjectComplete": - var sigV4Option = SmithyHTTPAuthAPI.AuthOption(schemeID: "aws.auth#sigv4") - sigV4Option.signingProperties.set(key: SmithyHTTPAuthAPI.SigningPropertyKeys.signingName, value: "backup-storage") - guard let region = serviceParams.region else { - throw Smithy.ClientError.authError("Missing region in auth scheme parameters for SigV4 auth scheme.") - } - sigV4Option.signingProperties.set(key: SmithyHTTPAuthAPI.SigningPropertyKeys.signingRegion, value: region) - validAuthOptions.append(sigV4Option) - case "putChunk": - var sigV4Option = SmithyHTTPAuthAPI.AuthOption(schemeID: "aws.auth#sigv4") - sigV4Option.signingProperties.set(key: SmithyHTTPAuthAPI.SigningPropertyKeys.signingName, value: "backup-storage") - guard let region = serviceParams.region else { - throw Smithy.ClientError.authError("Missing region in auth scheme parameters for SigV4 auth scheme.") - } - sigV4Option.signingProperties.set(key: SmithyHTTPAuthAPI.SigningPropertyKeys.signingRegion, value: region) - validAuthOptions.append(sigV4Option) - case "putObject": - var sigV4Option = SmithyHTTPAuthAPI.AuthOption(schemeID: "aws.auth#sigv4") - sigV4Option.signingProperties.set(key: SmithyHTTPAuthAPI.SigningPropertyKeys.signingName, value: "backup-storage") - guard let region = serviceParams.region else { - throw Smithy.ClientError.authError("Missing region in auth scheme parameters for SigV4 auth scheme.") - } - sigV4Option.signingProperties.set(key: SmithyHTTPAuthAPI.SigningPropertyKeys.signingRegion, value: region) - validAuthOptions.append(sigV4Option) - default: - var sigV4Option = SmithyHTTPAuthAPI.AuthOption(schemeID: "aws.auth#sigv4") - sigV4Option.signingProperties.set(key: SmithyHTTPAuthAPI.SigningPropertyKeys.signingName, value: "backup-storage") - guard let region = serviceParams.region else { - throw Smithy.ClientError.authError("Missing region in auth scheme parameters for SigV4 auth scheme.") - } - sigV4Option.signingProperties.set(key: SmithyHTTPAuthAPI.SigningPropertyKeys.signingRegion, value: region) - validAuthOptions.append(sigV4Option) - } - return validAuthOptions - } - - public func constructParameters(context: Smithy.Context) throws -> SmithyHTTPAuthAPI.AuthSchemeResolverParameters { - guard let opName = context.getOperation() else { - throw Smithy.ClientError.dataNotFound("Operation name not configured in middleware context for auth scheme resolver params construction.") - } - let opRegion = context.getRegion() - return BackupStorageAuthSchemeResolverParameters(operation: opName, region: opRegion) - } -} diff --git a/Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/BackupStorageClient.swift b/Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/BackupStorageClient.swift deleted file mode 100644 index a5ce6d605c4..00000000000 --- a/Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/BackupStorageClient.swift +++ /dev/null @@ -1,643 +0,0 @@ -// Code generated by smithy-swift-codegen. DO NOT EDIT! - -import Foundation -import class AWSClientRuntime.AWSClientConfigDefaultsProvider -import class AWSClientRuntime.DefaultAWSClientPlugin -import class ClientRuntime.ClientBuilder -import class ClientRuntime.DefaultClientPlugin -import class ClientRuntime.HttpClientConfiguration -import class ClientRuntime.SdkHttpClient -import class Smithy.ContextBuilder -import class SmithyJSON.Writer -import enum AWSClientRuntime.AWSRetryErrorInfoProvider -import enum AWSClientRuntime.AWSRetryMode -import enum ClientRuntime.ClientLogMode -import enum ClientRuntime.DefaultTelemetry -import enum Smithy.ByteStream -import enum SmithyReadWrite.WritingClosures -import protocol AWSClientRuntime.AWSDefaultClientConfiguration -import protocol AWSClientRuntime.AWSRegionClientConfiguration -import protocol ClientRuntime.Client -import protocol ClientRuntime.DefaultClientConfiguration -import protocol ClientRuntime.DefaultHttpClientConfiguration -import protocol ClientRuntime.IdempotencyTokenGenerator -import protocol ClientRuntime.TelemetryProvider -import protocol Smithy.LogAgent -import protocol SmithyHTTPAPI.HTTPClient -import protocol SmithyHTTPAuthAPI.AuthSchemeResolver -import protocol SmithyIdentity.AWSCredentialIdentityResolver -import struct AWSClientRuntime.AWSUserAgentMetadata -import struct AWSClientRuntime.EndpointResolverMiddleware -import struct AWSClientRuntime.UserAgentMiddleware -import struct AWSSDKHTTPAuth.SigV4AuthScheme -import struct ClientRuntime.AuthSchemeMiddleware -import struct ClientRuntime.BlobStreamBodyMiddleware -import struct ClientRuntime.BodyMiddleware -import struct ClientRuntime.ContentLengthMiddleware -import struct ClientRuntime.ContentTypeMiddleware -import struct ClientRuntime.DeserializeMiddleware -import struct ClientRuntime.LoggerMiddleware -import struct ClientRuntime.OperationStack -import struct ClientRuntime.QueryItemMiddleware -import struct ClientRuntime.RetryMiddleware -import struct ClientRuntime.SignerMiddleware -import struct ClientRuntime.URLHostMiddleware -import struct ClientRuntime.URLPathMiddleware -import struct SmithyRetries.DefaultRetryStrategy -import struct SmithyRetriesAPI.RetryStrategyOptions -import typealias SmithyHTTPAuthAPI.AuthSchemes - -public class BackupStorageClient: ClientRuntime.Client { - public static let clientName = "BackupStorageClient" - let client: ClientRuntime.SdkHttpClient - let config: BackupStorageClient.BackupStorageClientConfiguration - let serviceName = "BackupStorage" - - public required init(config: BackupStorageClient.BackupStorageClientConfiguration) { - client = ClientRuntime.SdkHttpClient(engine: config.httpClientEngine, config: config.httpClientConfiguration) - self.config = config - } - - public convenience init(region: Swift.String) throws { - let config = try BackupStorageClient.BackupStorageClientConfiguration(region: region) - self.init(config: config) - } - - public convenience required init() async throws { - let config = try await BackupStorageClient.BackupStorageClientConfiguration() - self.init(config: config) - } -} - -extension BackupStorageClient { - public class BackupStorageClientConfiguration: AWSClientRuntime.AWSDefaultClientConfiguration & AWSClientRuntime.AWSRegionClientConfiguration & ClientRuntime.DefaultClientConfiguration & ClientRuntime.DefaultHttpClientConfiguration { - public var useFIPS: Swift.Bool? - - public var useDualStack: Swift.Bool? - - public var appID: Swift.String? - - public var awsCredentialIdentityResolver: any SmithyIdentity.AWSCredentialIdentityResolver - - public var awsRetryMode: AWSClientRuntime.AWSRetryMode - - public var region: Swift.String? - - public var signingRegion: Swift.String? - - public var endpointResolver: EndpointResolver - - public var telemetryProvider: ClientRuntime.TelemetryProvider - - public var retryStrategyOptions: SmithyRetriesAPI.RetryStrategyOptions - - public var clientLogMode: ClientRuntime.ClientLogMode - - public var endpoint: Swift.String? - - public var idempotencyTokenGenerator: ClientRuntime.IdempotencyTokenGenerator - - public var httpClientEngine: SmithyHTTPAPI.HTTPClient - - public var httpClientConfiguration: ClientRuntime.HttpClientConfiguration - - public var authSchemes: SmithyHTTPAuthAPI.AuthSchemes? - - public var authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver - - internal let logger: Smithy.LogAgent - - private init(_ useFIPS: Swift.Bool?, _ useDualStack: Swift.Bool?, _ appID: Swift.String?, _ awsCredentialIdentityResolver: any SmithyIdentity.AWSCredentialIdentityResolver, _ awsRetryMode: AWSClientRuntime.AWSRetryMode, _ region: Swift.String?, _ signingRegion: Swift.String?, _ endpointResolver: EndpointResolver, _ telemetryProvider: ClientRuntime.TelemetryProvider, _ retryStrategyOptions: SmithyRetriesAPI.RetryStrategyOptions, _ clientLogMode: ClientRuntime.ClientLogMode, _ endpoint: Swift.String?, _ idempotencyTokenGenerator: ClientRuntime.IdempotencyTokenGenerator, _ httpClientEngine: SmithyHTTPAPI.HTTPClient, _ httpClientConfiguration: ClientRuntime.HttpClientConfiguration, _ authSchemes: SmithyHTTPAuthAPI.AuthSchemes?, _ authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver) { - self.useFIPS = useFIPS - self.useDualStack = useDualStack - self.appID = appID - self.awsCredentialIdentityResolver = awsCredentialIdentityResolver - self.awsRetryMode = awsRetryMode - self.region = region - self.signingRegion = signingRegion - self.endpointResolver = endpointResolver - self.telemetryProvider = telemetryProvider - self.retryStrategyOptions = retryStrategyOptions - self.clientLogMode = clientLogMode - self.endpoint = endpoint - self.idempotencyTokenGenerator = idempotencyTokenGenerator - self.httpClientEngine = httpClientEngine - self.httpClientConfiguration = httpClientConfiguration - self.authSchemes = authSchemes - self.authSchemeResolver = authSchemeResolver - self.logger = telemetryProvider.loggerProvider.getLogger(name: BackupStorageClient.clientName) - } - - public convenience init(useFIPS: Swift.Bool? = nil, useDualStack: Swift.Bool? = nil, appID: Swift.String? = nil, awsCredentialIdentityResolver: (any SmithyIdentity.AWSCredentialIdentityResolver)? = nil, awsRetryMode: AWSClientRuntime.AWSRetryMode? = nil, region: Swift.String? = nil, signingRegion: Swift.String? = nil, endpointResolver: EndpointResolver? = nil, telemetryProvider: ClientRuntime.TelemetryProvider? = nil, retryStrategyOptions: SmithyRetriesAPI.RetryStrategyOptions? = nil, clientLogMode: ClientRuntime.ClientLogMode? = nil, endpoint: Swift.String? = nil, idempotencyTokenGenerator: ClientRuntime.IdempotencyTokenGenerator? = nil, httpClientEngine: SmithyHTTPAPI.HTTPClient? = nil, httpClientConfiguration: ClientRuntime.HttpClientConfiguration? = nil, authSchemes: SmithyHTTPAuthAPI.AuthSchemes? = nil, authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver? = nil) throws { - self.init(useFIPS, useDualStack, try appID ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.appID(), try awsCredentialIdentityResolver ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.awsCredentialIdentityResolver(awsCredentialIdentityResolver), try awsRetryMode ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.retryMode(), region, signingRegion, try endpointResolver ?? DefaultEndpointResolver(), telemetryProvider ?? ClientRuntime.DefaultTelemetry.provider, try retryStrategyOptions ?? AWSClientConfigDefaultsProvider.retryStrategyOptions(), clientLogMode ?? AWSClientConfigDefaultsProvider.clientLogMode, endpoint, idempotencyTokenGenerator ?? AWSClientConfigDefaultsProvider.idempotencyTokenGenerator, httpClientEngine ?? AWSClientConfigDefaultsProvider.httpClientEngine, httpClientConfiguration ?? AWSClientConfigDefaultsProvider.httpClientConfiguration, authSchemes ?? [AWSSDKHTTPAuth.SigV4AuthScheme()], authSchemeResolver ?? DefaultBackupStorageAuthSchemeResolver()) - } - - public convenience init(useFIPS: Swift.Bool? = nil, useDualStack: Swift.Bool? = nil, appID: Swift.String? = nil, awsCredentialIdentityResolver: (any SmithyIdentity.AWSCredentialIdentityResolver)? = nil, awsRetryMode: AWSClientRuntime.AWSRetryMode? = nil, region: Swift.String? = nil, signingRegion: Swift.String? = nil, endpointResolver: EndpointResolver? = nil, telemetryProvider: ClientRuntime.TelemetryProvider? = nil, retryStrategyOptions: SmithyRetriesAPI.RetryStrategyOptions? = nil, clientLogMode: ClientRuntime.ClientLogMode? = nil, endpoint: Swift.String? = nil, idempotencyTokenGenerator: ClientRuntime.IdempotencyTokenGenerator? = nil, httpClientEngine: SmithyHTTPAPI.HTTPClient? = nil, httpClientConfiguration: ClientRuntime.HttpClientConfiguration? = nil, authSchemes: SmithyHTTPAuthAPI.AuthSchemes? = nil, authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver? = nil) async throws { - self.init(useFIPS, useDualStack, try appID ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.appID(), try awsCredentialIdentityResolver ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.awsCredentialIdentityResolver(awsCredentialIdentityResolver), try awsRetryMode ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.retryMode(), try await AWSClientRuntime.AWSClientConfigDefaultsProvider.region(region), try await AWSClientRuntime.AWSClientConfigDefaultsProvider.region(region), try endpointResolver ?? DefaultEndpointResolver(), telemetryProvider ?? ClientRuntime.DefaultTelemetry.provider, try retryStrategyOptions ?? AWSClientConfigDefaultsProvider.retryStrategyOptions(), clientLogMode ?? AWSClientConfigDefaultsProvider.clientLogMode, endpoint, idempotencyTokenGenerator ?? AWSClientConfigDefaultsProvider.idempotencyTokenGenerator, httpClientEngine ?? AWSClientConfigDefaultsProvider.httpClientEngine, httpClientConfiguration ?? AWSClientConfigDefaultsProvider.httpClientConfiguration, authSchemes ?? [AWSSDKHTTPAuth.SigV4AuthScheme()], authSchemeResolver ?? DefaultBackupStorageAuthSchemeResolver()) - } - - public convenience required init() async throws { - try await self.init(useFIPS: nil, useDualStack: nil, appID: nil, awsCredentialIdentityResolver: nil, awsRetryMode: nil, region: nil, signingRegion: nil, endpointResolver: nil, telemetryProvider: nil, retryStrategyOptions: nil, clientLogMode: nil, endpoint: nil, idempotencyTokenGenerator: nil, httpClientEngine: nil, httpClientConfiguration: nil, authSchemes: nil, authSchemeResolver: nil) - } - - public convenience init(region: String) throws { - self.init(nil, nil, try AWSClientRuntime.AWSClientConfigDefaultsProvider.appID(), try AWSClientConfigDefaultsProvider.awsCredentialIdentityResolver(), try AWSClientRuntime.AWSClientConfigDefaultsProvider.retryMode(), region, region, try DefaultEndpointResolver(), ClientRuntime.DefaultTelemetry.provider, try AWSClientConfigDefaultsProvider.retryStrategyOptions(), AWSClientConfigDefaultsProvider.clientLogMode, nil, AWSClientConfigDefaultsProvider.idempotencyTokenGenerator, AWSClientConfigDefaultsProvider.httpClientEngine, AWSClientConfigDefaultsProvider.httpClientConfiguration, [AWSSDKHTTPAuth.SigV4AuthScheme()], DefaultBackupStorageAuthSchemeResolver()) - } - - public var partitionID: String? { - return "\(BackupStorageClient.clientName) - \(region ?? "")" - } - } - - public static func builder() -> ClientRuntime.ClientBuilder { - return ClientRuntime.ClientBuilder(defaultPlugins: [ - ClientRuntime.DefaultClientPlugin(), - AWSClientRuntime.DefaultAWSClientPlugin(clientName: self.clientName), - DefaultAWSAuthSchemePlugin() - ]) - } -} - -extension BackupStorageClient { - /// Performs the `DeleteObject` operation on the `CryoStorageFrontendService` service. - /// - /// Delete Object from the incremental base Backup. - /// - /// - Parameter DeleteObjectInput : [no documentation found] - /// - /// - Returns: `DeleteObjectOutput` : [no documentation found] - /// - /// - Throws: One of the exceptions listed below __Possible Exceptions__. - /// - /// __Possible Exceptions:__ - /// - `AccessDeniedException` : [no documentation found] - /// - `IllegalArgumentException` : Non-retryable exception, indicates client error (wrong argument passed to API). See exception message for details. - /// - `ResourceNotFoundException` : Non-retryable exception. Attempted to make an operation on non-existing or expired resource. - /// - `RetryableException` : Retryable exception. In general indicates internal failure that can be fixed by retry. - /// - `ServiceInternalException` : Deprecated. To be removed from the model. - /// - `ServiceUnavailableException` : Retryable exception, indicates internal server error. - /// - `ThrottlingException` : Increased rate over throttling limits. Can be retried with exponential backoff. - public func deleteObject(input: DeleteObjectInput) async throws -> DeleteObjectOutput { - let context = Smithy.ContextBuilder() - .withMethod(value: .delete) - .withServiceName(value: serviceName) - .withOperation(value: "deleteObject") - .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) - .withLogger(value: config.logger) - .withPartitionID(value: config.partitionID) - .withAuthSchemes(value: config.authSchemes ?? []) - .withAuthSchemeResolver(value: config.authSchemeResolver) - .withUnsignedPayloadTrait(value: false) - .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") - .withRegion(value: config.region) - .withSigningName(value: "backup-storage") - .withSigningRegion(value: config.signingRegion) - .build() - var operation = ClientRuntime.OperationStack(id: "deleteObject") - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(DeleteObjectInput.urlPathProvider(_:))) - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) - operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) - operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) - operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(DeleteObjectOutput.httpOutput(from:), DeleteObjectOutputError.httpError(from:))) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) - let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) - return result - } - - /// Performs the `GetChunk` operation on the `CryoStorageFrontendService` service. - /// - /// Gets the specified object's chunk. - /// - /// - Parameter GetChunkInput : [no documentation found] - /// - /// - Returns: `GetChunkOutput` : [no documentation found] - /// - /// - Throws: One of the exceptions listed below __Possible Exceptions__. - /// - /// __Possible Exceptions:__ - /// - `AccessDeniedException` : [no documentation found] - /// - `IllegalArgumentException` : Non-retryable exception, indicates client error (wrong argument passed to API). See exception message for details. - /// - `KMSInvalidKeyUsageException` : Non-retryable exception. Indicates the KMS key usage is incorrect. See exception message for details. - /// - `ResourceNotFoundException` : Non-retryable exception. Attempted to make an operation on non-existing or expired resource. - /// - `RetryableException` : Retryable exception. In general indicates internal failure that can be fixed by retry. - /// - `ServiceInternalException` : Deprecated. To be removed from the model. - /// - `ThrottlingException` : Increased rate over throttling limits. Can be retried with exponential backoff. - public func getChunk(input: GetChunkInput) async throws -> GetChunkOutput { - let context = Smithy.ContextBuilder() - .withMethod(value: .get) - .withServiceName(value: serviceName) - .withOperation(value: "getChunk") - .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) - .withLogger(value: config.logger) - .withPartitionID(value: config.partitionID) - .withAuthSchemes(value: config.authSchemes ?? []) - .withAuthSchemeResolver(value: config.authSchemeResolver) - .withUnsignedPayloadTrait(value: false) - .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") - .withRegion(value: config.region) - .withSigningName(value: "backup-storage") - .withSigningRegion(value: config.signingRegion) - .build() - var operation = ClientRuntime.OperationStack(id: "getChunk") - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GetChunkInput.urlPathProvider(_:))) - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) - operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) - operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) - operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GetChunkOutput.httpOutput(from:), GetChunkOutputError.httpError(from:))) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) - let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) - return result - } - - /// Performs the `GetObjectMetadata` operation on the `CryoStorageFrontendService` service. - /// - /// Get metadata associated with an Object. - /// - /// - Parameter GetObjectMetadataInput : [no documentation found] - /// - /// - Returns: `GetObjectMetadataOutput` : [no documentation found] - /// - /// - Throws: One of the exceptions listed below __Possible Exceptions__. - /// - /// __Possible Exceptions:__ - /// - `AccessDeniedException` : [no documentation found] - /// - `IllegalArgumentException` : Non-retryable exception, indicates client error (wrong argument passed to API). See exception message for details. - /// - `KMSInvalidKeyUsageException` : Non-retryable exception. Indicates the KMS key usage is incorrect. See exception message for details. - /// - `ResourceNotFoundException` : Non-retryable exception. Attempted to make an operation on non-existing or expired resource. - /// - `RetryableException` : Retryable exception. In general indicates internal failure that can be fixed by retry. - /// - `ServiceInternalException` : Deprecated. To be removed from the model. - /// - `ServiceUnavailableException` : Retryable exception, indicates internal server error. - /// - `ThrottlingException` : Increased rate over throttling limits. Can be retried with exponential backoff. - public func getObjectMetadata(input: GetObjectMetadataInput) async throws -> GetObjectMetadataOutput { - let context = Smithy.ContextBuilder() - .withMethod(value: .get) - .withServiceName(value: serviceName) - .withOperation(value: "getObjectMetadata") - .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) - .withLogger(value: config.logger) - .withPartitionID(value: config.partitionID) - .withAuthSchemes(value: config.authSchemes ?? []) - .withAuthSchemeResolver(value: config.authSchemeResolver) - .withUnsignedPayloadTrait(value: false) - .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") - .withRegion(value: config.region) - .withSigningName(value: "backup-storage") - .withSigningRegion(value: config.signingRegion) - .build() - var operation = ClientRuntime.OperationStack(id: "getObjectMetadata") - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GetObjectMetadataInput.urlPathProvider(_:))) - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) - operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) - operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) - operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GetObjectMetadataOutput.httpOutput(from:), GetObjectMetadataOutputError.httpError(from:))) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) - let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) - return result - } - - /// Performs the `ListChunks` operation on the `CryoStorageFrontendService` service. - /// - /// List chunks in a given Object - /// - /// - Parameter ListChunksInput : [no documentation found] - /// - /// - Returns: `ListChunksOutput` : [no documentation found] - /// - /// - Throws: One of the exceptions listed below __Possible Exceptions__. - /// - /// __Possible Exceptions:__ - /// - `AccessDeniedException` : [no documentation found] - /// - `IllegalArgumentException` : Non-retryable exception, indicates client error (wrong argument passed to API). See exception message for details. - /// - `ResourceNotFoundException` : Non-retryable exception. Attempted to make an operation on non-existing or expired resource. - /// - `RetryableException` : Retryable exception. In general indicates internal failure that can be fixed by retry. - /// - `ServiceInternalException` : Deprecated. To be removed from the model. - /// - `ServiceUnavailableException` : Retryable exception, indicates internal server error. - public func listChunks(input: ListChunksInput) async throws -> ListChunksOutput { - let context = Smithy.ContextBuilder() - .withMethod(value: .get) - .withServiceName(value: serviceName) - .withOperation(value: "listChunks") - .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) - .withLogger(value: config.logger) - .withPartitionID(value: config.partitionID) - .withAuthSchemes(value: config.authSchemes ?? []) - .withAuthSchemeResolver(value: config.authSchemeResolver) - .withUnsignedPayloadTrait(value: false) - .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") - .withRegion(value: config.region) - .withSigningName(value: "backup-storage") - .withSigningRegion(value: config.signingRegion) - .build() - var operation = ClientRuntime.OperationStack(id: "listChunks") - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListChunksInput.urlPathProvider(_:))) - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) - operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) - operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListChunksInput.queryItemProvider(_:))) - operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) - operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListChunksOutput.httpOutput(from:), ListChunksOutputError.httpError(from:))) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) - let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) - return result - } - - /// Performs the `ListObjects` operation on the `CryoStorageFrontendService` service. - /// - /// List all Objects in a given Backup. - /// - /// - Parameter ListObjectsInput : [no documentation found] - /// - /// - Returns: `ListObjectsOutput` : [no documentation found] - /// - /// - Throws: One of the exceptions listed below __Possible Exceptions__. - /// - /// __Possible Exceptions:__ - /// - `AccessDeniedException` : [no documentation found] - /// - `IllegalArgumentException` : Non-retryable exception, indicates client error (wrong argument passed to API). See exception message for details. - /// - `KMSInvalidKeyUsageException` : Non-retryable exception. Indicates the KMS key usage is incorrect. See exception message for details. - /// - `ResourceNotFoundException` : Non-retryable exception. Attempted to make an operation on non-existing or expired resource. - /// - `RetryableException` : Retryable exception. In general indicates internal failure that can be fixed by retry. - /// - `ServiceInternalException` : Deprecated. To be removed from the model. - /// - `ServiceUnavailableException` : Retryable exception, indicates internal server error. - /// - `ThrottlingException` : Increased rate over throttling limits. Can be retried with exponential backoff. - public func listObjects(input: ListObjectsInput) async throws -> ListObjectsOutput { - let context = Smithy.ContextBuilder() - .withMethod(value: .get) - .withServiceName(value: serviceName) - .withOperation(value: "listObjects") - .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) - .withLogger(value: config.logger) - .withPartitionID(value: config.partitionID) - .withAuthSchemes(value: config.authSchemes ?? []) - .withAuthSchemeResolver(value: config.authSchemeResolver) - .withUnsignedPayloadTrait(value: false) - .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") - .withRegion(value: config.region) - .withSigningName(value: "backup-storage") - .withSigningRegion(value: config.signingRegion) - .build() - var operation = ClientRuntime.OperationStack(id: "listObjects") - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListObjectsInput.urlPathProvider(_:))) - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) - operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) - operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListObjectsInput.queryItemProvider(_:))) - operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) - operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListObjectsOutput.httpOutput(from:), ListObjectsOutputError.httpError(from:))) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) - let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) - return result - } - - /// Performs the `NotifyObjectComplete` operation on the `CryoStorageFrontendService` service. - /// - /// Complete upload - /// - /// - Parameter NotifyObjectCompleteInput : [no documentation found] - /// - /// - Returns: `NotifyObjectCompleteOutput` : [no documentation found] - /// - /// - Throws: One of the exceptions listed below __Possible Exceptions__. - /// - /// __Possible Exceptions:__ - /// - `AccessDeniedException` : [no documentation found] - /// - `IllegalArgumentException` : Non-retryable exception, indicates client error (wrong argument passed to API). See exception message for details. - /// - `KMSInvalidKeyUsageException` : Non-retryable exception. Indicates the KMS key usage is incorrect. See exception message for details. - /// - `NotReadableInputStreamException` : Retryalble exception. Indicated issues while reading an input stream due to the networking issues or connection drop on the client side. - /// - `RetryableException` : Retryable exception. In general indicates internal failure that can be fixed by retry. - /// - `ServiceInternalException` : Deprecated. To be removed from the model. - /// - `ServiceUnavailableException` : Retryable exception, indicates internal server error. - /// - `ThrottlingException` : Increased rate over throttling limits. Can be retried with exponential backoff. - public func notifyObjectComplete(input: NotifyObjectCompleteInput) async throws -> NotifyObjectCompleteOutput { - let context = Smithy.ContextBuilder() - .withMethod(value: .put) - .withServiceName(value: serviceName) - .withOperation(value: "notifyObjectComplete") - .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) - .withLogger(value: config.logger) - .withPartitionID(value: config.partitionID) - .withAuthSchemes(value: config.authSchemes ?? []) - .withAuthSchemeResolver(value: config.authSchemeResolver) - .withUnsignedPayloadTrait(value: true) - .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") - .withRegion(value: config.region) - .withSigningName(value: "backup-storage") - .withSigningRegion(value: config.signingRegion) - .build() - var operation = ClientRuntime.OperationStack(id: "notifyObjectComplete") - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(NotifyObjectCompleteInput.urlPathProvider(_:))) - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) - operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) - operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(NotifyObjectCompleteInput.queryItemProvider(_:))) - operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/octet-stream")) - operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BlobStreamBodyMiddleware(keyPath: \.metadataBlob)) - operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware(requiresLength: false, unsignedPayload: true)) - operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) - operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(NotifyObjectCompleteOutput.httpOutput(from:), NotifyObjectCompleteOutputError.httpError(from:))) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) - let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) - return result - } - - /// Performs the `PutChunk` operation on the `CryoStorageFrontendService` service. - /// - /// Upload chunk. - /// - /// - Parameter PutChunkInput : [no documentation found] - /// - /// - Returns: `PutChunkOutput` : [no documentation found] - /// - /// - Throws: One of the exceptions listed below __Possible Exceptions__. - /// - /// __Possible Exceptions:__ - /// - `AccessDeniedException` : [no documentation found] - /// - `IllegalArgumentException` : Non-retryable exception, indicates client error (wrong argument passed to API). See exception message for details. - /// - `KMSInvalidKeyUsageException` : Non-retryable exception. Indicates the KMS key usage is incorrect. See exception message for details. - /// - `NotReadableInputStreamException` : Retryalble exception. Indicated issues while reading an input stream due to the networking issues or connection drop on the client side. - /// - `RetryableException` : Retryable exception. In general indicates internal failure that can be fixed by retry. - /// - `ServiceInternalException` : Deprecated. To be removed from the model. - /// - `ServiceUnavailableException` : Retryable exception, indicates internal server error. - /// - `ThrottlingException` : Increased rate over throttling limits. Can be retried with exponential backoff. - public func putChunk(input: PutChunkInput) async throws -> PutChunkOutput { - let context = Smithy.ContextBuilder() - .withMethod(value: .put) - .withServiceName(value: serviceName) - .withOperation(value: "putChunk") - .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) - .withLogger(value: config.logger) - .withPartitionID(value: config.partitionID) - .withAuthSchemes(value: config.authSchemes ?? []) - .withAuthSchemeResolver(value: config.authSchemeResolver) - .withUnsignedPayloadTrait(value: true) - .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") - .withRegion(value: config.region) - .withSigningName(value: "backup-storage") - .withSigningRegion(value: config.signingRegion) - .build() - var operation = ClientRuntime.OperationStack(id: "putChunk") - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(PutChunkInput.urlPathProvider(_:))) - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) - operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) - operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(PutChunkInput.queryItemProvider(_:))) - operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/octet-stream")) - operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BlobStreamBodyMiddleware(keyPath: \.data)) - operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware(requiresLength: false, unsignedPayload: true)) - operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) - operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(PutChunkOutput.httpOutput(from:), PutChunkOutputError.httpError(from:))) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) - let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) - return result - } - - /// Performs the `PutObject` operation on the `CryoStorageFrontendService` service. - /// - /// Upload object that can store object metadata String and data blob in single API call using inline chunk field. - /// - /// - Parameter PutObjectInput : [no documentation found] - /// - /// - Returns: `PutObjectOutput` : [no documentation found] - /// - /// - Throws: One of the exceptions listed below __Possible Exceptions__. - /// - /// __Possible Exceptions:__ - /// - `AccessDeniedException` : [no documentation found] - /// - `IllegalArgumentException` : Non-retryable exception, indicates client error (wrong argument passed to API). See exception message for details. - /// - `KMSInvalidKeyUsageException` : Non-retryable exception. Indicates the KMS key usage is incorrect. See exception message for details. - /// - `NotReadableInputStreamException` : Retryalble exception. Indicated issues while reading an input stream due to the networking issues or connection drop on the client side. - /// - `RetryableException` : Retryable exception. In general indicates internal failure that can be fixed by retry. - /// - `ServiceInternalException` : Deprecated. To be removed from the model. - /// - `ServiceUnavailableException` : Retryable exception, indicates internal server error. - /// - `ThrottlingException` : Increased rate over throttling limits. Can be retried with exponential backoff. - public func putObject(input: PutObjectInput) async throws -> PutObjectOutput { - let context = Smithy.ContextBuilder() - .withMethod(value: .put) - .withServiceName(value: serviceName) - .withOperation(value: "putObject") - .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) - .withLogger(value: config.logger) - .withPartitionID(value: config.partitionID) - .withAuthSchemes(value: config.authSchemes ?? []) - .withAuthSchemeResolver(value: config.authSchemeResolver) - .withUnsignedPayloadTrait(value: true) - .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") - .withRegion(value: config.region) - .withSigningName(value: "backup-storage") - .withSigningRegion(value: config.signingRegion) - .build() - var operation = ClientRuntime.OperationStack(id: "putObject") - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(PutObjectInput.urlPathProvider(_:))) - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) - operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) - operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(PutObjectInput.queryItemProvider(_:))) - operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/octet-stream")) - operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BlobStreamBodyMiddleware(keyPath: \.inlineChunk)) - operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware(requiresLength: false, unsignedPayload: true)) - operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) - operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(PutObjectOutput.httpOutput(from:), PutObjectOutputError.httpError(from:))) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) - let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) - return result - } - - /// Performs the `StartObject` operation on the `CryoStorageFrontendService` service. - /// - /// Start upload containing one or many chunks. - /// - /// - Parameter StartObjectInput : [no documentation found] - /// - /// - Returns: `StartObjectOutput` : [no documentation found] - /// - /// - Throws: One of the exceptions listed below __Possible Exceptions__. - /// - /// __Possible Exceptions:__ - /// - `AccessDeniedException` : [no documentation found] - /// - `DataAlreadyExistsException` : Non-retryable exception. Attempted to create already existing object or chunk. This message contains a checksum of already presented data. - /// - `IllegalArgumentException` : Non-retryable exception, indicates client error (wrong argument passed to API). See exception message for details. - /// - `ResourceNotFoundException` : Non-retryable exception. Attempted to make an operation on non-existing or expired resource. - /// - `RetryableException` : Retryable exception. In general indicates internal failure that can be fixed by retry. - /// - `ServiceInternalException` : Deprecated. To be removed from the model. - /// - `ServiceUnavailableException` : Retryable exception, indicates internal server error. - /// - `ThrottlingException` : Increased rate over throttling limits. Can be retried with exponential backoff. - public func startObject(input: StartObjectInput) async throws -> StartObjectOutput { - let context = Smithy.ContextBuilder() - .withMethod(value: .put) - .withServiceName(value: serviceName) - .withOperation(value: "startObject") - .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) - .withLogger(value: config.logger) - .withPartitionID(value: config.partitionID) - .withAuthSchemes(value: config.authSchemes ?? []) - .withAuthSchemeResolver(value: config.authSchemeResolver) - .withUnsignedPayloadTrait(value: false) - .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") - .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") - .withRegion(value: config.region) - .withSigningName(value: "backup-storage") - .withSigningRegion(value: config.signingRegion) - .build() - var operation = ClientRuntime.OperationStack(id: "startObject") - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(StartObjectInput.urlPathProvider(_:))) - operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) - operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) - operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) - operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) - operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: StartObjectInput.write(value:to:))) - operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) - operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) - operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(StartObjectOutput.httpOutput(from:), StartObjectOutputError.httpError(from:))) - operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) - let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) - return result - } - -} diff --git a/Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/Models.swift b/Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/Models.swift deleted file mode 100644 index 923515cb8e3..00000000000 --- a/Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/Models.swift +++ /dev/null @@ -1,1627 +0,0 @@ -// Code generated by smithy-swift-codegen. DO NOT EDIT! - -import Foundation -import class SmithyHTTPAPI.HttpResponse -import class SmithyJSON.Reader -import class SmithyJSON.Writer -import enum ClientRuntime.ErrorFault -import enum Smithy.ByteStream -import enum Smithy.ClientError -import enum SmithyReadWrite.ReaderError -import protocol AWSClientRuntime.AWSServiceError -import protocol ClientRuntime.HTTPError -import protocol ClientRuntime.ModeledError -import struct AWSClientRuntime.RestJSONError -@_spi(UnknownAWSHTTPServiceError) import struct AWSClientRuntime.UnknownAWSHTTPServiceError -import struct Smithy.URIQueryItem -import struct SmithyTimestamps.TimestampFormatter - -public struct DeleteObjectOutput { - - public init() { } -} - -public struct AccessDeniedException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { - - public struct Properties { - public internal(set) var message: Swift.String? = nil - } - - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "AccessDenied" } - public static var fault: ClientRuntime.ErrorFault { .client } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? - - public init( - message: Swift.String? = nil - ) - { - self.properties.message = message - } -} - -extension BackupStorageClientTypes { - - public enum SummaryChecksumAlgorithm: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { - case summary - case sdkUnknown(Swift.String) - - public static var allCases: [SummaryChecksumAlgorithm] { - return [ - .summary - ] - } - - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) - } - - public var rawValue: Swift.String { - switch self { - case .summary: return "SUMMARY" - case let .sdkUnknown(s): return s - } - } - } -} - -extension BackupStorageClientTypes { - /// Object - public struct BackupObject { - /// Number of chunks in object - public var chunksCount: Swift.Int? - /// Metadata string associated with the Object - public var metadataString: Swift.String? - /// Object name - /// This member is required. - public var name: Swift.String? - /// Object checksum - /// This member is required. - public var objectChecksum: Swift.String? - /// Checksum algorithm - /// This member is required. - public var objectChecksumAlgorithm: BackupStorageClientTypes.SummaryChecksumAlgorithm? - /// Object token - /// This member is required. - public var objectToken: Swift.String? - - public init( - chunksCount: Swift.Int? = nil, - metadataString: Swift.String? = nil, - name: Swift.String? = nil, - objectChecksum: Swift.String? = nil, - objectChecksumAlgorithm: BackupStorageClientTypes.SummaryChecksumAlgorithm? = nil, - objectToken: Swift.String? = nil - ) - { - self.chunksCount = chunksCount - self.metadataString = metadataString - self.name = name - self.objectChecksum = objectChecksum - self.objectChecksumAlgorithm = objectChecksumAlgorithm - self.objectToken = objectToken - } - } - -} - -extension BackupStorageClientTypes { - - public enum DataChecksumAlgorithm: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { - case sha256 - case sdkUnknown(Swift.String) - - public static var allCases: [DataChecksumAlgorithm] { - return [ - .sha256 - ] - } - - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) - } - - public var rawValue: Swift.String { - switch self { - case .sha256: return "SHA256" - case let .sdkUnknown(s): return s - } - } - } -} - -extension BackupStorageClientTypes { - /// Chunk - public struct Chunk { - /// Chunk checksum - /// This member is required. - public var checksum: Swift.String? - /// Checksum algorithm - /// This member is required. - public var checksumAlgorithm: BackupStorageClientTypes.DataChecksumAlgorithm? - /// Chunk token - /// This member is required. - public var chunkToken: Swift.String? - /// Chunk index - /// This member is required. - public var index: Swift.Int - /// Chunk length - /// This member is required. - public var length: Swift.Int - - public init( - checksum: Swift.String? = nil, - checksumAlgorithm: BackupStorageClientTypes.DataChecksumAlgorithm? = nil, - chunkToken: Swift.String? = nil, - index: Swift.Int = 0, - length: Swift.Int = 0 - ) - { - self.checksum = checksum - self.checksumAlgorithm = checksumAlgorithm - self.chunkToken = chunkToken - self.index = index - self.length = length - } - } - -} - -/// Non-retryable exception, indicates client error (wrong argument passed to API). See exception message for details. -public struct IllegalArgumentException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { - - public struct Properties { - public internal(set) var message: Swift.String? = nil - } - - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "IllegalArgumentException" } - public static var fault: ClientRuntime.ErrorFault { .client } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? - - public init( - message: Swift.String? = nil - ) - { - self.properties.message = message - } -} - -/// Non-retryable exception. Attempted to make an operation on non-existing or expired resource. -public struct ResourceNotFoundException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { - - public struct Properties { - public internal(set) var message: Swift.String? = nil - } - - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "ResourceNotFoundException" } - public static var fault: ClientRuntime.ErrorFault { .client } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? - - public init( - message: Swift.String? = nil - ) - { - self.properties.message = message - } -} - -/// Retryable exception. In general indicates internal failure that can be fixed by retry. -public struct RetryableException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { - - public struct Properties { - public internal(set) var message: Swift.String? = nil - } - - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "RetryableException" } - public static var fault: ClientRuntime.ErrorFault { .server } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? - - public init( - message: Swift.String? = nil - ) - { - self.properties.message = message - } -} - -/// Deprecated. To be removed from the model. -public struct ServiceInternalException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { - - public struct Properties { - public internal(set) var message: Swift.String? = nil - } - - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "ServiceInternalException" } - public static var fault: ClientRuntime.ErrorFault { .server } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? - - public init( - message: Swift.String? = nil - ) - { - self.properties.message = message - } -} - -/// Retryable exception, indicates internal server error. -public struct ServiceUnavailableException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { - - public struct Properties { - public internal(set) var message: Swift.String? = nil - } - - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "ServiceUnavailableException" } - public static var fault: ClientRuntime.ErrorFault { .server } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? - - public init( - message: Swift.String? = nil - ) - { - self.properties.message = message - } -} - -/// Increased rate over throttling limits. Can be retried with exponential backoff. -public struct ThrottlingException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { - - public struct Properties { - public internal(set) var message: Swift.String? = nil - } - - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "ThrottlingException" } - public static var fault: ClientRuntime.ErrorFault { .client } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? - - public init( - message: Swift.String? = nil - ) - { - self.properties.message = message - } -} - -public struct DeleteObjectInput { - /// Backup job Id for the in-progress backup. - /// This member is required. - public var backupJobId: Swift.String? - /// The name of the Object. - /// This member is required. - public var objectName: Swift.String? - - public init( - backupJobId: Swift.String? = nil, - objectName: Swift.String? = nil - ) - { - self.backupJobId = backupJobId - self.objectName = objectName - } -} - -/// Non-retryable exception. Indicates the KMS key usage is incorrect. See exception message for details. -public struct KMSInvalidKeyUsageException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { - - public struct Properties { - public internal(set) var message: Swift.String? = nil - } - - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "KMSInvalidKeyUsageException" } - public static var fault: ClientRuntime.ErrorFault { .client } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? - - public init( - message: Swift.String? = nil - ) - { - self.properties.message = message - } -} - -public struct GetChunkInput { - /// Chunk token - /// This member is required. - public var chunkToken: Swift.String? - /// Storage job id - /// This member is required. - public var storageJobId: Swift.String? - - public init( - chunkToken: Swift.String? = nil, - storageJobId: Swift.String? = nil - ) - { - self.chunkToken = chunkToken - self.storageJobId = storageJobId - } -} - -public struct GetChunkOutput { - /// Data checksum - /// This member is required. - public var checksum: Swift.String? - /// Checksum algorithm - /// This member is required. - public var checksumAlgorithm: BackupStorageClientTypes.DataChecksumAlgorithm? - /// Chunk data - /// This member is required. - public var data: Smithy.ByteStream? - /// Data length - /// This member is required. - public var length: Swift.Int - - public init( - checksum: Swift.String? = nil, - checksumAlgorithm: BackupStorageClientTypes.DataChecksumAlgorithm? = nil, - data: Smithy.ByteStream? = nil, - length: Swift.Int = 0 - ) - { - self.checksum = checksum - self.checksumAlgorithm = checksumAlgorithm - self.data = data - self.length = length - } -} - -public struct GetObjectMetadataInput { - /// Object token. - /// This member is required. - public var objectToken: Swift.String? - /// Backup job id for the in-progress backup. - /// This member is required. - public var storageJobId: Swift.String? - - public init( - objectToken: Swift.String? = nil, - storageJobId: Swift.String? = nil - ) - { - self.objectToken = objectToken - self.storageJobId = storageJobId - } -} - -public struct GetObjectMetadataOutput { - /// Metadata blob. - public var metadataBlob: Smithy.ByteStream? - /// MetadataBlob checksum. - public var metadataBlobChecksum: Swift.String? - /// Checksum algorithm. - public var metadataBlobChecksumAlgorithm: BackupStorageClientTypes.DataChecksumAlgorithm? - /// The size of MetadataBlob. - public var metadataBlobLength: Swift.Int - /// Metadata string. - public var metadataString: Swift.String? - - public init( - metadataBlob: Smithy.ByteStream? = nil, - metadataBlobChecksum: Swift.String? = nil, - metadataBlobChecksumAlgorithm: BackupStorageClientTypes.DataChecksumAlgorithm? = nil, - metadataBlobLength: Swift.Int = 0, - metadataString: Swift.String? = nil - ) - { - self.metadataBlob = metadataBlob - self.metadataBlobChecksum = metadataBlobChecksum - self.metadataBlobChecksumAlgorithm = metadataBlobChecksumAlgorithm - self.metadataBlobLength = metadataBlobLength - self.metadataString = metadataString - } -} - -public struct ListChunksInput { - /// Maximum number of chunks - public var maxResults: Swift.Int? - /// Pagination token - public var nextToken: Swift.String? - /// Object token - /// This member is required. - public var objectToken: Swift.String? - /// Storage job id - /// This member is required. - public var storageJobId: Swift.String? - - public init( - maxResults: Swift.Int? = nil, - nextToken: Swift.String? = nil, - objectToken: Swift.String? = nil, - storageJobId: Swift.String? = nil - ) - { - self.maxResults = maxResults - self.nextToken = nextToken - self.objectToken = objectToken - self.storageJobId = storageJobId - } -} - -public struct ListChunksOutput { - /// List of chunks - /// This member is required. - public var chunkList: [BackupStorageClientTypes.Chunk]? - /// Pagination token - public var nextToken: Swift.String? - - public init( - chunkList: [BackupStorageClientTypes.Chunk]? = nil, - nextToken: Swift.String? = nil - ) - { - self.chunkList = chunkList - self.nextToken = nextToken - } -} - -public struct ListObjectsInput { - /// (Optional) Created after filter - public var createdAfter: Foundation.Date? - /// (Optional) Created before filter - public var createdBefore: Foundation.Date? - /// Maximum objects count - public var maxResults: Swift.Int? - /// Pagination token - public var nextToken: Swift.String? - /// Optional, specifies the starting Object name to list from. Ignored if NextToken is not NULL - public var startingObjectName: Swift.String? - /// Optional, specifies the starting Object prefix to list from. Ignored if NextToken is not NULL - public var startingObjectPrefix: Swift.String? - /// Storage job id - /// This member is required. - public var storageJobId: Swift.String? - - public init( - createdAfter: Foundation.Date? = nil, - createdBefore: Foundation.Date? = nil, - maxResults: Swift.Int? = nil, - nextToken: Swift.String? = nil, - startingObjectName: Swift.String? = nil, - startingObjectPrefix: Swift.String? = nil, - storageJobId: Swift.String? = nil - ) - { - self.createdAfter = createdAfter - self.createdBefore = createdBefore - self.maxResults = maxResults - self.nextToken = nextToken - self.startingObjectName = startingObjectName - self.startingObjectPrefix = startingObjectPrefix - self.storageJobId = storageJobId - } -} - -public struct ListObjectsOutput { - /// Pagination token - public var nextToken: Swift.String? - /// Object list - /// This member is required. - public var objectList: [BackupStorageClientTypes.BackupObject]? - - public init( - nextToken: Swift.String? = nil, - objectList: [BackupStorageClientTypes.BackupObject]? = nil - ) - { - self.nextToken = nextToken - self.objectList = objectList - } -} - -/// Retryalble exception. Indicated issues while reading an input stream due to the networking issues or connection drop on the client side. -public struct NotReadableInputStreamException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { - - public struct Properties { - public internal(set) var message: Swift.String? = nil - } - - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "NotReadableInputStreamException" } - public static var fault: ClientRuntime.ErrorFault { .client } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? - - public init( - message: Swift.String? = nil - ) - { - self.properties.message = message - } -} - -public struct NotifyObjectCompleteInput { - /// Backup job Id for the in-progress backup - /// This member is required. - public var backupJobId: Swift.String? - /// Optional metadata associated with an Object. Maximum length is 4MB. - public var metadataBlob: Smithy.ByteStream? - /// Checksum of MetadataBlob. - public var metadataBlobChecksum: Swift.String? - /// Checksum algorithm. - public var metadataBlobChecksumAlgorithm: BackupStorageClientTypes.DataChecksumAlgorithm? - /// The size of MetadataBlob. - public var metadataBlobLength: Swift.Int? - /// Optional metadata associated with an Object. Maximum string length is 256 bytes. - public var metadataString: Swift.String? - /// Object checksum - /// This member is required. - public var objectChecksum: Swift.String? - /// Checksum algorithm - /// This member is required. - public var objectChecksumAlgorithm: BackupStorageClientTypes.SummaryChecksumAlgorithm? - /// Upload Id for the in-progress upload - /// This member is required. - public var uploadId: Swift.String? - - public init( - backupJobId: Swift.String? = nil, - metadataBlob: Smithy.ByteStream? = nil, - metadataBlobChecksum: Swift.String? = nil, - metadataBlobChecksumAlgorithm: BackupStorageClientTypes.DataChecksumAlgorithm? = nil, - metadataBlobLength: Swift.Int? = nil, - metadataString: Swift.String? = nil, - objectChecksum: Swift.String? = nil, - objectChecksumAlgorithm: BackupStorageClientTypes.SummaryChecksumAlgorithm? = nil, - uploadId: Swift.String? = nil - ) - { - self.backupJobId = backupJobId - self.metadataBlob = metadataBlob - self.metadataBlobChecksum = metadataBlobChecksum - self.metadataBlobChecksumAlgorithm = metadataBlobChecksumAlgorithm - self.metadataBlobLength = metadataBlobLength - self.metadataString = metadataString - self.objectChecksum = objectChecksum - self.objectChecksumAlgorithm = objectChecksumAlgorithm - self.uploadId = uploadId - } -} - -public struct NotifyObjectCompleteOutput { - /// Object checksum - /// This member is required. - public var objectChecksum: Swift.String? - /// Checksum algorithm - /// This member is required. - public var objectChecksumAlgorithm: BackupStorageClientTypes.SummaryChecksumAlgorithm? - - public init( - objectChecksum: Swift.String? = nil, - objectChecksumAlgorithm: BackupStorageClientTypes.SummaryChecksumAlgorithm? = nil - ) - { - self.objectChecksum = objectChecksum - self.objectChecksumAlgorithm = objectChecksumAlgorithm - } -} - -public struct PutChunkInput { - /// Backup job Id for the in-progress backup. - /// This member is required. - public var backupJobId: Swift.String? - /// Data checksum - /// This member is required. - public var checksum: Swift.String? - /// Checksum algorithm - /// This member is required. - public var checksumAlgorithm: BackupStorageClientTypes.DataChecksumAlgorithm? - /// Describes this chunk's position relative to the other chunks - /// This member is required. - public var chunkIndex: Swift.Int? - /// Data to be uploaded - /// This member is required. - public var data: Smithy.ByteStream? - /// Data length - /// This member is required. - public var length: Swift.Int? - /// Upload Id for the in-progress upload. - /// This member is required. - public var uploadId: Swift.String? - - public init( - backupJobId: Swift.String? = nil, - checksum: Swift.String? = nil, - checksumAlgorithm: BackupStorageClientTypes.DataChecksumAlgorithm? = nil, - chunkIndex: Swift.Int? = nil, - data: Smithy.ByteStream? = nil, - length: Swift.Int? = nil, - uploadId: Swift.String? = nil - ) - { - self.backupJobId = backupJobId - self.checksum = checksum - self.checksumAlgorithm = checksumAlgorithm - self.chunkIndex = chunkIndex - self.data = data - self.length = length - self.uploadId = uploadId - } -} - -public struct PutChunkOutput { - /// Chunk checksum - /// This member is required. - public var chunkChecksum: Swift.String? - /// Checksum algorithm - /// This member is required. - public var chunkChecksumAlgorithm: BackupStorageClientTypes.DataChecksumAlgorithm? - - public init( - chunkChecksum: Swift.String? = nil, - chunkChecksumAlgorithm: BackupStorageClientTypes.DataChecksumAlgorithm? = nil - ) - { - self.chunkChecksum = chunkChecksum - self.chunkChecksumAlgorithm = chunkChecksumAlgorithm - } -} - -public struct PutObjectInput { - /// Backup job Id for the in-progress backup. - /// This member is required. - public var backupJobId: Swift.String? - /// Inline chunk data to be uploaded. - public var inlineChunk: Smithy.ByteStream? - /// Inline chunk checksum - public var inlineChunkChecksum: Swift.String? - /// Inline chunk checksum algorithm - public var inlineChunkChecksumAlgorithm: Swift.String? - /// Length of the inline chunk data. - public var inlineChunkLength: Swift.Int? - /// Store user defined metadata like backup checksum, disk ids, restore metadata etc. - public var metadataString: Swift.String? - /// object checksum - public var objectChecksum: Swift.String? - /// object checksum algorithm - public var objectChecksumAlgorithm: BackupStorageClientTypes.SummaryChecksumAlgorithm? - /// The name of the Object to be uploaded. - /// This member is required. - public var objectName: Swift.String? - /// Throw an exception if Object name is already exist. - public var throwOnDuplicate: Swift.Bool? - - public init( - backupJobId: Swift.String? = nil, - inlineChunk: Smithy.ByteStream? = nil, - inlineChunkChecksum: Swift.String? = nil, - inlineChunkChecksumAlgorithm: Swift.String? = nil, - inlineChunkLength: Swift.Int? = nil, - metadataString: Swift.String? = nil, - objectChecksum: Swift.String? = nil, - objectChecksumAlgorithm: BackupStorageClientTypes.SummaryChecksumAlgorithm? = nil, - objectName: Swift.String? = nil, - throwOnDuplicate: Swift.Bool? = nil - ) - { - self.backupJobId = backupJobId - self.inlineChunk = inlineChunk - self.inlineChunkChecksum = inlineChunkChecksum - self.inlineChunkChecksumAlgorithm = inlineChunkChecksumAlgorithm - self.inlineChunkLength = inlineChunkLength - self.metadataString = metadataString - self.objectChecksum = objectChecksum - self.objectChecksumAlgorithm = objectChecksumAlgorithm - self.objectName = objectName - self.throwOnDuplicate = throwOnDuplicate - } -} - -public struct PutObjectOutput { - /// Inline chunk checksum - /// This member is required. - public var inlineChunkChecksum: Swift.String? - /// Inline chunk checksum algorithm - /// This member is required. - public var inlineChunkChecksumAlgorithm: BackupStorageClientTypes.DataChecksumAlgorithm? - /// object checksum - /// This member is required. - public var objectChecksum: Swift.String? - /// object checksum algorithm - /// This member is required. - public var objectChecksumAlgorithm: BackupStorageClientTypes.SummaryChecksumAlgorithm? - - public init( - inlineChunkChecksum: Swift.String? = nil, - inlineChunkChecksumAlgorithm: BackupStorageClientTypes.DataChecksumAlgorithm? = nil, - objectChecksum: Swift.String? = nil, - objectChecksumAlgorithm: BackupStorageClientTypes.SummaryChecksumAlgorithm? = nil - ) - { - self.inlineChunkChecksum = inlineChunkChecksum - self.inlineChunkChecksumAlgorithm = inlineChunkChecksumAlgorithm - self.objectChecksum = objectChecksum - self.objectChecksumAlgorithm = objectChecksumAlgorithm - } -} - -/// Non-retryable exception. Attempted to create already existing object or chunk. This message contains a checksum of already presented data. -public struct DataAlreadyExistsException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { - - public struct Properties { - /// Data checksum used - public internal(set) var checksum: Swift.String? = nil - /// Checksum algorithm used - public internal(set) var checksumAlgorithm: Swift.String? = nil - public internal(set) var message: Swift.String? = nil - } - - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "DataAlreadyExistsException" } - public static var fault: ClientRuntime.ErrorFault { .client } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? - - public init( - checksum: Swift.String? = nil, - checksumAlgorithm: Swift.String? = nil, - message: Swift.String? = nil - ) - { - self.properties.checksum = checksum - self.properties.checksumAlgorithm = checksumAlgorithm - self.properties.message = message - } -} - -public struct StartObjectInput { - /// Backup job Id for the in-progress backup - /// This member is required. - public var backupJobId: Swift.String? - /// Name for the object. - /// This member is required. - public var objectName: Swift.String? - /// Throw an exception if Object name is already exist. - public var throwOnDuplicate: Swift.Bool? - - public init( - backupJobId: Swift.String? = nil, - objectName: Swift.String? = nil, - throwOnDuplicate: Swift.Bool? = nil - ) - { - self.backupJobId = backupJobId - self.objectName = objectName - self.throwOnDuplicate = throwOnDuplicate - } -} - -public struct StartObjectOutput { - /// Upload Id for a given upload. - /// This member is required. - public var uploadId: Swift.String? - - public init( - uploadId: Swift.String? = nil - ) - { - self.uploadId = uploadId - } -} - -extension DeleteObjectInput { - - static func urlPathProvider(_ value: DeleteObjectInput) -> Swift.String? { - guard let backupJobId = value.backupJobId else { - return nil - } - guard let objectName = value.objectName else { - return nil - } - return "/backup-jobs/\(backupJobId.urlPercentEncoding())/object/\(objectName.urlPercentEncoding())" - } -} - -extension GetChunkInput { - - static func urlPathProvider(_ value: GetChunkInput) -> Swift.String? { - guard let storageJobId = value.storageJobId else { - return nil - } - guard let chunkToken = value.chunkToken else { - return nil - } - return "/restore-jobs/\(storageJobId.urlPercentEncoding())/chunk/\(chunkToken.urlPercentEncoding())" - } -} - -extension GetObjectMetadataInput { - - static func urlPathProvider(_ value: GetObjectMetadataInput) -> Swift.String? { - guard let storageJobId = value.storageJobId else { - return nil - } - guard let objectToken = value.objectToken else { - return nil - } - return "/restore-jobs/\(storageJobId.urlPercentEncoding())/object/\(objectToken.urlPercentEncoding())/metadata" - } -} - -extension ListChunksInput { - - static func urlPathProvider(_ value: ListChunksInput) -> Swift.String? { - guard let storageJobId = value.storageJobId else { - return nil - } - guard let objectToken = value.objectToken else { - return nil - } - return "/restore-jobs/\(storageJobId.urlPercentEncoding())/chunks/\(objectToken.urlPercentEncoding())/list" - } -} - -extension ListChunksInput { - - static func queryItemProvider(_ value: ListChunksInput) throws -> [Smithy.URIQueryItem] { - var items = [Smithy.URIQueryItem]() - if let nextToken = value.nextToken { - let nextTokenQueryItem = Smithy.URIQueryItem(name: "next-token".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) - items.append(nextTokenQueryItem) - } - if let maxResults = value.maxResults { - let maxResultsQueryItem = Smithy.URIQueryItem(name: "max-results".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) - items.append(maxResultsQueryItem) - } - return items - } -} - -extension ListObjectsInput { - - static func urlPathProvider(_ value: ListObjectsInput) -> Swift.String? { - guard let storageJobId = value.storageJobId else { - return nil - } - return "/restore-jobs/\(storageJobId.urlPercentEncoding())/objects/list" - } -} - -extension ListObjectsInput { - - static func queryItemProvider(_ value: ListObjectsInput) throws -> [Smithy.URIQueryItem] { - var items = [Smithy.URIQueryItem]() - if let startingObjectName = value.startingObjectName { - let startingObjectNameQueryItem = Smithy.URIQueryItem(name: "starting-object-name".urlPercentEncoding(), value: Swift.String(startingObjectName).urlPercentEncoding()) - items.append(startingObjectNameQueryItem) - } - if let nextToken = value.nextToken { - let nextTokenQueryItem = Smithy.URIQueryItem(name: "next-token".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) - items.append(nextTokenQueryItem) - } - if let maxResults = value.maxResults { - let maxResultsQueryItem = Smithy.URIQueryItem(name: "max-results".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) - items.append(maxResultsQueryItem) - } - if let createdAfter = value.createdAfter { - let createdAfterQueryItem = Smithy.URIQueryItem(name: "created-after".urlPercentEncoding(), value: Swift.String(SmithyTimestamps.TimestampFormatter(format: .dateTime).string(from: createdAfter)).urlPercentEncoding()) - items.append(createdAfterQueryItem) - } - if let startingObjectPrefix = value.startingObjectPrefix { - let startingObjectPrefixQueryItem = Smithy.URIQueryItem(name: "starting-object-prefix".urlPercentEncoding(), value: Swift.String(startingObjectPrefix).urlPercentEncoding()) - items.append(startingObjectPrefixQueryItem) - } - if let createdBefore = value.createdBefore { - let createdBeforeQueryItem = Smithy.URIQueryItem(name: "created-before".urlPercentEncoding(), value: Swift.String(SmithyTimestamps.TimestampFormatter(format: .dateTime).string(from: createdBefore)).urlPercentEncoding()) - items.append(createdBeforeQueryItem) - } - return items - } -} - -extension NotifyObjectCompleteInput { - - static func urlPathProvider(_ value: NotifyObjectCompleteInput) -> Swift.String? { - guard let backupJobId = value.backupJobId else { - return nil - } - guard let uploadId = value.uploadId else { - return nil - } - return "/backup-jobs/\(backupJobId.urlPercentEncoding())/object/\(uploadId.urlPercentEncoding())/complete" - } -} - -extension NotifyObjectCompleteInput { - - static func queryItemProvider(_ value: NotifyObjectCompleteInput) throws -> [Smithy.URIQueryItem] { - var items = [Smithy.URIQueryItem]() - guard let objectChecksum = value.objectChecksum else { - let message = "Creating a URL Query Item failed. objectChecksum is required and must not be nil." - throw Smithy.ClientError.unknownError(message) - } - let objectChecksumQueryItem = Smithy.URIQueryItem(name: "checksum".urlPercentEncoding(), value: Swift.String(objectChecksum).urlPercentEncoding()) - items.append(objectChecksumQueryItem) - guard let objectChecksumAlgorithm = value.objectChecksumAlgorithm else { - let message = "Creating a URL Query Item failed. objectChecksumAlgorithm is required and must not be nil." - throw Smithy.ClientError.unknownError(message) - } - let objectChecksumAlgorithmQueryItem = Smithy.URIQueryItem(name: "checksum-algorithm".urlPercentEncoding(), value: Swift.String(objectChecksumAlgorithm.rawValue).urlPercentEncoding()) - items.append(objectChecksumAlgorithmQueryItem) - if let metadataBlobLength = value.metadataBlobLength { - let metadataBlobLengthQueryItem = Smithy.URIQueryItem(name: "metadata-blob-length".urlPercentEncoding(), value: Swift.String(metadataBlobLength).urlPercentEncoding()) - items.append(metadataBlobLengthQueryItem) - } - if let metadataBlobChecksum = value.metadataBlobChecksum { - let metadataBlobChecksumQueryItem = Smithy.URIQueryItem(name: "metadata-checksum".urlPercentEncoding(), value: Swift.String(metadataBlobChecksum).urlPercentEncoding()) - items.append(metadataBlobChecksumQueryItem) - } - if let metadataBlobChecksumAlgorithm = value.metadataBlobChecksumAlgorithm { - let metadataBlobChecksumAlgorithmQueryItem = Smithy.URIQueryItem(name: "metadata-checksum-algorithm".urlPercentEncoding(), value: Swift.String(metadataBlobChecksumAlgorithm.rawValue).urlPercentEncoding()) - items.append(metadataBlobChecksumAlgorithmQueryItem) - } - if let metadataString = value.metadataString { - let metadataStringQueryItem = Smithy.URIQueryItem(name: "metadata-string".urlPercentEncoding(), value: Swift.String(metadataString).urlPercentEncoding()) - items.append(metadataStringQueryItem) - } - return items - } -} - -extension PutChunkInput { - - static func urlPathProvider(_ value: PutChunkInput) -> Swift.String? { - guard let backupJobId = value.backupJobId else { - return nil - } - guard let uploadId = value.uploadId else { - return nil - } - guard let chunkIndex = value.chunkIndex else { - return nil - } - return "/backup-jobs/\(backupJobId.urlPercentEncoding())/chunk/\(uploadId.urlPercentEncoding())/\(chunkIndex)" - } -} - -extension PutChunkInput { - - static func queryItemProvider(_ value: PutChunkInput) throws -> [Smithy.URIQueryItem] { - var items = [Smithy.URIQueryItem]() - guard let length = value.length else { - let message = "Creating a URL Query Item failed. length is required and must not be nil." - throw Smithy.ClientError.unknownError(message) - } - let lengthQueryItem = Smithy.URIQueryItem(name: "length".urlPercentEncoding(), value: Swift.String(length).urlPercentEncoding()) - items.append(lengthQueryItem) - guard let checksum = value.checksum else { - let message = "Creating a URL Query Item failed. checksum is required and must not be nil." - throw Smithy.ClientError.unknownError(message) - } - let checksumQueryItem = Smithy.URIQueryItem(name: "checksum".urlPercentEncoding(), value: Swift.String(checksum).urlPercentEncoding()) - items.append(checksumQueryItem) - guard let checksumAlgorithm = value.checksumAlgorithm else { - let message = "Creating a URL Query Item failed. checksumAlgorithm is required and must not be nil." - throw Smithy.ClientError.unknownError(message) - } - let checksumAlgorithmQueryItem = Smithy.URIQueryItem(name: "checksum-algorithm".urlPercentEncoding(), value: Swift.String(checksumAlgorithm.rawValue).urlPercentEncoding()) - items.append(checksumAlgorithmQueryItem) - return items - } -} - -extension PutObjectInput { - - static func urlPathProvider(_ value: PutObjectInput) -> Swift.String? { - guard let backupJobId = value.backupJobId else { - return nil - } - guard let objectName = value.objectName else { - return nil - } - return "/backup-jobs/\(backupJobId.urlPercentEncoding())/object/\(objectName.urlPercentEncoding())/put-object" - } -} - -extension PutObjectInput { - - static func queryItemProvider(_ value: PutObjectInput) throws -> [Smithy.URIQueryItem] { - var items = [Smithy.URIQueryItem]() - if let inlineChunkChecksum = value.inlineChunkChecksum { - let inlineChunkChecksumQueryItem = Smithy.URIQueryItem(name: "checksum".urlPercentEncoding(), value: Swift.String(inlineChunkChecksum).urlPercentEncoding()) - items.append(inlineChunkChecksumQueryItem) - } - if let objectChecksum = value.objectChecksum { - let objectChecksumQueryItem = Smithy.URIQueryItem(name: "object-checksum".urlPercentEncoding(), value: Swift.String(objectChecksum).urlPercentEncoding()) - items.append(objectChecksumQueryItem) - } - if let objectChecksumAlgorithm = value.objectChecksumAlgorithm { - let objectChecksumAlgorithmQueryItem = Smithy.URIQueryItem(name: "object-checksum-algorithm".urlPercentEncoding(), value: Swift.String(objectChecksumAlgorithm.rawValue).urlPercentEncoding()) - items.append(objectChecksumAlgorithmQueryItem) - } - if let inlineChunkLength = value.inlineChunkLength { - let inlineChunkLengthQueryItem = Smithy.URIQueryItem(name: "length".urlPercentEncoding(), value: Swift.String(inlineChunkLength).urlPercentEncoding()) - items.append(inlineChunkLengthQueryItem) - } - if let inlineChunkChecksumAlgorithm = value.inlineChunkChecksumAlgorithm { - let inlineChunkChecksumAlgorithmQueryItem = Smithy.URIQueryItem(name: "checksum-algorithm".urlPercentEncoding(), value: Swift.String(inlineChunkChecksumAlgorithm).urlPercentEncoding()) - items.append(inlineChunkChecksumAlgorithmQueryItem) - } - if let metadataString = value.metadataString { - let metadataStringQueryItem = Smithy.URIQueryItem(name: "metadata-string".urlPercentEncoding(), value: Swift.String(metadataString).urlPercentEncoding()) - items.append(metadataStringQueryItem) - } - if let throwOnDuplicate = value.throwOnDuplicate { - let throwOnDuplicateQueryItem = Smithy.URIQueryItem(name: "throwOnDuplicate".urlPercentEncoding(), value: Swift.String(throwOnDuplicate).urlPercentEncoding()) - items.append(throwOnDuplicateQueryItem) - } - return items - } -} - -extension StartObjectInput { - - static func urlPathProvider(_ value: StartObjectInput) -> Swift.String? { - guard let backupJobId = value.backupJobId else { - return nil - } - guard let objectName = value.objectName else { - return nil - } - return "/backup-jobs/\(backupJobId.urlPercentEncoding())/object/\(objectName.urlPercentEncoding())" - } -} - -extension NotifyObjectCompleteInput { - - static func write(value: NotifyObjectCompleteInput?, to writer: SmithyJSON.Writer) throws { - guard let value else { return } - try writer["MetadataBlob"].write(value.metadataBlob) - } -} - -extension PutChunkInput { - - static func write(value: PutChunkInput?, to writer: SmithyJSON.Writer) throws { - guard let value else { return } - try writer["Data"].write(value.data) - } -} - -extension PutObjectInput { - - static func write(value: PutObjectInput?, to writer: SmithyJSON.Writer) throws { - guard let value else { return } - try writer["InlineChunk"].write(value.inlineChunk) - } -} - -extension StartObjectInput { - - static func write(value: StartObjectInput?, to writer: SmithyJSON.Writer) throws { - guard let value else { return } - try writer["ThrowOnDuplicate"].write(value.throwOnDuplicate) - } -} - -extension DeleteObjectOutput { - - static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DeleteObjectOutput { - return DeleteObjectOutput() - } -} - -extension GetChunkOutput { - - static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetChunkOutput { - var value = GetChunkOutput() - if let checksumHeaderValue = httpResponse.headers.value(for: "x-amz-checksum") { - value.checksum = checksumHeaderValue - } - if let checksumAlgorithmHeaderValue = httpResponse.headers.value(for: "x-amz-checksum-algorithm") { - value.checksumAlgorithm = BackupStorageClientTypes.DataChecksumAlgorithm(rawValue: checksumAlgorithmHeaderValue) - } - if let lengthHeaderValue = httpResponse.headers.value(for: "x-amz-data-length") { - value.length = Swift.Int(lengthHeaderValue) ?? 0 - } - switch httpResponse.body { - case .data(let data): - value.data = .data(data) - case .stream(let stream): - value.data = .stream(stream) - case .noStream: - value.data = nil - } - return value - } -} - -extension GetObjectMetadataOutput { - - static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetObjectMetadataOutput { - var value = GetObjectMetadataOutput() - if let metadataBlobChecksumHeaderValue = httpResponse.headers.value(for: "x-amz-checksum") { - value.metadataBlobChecksum = metadataBlobChecksumHeaderValue - } - if let metadataBlobChecksumAlgorithmHeaderValue = httpResponse.headers.value(for: "x-amz-checksum-algorithm") { - value.metadataBlobChecksumAlgorithm = BackupStorageClientTypes.DataChecksumAlgorithm(rawValue: metadataBlobChecksumAlgorithmHeaderValue) - } - if let metadataBlobLengthHeaderValue = httpResponse.headers.value(for: "x-amz-data-length") { - value.metadataBlobLength = Swift.Int(metadataBlobLengthHeaderValue) ?? 0 - } - if let metadataStringHeaderValue = httpResponse.headers.value(for: "x-amz-metadata-string") { - value.metadataString = metadataStringHeaderValue - } - switch httpResponse.body { - case .data(let data): - value.metadataBlob = .data(data) - case .stream(let stream): - value.metadataBlob = .stream(stream) - case .noStream: - value.metadataBlob = nil - } - return value - } -} - -extension ListChunksOutput { - - static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListChunksOutput { - let data = try await httpResponse.data() - let responseReader = try SmithyJSON.Reader.from(data: data) - let reader = responseReader - var value = ListChunksOutput() - value.chunkList = try reader["ChunkList"].readListIfPresent(memberReadingClosure: BackupStorageClientTypes.Chunk.read(from:), memberNodeInfo: "member", isFlattened: false) - value.nextToken = try reader["NextToken"].readIfPresent() - return value - } -} - -extension ListObjectsOutput { - - static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListObjectsOutput { - let data = try await httpResponse.data() - let responseReader = try SmithyJSON.Reader.from(data: data) - let reader = responseReader - var value = ListObjectsOutput() - value.nextToken = try reader["NextToken"].readIfPresent() - value.objectList = try reader["ObjectList"].readListIfPresent(memberReadingClosure: BackupStorageClientTypes.BackupObject.read(from:), memberNodeInfo: "member", isFlattened: false) - return value - } -} - -extension NotifyObjectCompleteOutput { - - static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> NotifyObjectCompleteOutput { - let data = try await httpResponse.data() - let responseReader = try SmithyJSON.Reader.from(data: data) - let reader = responseReader - var value = NotifyObjectCompleteOutput() - value.objectChecksum = try reader["ObjectChecksum"].readIfPresent() - value.objectChecksumAlgorithm = try reader["ObjectChecksumAlgorithm"].readIfPresent() - return value - } -} - -extension PutChunkOutput { - - static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> PutChunkOutput { - let data = try await httpResponse.data() - let responseReader = try SmithyJSON.Reader.from(data: data) - let reader = responseReader - var value = PutChunkOutput() - value.chunkChecksum = try reader["ChunkChecksum"].readIfPresent() - value.chunkChecksumAlgorithm = try reader["ChunkChecksumAlgorithm"].readIfPresent() - return value - } -} - -extension PutObjectOutput { - - static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> PutObjectOutput { - let data = try await httpResponse.data() - let responseReader = try SmithyJSON.Reader.from(data: data) - let reader = responseReader - var value = PutObjectOutput() - value.inlineChunkChecksum = try reader["InlineChunkChecksum"].readIfPresent() - value.inlineChunkChecksumAlgorithm = try reader["InlineChunkChecksumAlgorithm"].readIfPresent() - value.objectChecksum = try reader["ObjectChecksum"].readIfPresent() - value.objectChecksumAlgorithm = try reader["ObjectChecksumAlgorithm"].readIfPresent() - return value - } -} - -extension StartObjectOutput { - - static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> StartObjectOutput { - let data = try await httpResponse.data() - let responseReader = try SmithyJSON.Reader.from(data: data) - let reader = responseReader - var value = StartObjectOutput() - value.uploadId = try reader["UploadId"].readIfPresent() - return value - } -} - -enum DeleteObjectOutputError { - - static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { - let data = try await httpResponse.data() - let responseReader = try SmithyJSON.Reader.from(data: data) - let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) - if let error = baseError.customError() { return error } - switch baseError.code { - case "AccessDenied": return try AccessDeniedException.makeError(baseError: baseError) - case "IllegalArgumentException": return try IllegalArgumentException.makeError(baseError: baseError) - case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) - case "RetryableException": return try RetryableException.makeError(baseError: baseError) - case "ServiceInternalException": return try ServiceInternalException.makeError(baseError: baseError) - case "ServiceUnavailableException": return try ServiceUnavailableException.makeError(baseError: baseError) - case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) - default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) - } - } -} - -enum GetChunkOutputError { - - static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { - let data = try await httpResponse.data() - let responseReader = try SmithyJSON.Reader.from(data: data) - let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) - if let error = baseError.customError() { return error } - switch baseError.code { - case "AccessDenied": return try AccessDeniedException.makeError(baseError: baseError) - case "IllegalArgumentException": return try IllegalArgumentException.makeError(baseError: baseError) - case "KMSInvalidKeyUsageException": return try KMSInvalidKeyUsageException.makeError(baseError: baseError) - case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) - case "RetryableException": return try RetryableException.makeError(baseError: baseError) - case "ServiceInternalException": return try ServiceInternalException.makeError(baseError: baseError) - case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) - default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) - } - } -} - -enum GetObjectMetadataOutputError { - - static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { - let data = try await httpResponse.data() - let responseReader = try SmithyJSON.Reader.from(data: data) - let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) - if let error = baseError.customError() { return error } - switch baseError.code { - case "AccessDenied": return try AccessDeniedException.makeError(baseError: baseError) - case "IllegalArgumentException": return try IllegalArgumentException.makeError(baseError: baseError) - case "KMSInvalidKeyUsageException": return try KMSInvalidKeyUsageException.makeError(baseError: baseError) - case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) - case "RetryableException": return try RetryableException.makeError(baseError: baseError) - case "ServiceInternalException": return try ServiceInternalException.makeError(baseError: baseError) - case "ServiceUnavailableException": return try ServiceUnavailableException.makeError(baseError: baseError) - case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) - default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) - } - } -} - -enum ListChunksOutputError { - - static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { - let data = try await httpResponse.data() - let responseReader = try SmithyJSON.Reader.from(data: data) - let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) - if let error = baseError.customError() { return error } - switch baseError.code { - case "AccessDenied": return try AccessDeniedException.makeError(baseError: baseError) - case "IllegalArgumentException": return try IllegalArgumentException.makeError(baseError: baseError) - case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) - case "RetryableException": return try RetryableException.makeError(baseError: baseError) - case "ServiceInternalException": return try ServiceInternalException.makeError(baseError: baseError) - case "ServiceUnavailableException": return try ServiceUnavailableException.makeError(baseError: baseError) - default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) - } - } -} - -enum ListObjectsOutputError { - - static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { - let data = try await httpResponse.data() - let responseReader = try SmithyJSON.Reader.from(data: data) - let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) - if let error = baseError.customError() { return error } - switch baseError.code { - case "AccessDenied": return try AccessDeniedException.makeError(baseError: baseError) - case "IllegalArgumentException": return try IllegalArgumentException.makeError(baseError: baseError) - case "KMSInvalidKeyUsageException": return try KMSInvalidKeyUsageException.makeError(baseError: baseError) - case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) - case "RetryableException": return try RetryableException.makeError(baseError: baseError) - case "ServiceInternalException": return try ServiceInternalException.makeError(baseError: baseError) - case "ServiceUnavailableException": return try ServiceUnavailableException.makeError(baseError: baseError) - case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) - default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) - } - } -} - -enum NotifyObjectCompleteOutputError { - - static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { - let data = try await httpResponse.data() - let responseReader = try SmithyJSON.Reader.from(data: data) - let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) - if let error = baseError.customError() { return error } - switch baseError.code { - case "AccessDenied": return try AccessDeniedException.makeError(baseError: baseError) - case "IllegalArgumentException": return try IllegalArgumentException.makeError(baseError: baseError) - case "KMSInvalidKeyUsageException": return try KMSInvalidKeyUsageException.makeError(baseError: baseError) - case "NotReadableInputStreamException": return try NotReadableInputStreamException.makeError(baseError: baseError) - case "RetryableException": return try RetryableException.makeError(baseError: baseError) - case "ServiceInternalException": return try ServiceInternalException.makeError(baseError: baseError) - case "ServiceUnavailableException": return try ServiceUnavailableException.makeError(baseError: baseError) - case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) - default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) - } - } -} - -enum PutChunkOutputError { - - static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { - let data = try await httpResponse.data() - let responseReader = try SmithyJSON.Reader.from(data: data) - let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) - if let error = baseError.customError() { return error } - switch baseError.code { - case "AccessDenied": return try AccessDeniedException.makeError(baseError: baseError) - case "IllegalArgumentException": return try IllegalArgumentException.makeError(baseError: baseError) - case "KMSInvalidKeyUsageException": return try KMSInvalidKeyUsageException.makeError(baseError: baseError) - case "NotReadableInputStreamException": return try NotReadableInputStreamException.makeError(baseError: baseError) - case "RetryableException": return try RetryableException.makeError(baseError: baseError) - case "ServiceInternalException": return try ServiceInternalException.makeError(baseError: baseError) - case "ServiceUnavailableException": return try ServiceUnavailableException.makeError(baseError: baseError) - case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) - default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) - } - } -} - -enum PutObjectOutputError { - - static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { - let data = try await httpResponse.data() - let responseReader = try SmithyJSON.Reader.from(data: data) - let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) - if let error = baseError.customError() { return error } - switch baseError.code { - case "AccessDenied": return try AccessDeniedException.makeError(baseError: baseError) - case "IllegalArgumentException": return try IllegalArgumentException.makeError(baseError: baseError) - case "KMSInvalidKeyUsageException": return try KMSInvalidKeyUsageException.makeError(baseError: baseError) - case "NotReadableInputStreamException": return try NotReadableInputStreamException.makeError(baseError: baseError) - case "RetryableException": return try RetryableException.makeError(baseError: baseError) - case "ServiceInternalException": return try ServiceInternalException.makeError(baseError: baseError) - case "ServiceUnavailableException": return try ServiceUnavailableException.makeError(baseError: baseError) - case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) - default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) - } - } -} - -enum StartObjectOutputError { - - static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { - let data = try await httpResponse.data() - let responseReader = try SmithyJSON.Reader.from(data: data) - let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) - if let error = baseError.customError() { return error } - switch baseError.code { - case "AccessDenied": return try AccessDeniedException.makeError(baseError: baseError) - case "DataAlreadyExistsException": return try DataAlreadyExistsException.makeError(baseError: baseError) - case "IllegalArgumentException": return try IllegalArgumentException.makeError(baseError: baseError) - case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) - case "RetryableException": return try RetryableException.makeError(baseError: baseError) - case "ServiceInternalException": return try ServiceInternalException.makeError(baseError: baseError) - case "ServiceUnavailableException": return try ServiceUnavailableException.makeError(baseError: baseError) - case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) - default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) - } - } -} - -extension AccessDeniedException { - - static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> AccessDeniedException { - let reader = baseError.errorBodyReader - var value = AccessDeniedException() - value.properties.message = try reader["Message"].readIfPresent() - value.httpResponse = baseError.httpResponse - value.requestID = baseError.requestID - value.message = baseError.message - return value - } -} - -extension ResourceNotFoundException { - - static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ResourceNotFoundException { - let reader = baseError.errorBodyReader - var value = ResourceNotFoundException() - value.properties.message = try reader["Message"].readIfPresent() - value.httpResponse = baseError.httpResponse - value.requestID = baseError.requestID - value.message = baseError.message - return value - } -} - -extension RetryableException { - - static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> RetryableException { - let reader = baseError.errorBodyReader - var value = RetryableException() - value.properties.message = try reader["Message"].readIfPresent() - value.httpResponse = baseError.httpResponse - value.requestID = baseError.requestID - value.message = baseError.message - return value - } -} - -extension ThrottlingException { - - static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ThrottlingException { - let reader = baseError.errorBodyReader - var value = ThrottlingException() - value.properties.message = try reader["Message"].readIfPresent() - value.httpResponse = baseError.httpResponse - value.requestID = baseError.requestID - value.message = baseError.message - return value - } -} - -extension ServiceInternalException { - - static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ServiceInternalException { - let reader = baseError.errorBodyReader - var value = ServiceInternalException() - value.properties.message = try reader["Message"].readIfPresent() - value.httpResponse = baseError.httpResponse - value.requestID = baseError.requestID - value.message = baseError.message - return value - } -} - -extension ServiceUnavailableException { - - static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ServiceUnavailableException { - let reader = baseError.errorBodyReader - var value = ServiceUnavailableException() - value.properties.message = try reader["Message"].readIfPresent() - value.httpResponse = baseError.httpResponse - value.requestID = baseError.requestID - value.message = baseError.message - return value - } -} - -extension IllegalArgumentException { - - static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> IllegalArgumentException { - let reader = baseError.errorBodyReader - var value = IllegalArgumentException() - value.properties.message = try reader["Message"].readIfPresent() - value.httpResponse = baseError.httpResponse - value.requestID = baseError.requestID - value.message = baseError.message - return value - } -} - -extension KMSInvalidKeyUsageException { - - static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> KMSInvalidKeyUsageException { - let reader = baseError.errorBodyReader - var value = KMSInvalidKeyUsageException() - value.properties.message = try reader["Message"].readIfPresent() - value.httpResponse = baseError.httpResponse - value.requestID = baseError.requestID - value.message = baseError.message - return value - } -} - -extension NotReadableInputStreamException { - - static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> NotReadableInputStreamException { - let reader = baseError.errorBodyReader - var value = NotReadableInputStreamException() - value.properties.message = try reader["Message"].readIfPresent() - value.httpResponse = baseError.httpResponse - value.requestID = baseError.requestID - value.message = baseError.message - return value - } -} - -extension DataAlreadyExistsException { - - static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> DataAlreadyExistsException { - let reader = baseError.errorBodyReader - var value = DataAlreadyExistsException() - value.properties.checksum = try reader["Checksum"].readIfPresent() - value.properties.checksumAlgorithm = try reader["ChecksumAlgorithm"].readIfPresent() - value.properties.message = try reader["Message"].readIfPresent() - value.httpResponse = baseError.httpResponse - value.requestID = baseError.requestID - value.message = baseError.message - return value - } -} - -extension BackupStorageClientTypes.Chunk { - - static func read(from reader: SmithyJSON.Reader) throws -> BackupStorageClientTypes.Chunk { - guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } - var value = BackupStorageClientTypes.Chunk() - value.index = try reader["Index"].readIfPresent() ?? 0 - value.length = try reader["Length"].readIfPresent() ?? 0 - value.checksum = try reader["Checksum"].readIfPresent() - value.checksumAlgorithm = try reader["ChecksumAlgorithm"].readIfPresent() - value.chunkToken = try reader["ChunkToken"].readIfPresent() - return value - } -} - -extension BackupStorageClientTypes.BackupObject { - - static func read(from reader: SmithyJSON.Reader) throws -> BackupStorageClientTypes.BackupObject { - guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } - var value = BackupStorageClientTypes.BackupObject() - value.name = try reader["Name"].readIfPresent() - value.chunksCount = try reader["ChunksCount"].readIfPresent() - value.metadataString = try reader["MetadataString"].readIfPresent() - value.objectChecksum = try reader["ObjectChecksum"].readIfPresent() - value.objectChecksumAlgorithm = try reader["ObjectChecksumAlgorithm"].readIfPresent() - value.objectToken = try reader["ObjectToken"].readIfPresent() - return value - } -} - -public enum BackupStorageClientTypes {} diff --git a/Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/Paginators.swift b/Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/Paginators.swift deleted file mode 100644 index 2cbaef23c2e..00000000000 --- a/Sources/Services/AWSBackupStorage/Sources/AWSBackupStorage/Paginators.swift +++ /dev/null @@ -1,55 +0,0 @@ -// Code generated by smithy-swift-codegen. DO NOT EDIT! - -import Foundation -import protocol ClientRuntime.PaginateToken -import struct ClientRuntime.PaginatorSequence - -extension BackupStorageClient { - /// Paginate over `[ListChunksOutput]` results. - /// - /// When this operation is called, an `AsyncSequence` is created. AsyncSequences are lazy so no service - /// calls are made until the sequence is iterated over. This also means there is no guarantee that the request is valid - /// until then. If there are errors in your request, you will see the failures only after you start iterating. - /// - Parameters: - /// - input: A `[ListChunksInput]` to start pagination - /// - Returns: An `AsyncSequence` that can iterate over `ListChunksOutput` - public func listChunksPaginated(input: ListChunksInput) -> ClientRuntime.PaginatorSequence { - return ClientRuntime.PaginatorSequence(input: input, inputKey: \.nextToken, outputKey: \.nextToken, paginationFunction: self.listChunks(input:)) - } -} - -extension ListChunksInput: ClientRuntime.PaginateToken { - public func usingPaginationToken(_ token: Swift.String) -> ListChunksInput { - return ListChunksInput( - maxResults: self.maxResults, - nextToken: token, - objectToken: self.objectToken, - storageJobId: self.storageJobId - )} -} -extension BackupStorageClient { - /// Paginate over `[ListObjectsOutput]` results. - /// - /// When this operation is called, an `AsyncSequence` is created. AsyncSequences are lazy so no service - /// calls are made until the sequence is iterated over. This also means there is no guarantee that the request is valid - /// until then. If there are errors in your request, you will see the failures only after you start iterating. - /// - Parameters: - /// - input: A `[ListObjectsInput]` to start pagination - /// - Returns: An `AsyncSequence` that can iterate over `ListObjectsOutput` - public func listObjectsPaginated(input: ListObjectsInput) -> ClientRuntime.PaginatorSequence { - return ClientRuntime.PaginatorSequence(input: input, inputKey: \.nextToken, outputKey: \.nextToken, paginationFunction: self.listObjects(input:)) - } -} - -extension ListObjectsInput: ClientRuntime.PaginateToken { - public func usingPaginationToken(_ token: Swift.String) -> ListObjectsInput { - return ListObjectsInput( - createdAfter: self.createdAfter, - createdBefore: self.createdBefore, - maxResults: self.maxResults, - nextToken: token, - startingObjectName: self.startingObjectName, - startingObjectPrefix: self.startingObjectPrefix, - storageJobId: self.storageJobId - )} -} diff --git a/Sources/Services/AWSCloudHSMV2/Sources/AWSCloudHSMV2/Models.swift b/Sources/Services/AWSCloudHSMV2/Sources/AWSCloudHSMV2/Models.swift index 34974f19405..9b3a64735bc 100644 --- a/Sources/Services/AWSCloudHSMV2/Sources/AWSCloudHSMV2/Models.swift +++ b/Sources/Services/AWSCloudHSMV2/Sources/AWSCloudHSMV2/Models.swift @@ -50,6 +50,35 @@ extension CloudHSMV2ClientTypes { } } +extension CloudHSMV2ClientTypes { + + public enum ClusterMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case fips + case nonFips + case sdkUnknown(Swift.String) + + public static var allCases: [ClusterMode] { + return [ + .fips, + .nonFips + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .fips: return "FIPS" + case .nonFips: return "NON_FIPS" + case let .sdkUnknown(s): return s + } + } + } +} + extension CloudHSMV2ClientTypes { /// Contains a tag. A tag is a key-value pair. public struct Tag { @@ -88,6 +117,10 @@ extension CloudHSMV2ClientTypes { public var createTimestamp: Foundation.Date? /// The date and time when the backup will be permanently deleted. public var deleteTimestamp: Foundation.Date? + /// The HSM type of the cluster that was backed up. + public var hsmType: Swift.String? + /// The mode of the cluster that was backed up. + public var mode: CloudHSMV2ClientTypes.ClusterMode? /// Specifies whether the service should exempt a backup from the retention policy for the cluster. True exempts a backup from the retention policy. False means the service applies the backup retention policy defined at the cluster. public var neverExpires: Swift.Bool? /// The identifier (ID) of the source backup from which the new backup was copied. @@ -106,6 +139,8 @@ extension CloudHSMV2ClientTypes { copyTimestamp: Foundation.Date? = nil, createTimestamp: Foundation.Date? = nil, deleteTimestamp: Foundation.Date? = nil, + hsmType: Swift.String? = nil, + mode: CloudHSMV2ClientTypes.ClusterMode? = nil, neverExpires: Swift.Bool? = nil, sourceBackup: Swift.String? = nil, sourceCluster: Swift.String? = nil, @@ -119,6 +154,8 @@ extension CloudHSMV2ClientTypes { self.copyTimestamp = copyTimestamp self.createTimestamp = createTimestamp self.deleteTimestamp = deleteTimestamp + self.hsmType = hsmType + self.mode = mode self.neverExpires = neverExpires self.sourceBackup = sourceBackup self.sourceCluster = sourceCluster @@ -410,9 +447,11 @@ public struct CopyBackupToRegionOutput { public struct CreateClusterInput { /// A policy that defines how the service retains backups. public var backupRetentionPolicy: CloudHSMV2ClientTypes.BackupRetentionPolicy? - /// The type of HSM to use in the cluster. Currently the only allowed value is hsm1.medium. + /// The type of HSM to use in the cluster. The allowed values are hsm1.medium and hsm2m.medium. /// This member is required. public var hsmType: Swift.String? + /// The mode to use in the cluster. The allowed values are FIPS and NON_FIPS. + public var mode: CloudHSMV2ClientTypes.ClusterMode? /// The identifier (ID) of the cluster backup to restore. Use this value to restore the cluster from a backup instead of creating a new cluster. To find the backup ID, use [DescribeBackups]. public var sourceBackupId: Swift.String? /// The identifiers (IDs) of the subnets where you are creating the cluster. You must specify at least one subnet. If you specify multiple subnets, they must meet the following criteria: @@ -428,6 +467,7 @@ public struct CreateClusterInput { public init( backupRetentionPolicy: CloudHSMV2ClientTypes.BackupRetentionPolicy? = nil, hsmType: Swift.String? = nil, + mode: CloudHSMV2ClientTypes.ClusterMode? = nil, sourceBackupId: Swift.String? = nil, subnetIds: [Swift.String]? = nil, tagList: [CloudHSMV2ClientTypes.Tag]? = nil @@ -435,6 +475,7 @@ public struct CreateClusterInput { { self.backupRetentionPolicy = backupRetentionPolicy self.hsmType = hsmType + self.mode = mode self.sourceBackupId = sourceBackupId self.subnetIds = subnetIds self.tagList = tagList @@ -623,6 +664,8 @@ extension CloudHSMV2ClientTypes { public var hsmType: Swift.String? /// Contains information about the HSMs in the cluster. public var hsms: [CloudHSMV2ClientTypes.Hsm]? + /// The mode of the cluster. + public var mode: CloudHSMV2ClientTypes.ClusterMode? /// The default password for the cluster's Pre-Crypto Officer (PRECO) user. public var preCoPassword: Swift.String? /// The identifier (ID) of the cluster's security group. @@ -648,6 +691,7 @@ extension CloudHSMV2ClientTypes { createTimestamp: Foundation.Date? = nil, hsmType: Swift.String? = nil, hsms: [CloudHSMV2ClientTypes.Hsm]? = nil, + mode: CloudHSMV2ClientTypes.ClusterMode? = nil, preCoPassword: Swift.String? = nil, securityGroup: Swift.String? = nil, sourceBackupId: Swift.String? = nil, @@ -665,6 +709,7 @@ extension CloudHSMV2ClientTypes { self.createTimestamp = createTimestamp self.hsmType = hsmType self.hsms = hsms + self.mode = mode self.preCoPassword = preCoPassword self.securityGroup = securityGroup self.sourceBackupId = sourceBackupId @@ -1216,6 +1261,7 @@ extension CreateClusterInput { guard let value else { return } try writer["BackupRetentionPolicy"].write(value.backupRetentionPolicy, with: CloudHSMV2ClientTypes.BackupRetentionPolicy.write(value:to:)) try writer["HsmType"].write(value.hsmType) + try writer["Mode"].write(value.mode) try writer["SourceBackupId"].write(value.sourceBackupId) try writer["SubnetIds"].writeList(value.subnetIds, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) try writer["TagList"].writeList(value.tagList, memberWritingClosure: CloudHSMV2ClientTypes.Tag.write(value:to:), memberNodeInfo: "member", isFlattened: false) @@ -1906,6 +1952,7 @@ extension CloudHSMV2ClientTypes.Cluster { value.vpcId = try reader["VpcId"].readIfPresent() value.certificates = try reader["Certificates"].readIfPresent(with: CloudHSMV2ClientTypes.Certificates.read(from:)) value.tagList = try reader["TagList"].readListIfPresent(memberReadingClosure: CloudHSMV2ClientTypes.Tag.read(from:), memberNodeInfo: "member", isFlattened: false) + value.mode = try reader["Mode"].readIfPresent() return value } } @@ -1991,6 +2038,8 @@ extension CloudHSMV2ClientTypes.Backup { value.sourceCluster = try reader["SourceCluster"].readIfPresent() value.deleteTimestamp = try reader["DeleteTimestamp"].readTimestampIfPresent(format: .epochSeconds) value.tagList = try reader["TagList"].readListIfPresent(memberReadingClosure: CloudHSMV2ClientTypes.Tag.read(from:), memberNodeInfo: "member", isFlattened: false) + value.hsmType = try reader["HsmType"].readIfPresent() + value.mode = try reader["Mode"].readIfPresent() return value } } diff --git a/Sources/Services/AWSCodeBuild/Sources/AWSCodeBuild/Models.swift b/Sources/Services/AWSCodeBuild/Sources/AWSCodeBuild/Models.swift index 98187718186..a90bd856977 100644 --- a/Sources/Services/AWSCodeBuild/Sources/AWSCodeBuild/Models.swift +++ b/Sources/Services/AWSCodeBuild/Sources/AWSCodeBuild/Models.swift @@ -2928,6 +2928,13 @@ extension CodeBuildClientTypes { /// /// /// + /// * REPOSITORY_NAME + /// + /// * A webhook triggers a build when the repository name matches the regular expression pattern. Works with GitHub global or organization webhooks only. + /// + /// + /// + /// /// * WORKFLOW_NAME /// /// * A webhook triggers a build when the workflow name matches the regular expression pattern. Works with WORKFLOW_JOB_QUEUED events only. @@ -2948,6 +2955,61 @@ extension CodeBuildClientTypes { } +extension CodeBuildClientTypes { + + public enum WebhookScopeType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case githubGlobal + case githubOrganization + case sdkUnknown(Swift.String) + + public static var allCases: [WebhookScopeType] { + return [ + .githubGlobal, + .githubOrganization + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .githubGlobal: return "GITHUB_GLOBAL" + case .githubOrganization: return "GITHUB_ORGANIZATION" + case let .sdkUnknown(s): return s + } + } + } +} + +extension CodeBuildClientTypes { + /// Contains configuration information about the scope for a webhook. + public struct ScopeConfiguration { + /// The domain of the GitHub Enterprise organization. Note that this parameter is only required if your project's source type is GITHUB_ENTERPRISE + public var domain: Swift.String? + /// The name of either the enterprise or organization that will send webhook events to CodeBuild, depending on if the webhook is a global or organization webhook respectively. + /// This member is required. + public var name: Swift.String? + /// The type of scope for a GitHub webhook. + /// This member is required. + public var scope: CodeBuildClientTypes.WebhookScopeType? + + public init( + domain: Swift.String? = nil, + name: Swift.String? = nil, + scope: CodeBuildClientTypes.WebhookScopeType? = nil + ) + { + self.domain = domain + self.name = name + self.scope = scope + } + } + +} + extension CodeBuildClientTypes { /// Information about a webhook that connects repository events to a build project in CodeBuild. public struct Webhook { @@ -2963,6 +3025,8 @@ extension CodeBuildClientTypes { public var manualCreation: Swift.Bool? /// The CodeBuild endpoint where webhook events are sent. public var payloadUrl: Swift.String? + /// The scope configuration for global or organization webhooks. Global or organization webhooks are only available for GitHub and Github Enterprise webhooks. + public var scopeConfiguration: CodeBuildClientTypes.ScopeConfiguration? /// The secret token of the associated repository. A Bitbucket webhook does not support secret. public var secret: Swift.String? /// The URL to the webhook. @@ -2975,6 +3039,7 @@ extension CodeBuildClientTypes { lastModifiedSecret: Foundation.Date? = nil, manualCreation: Swift.Bool? = nil, payloadUrl: Swift.String? = nil, + scopeConfiguration: CodeBuildClientTypes.ScopeConfiguration? = nil, secret: Swift.String? = nil, url: Swift.String? = nil ) @@ -2985,6 +3050,7 @@ extension CodeBuildClientTypes { self.lastModifiedSecret = lastModifiedSecret self.manualCreation = manualCreation self.payloadUrl = payloadUrl + self.scopeConfiguration = scopeConfiguration self.secret = secret self.url = url } @@ -3981,13 +4047,16 @@ public struct CreateWebhookInput { /// The name of the CodeBuild project. /// This member is required. public var projectName: Swift.String? + /// The scope configuration for global or organization webhooks. Global or organization webhooks are only available for GitHub and Github Enterprise webhooks. + public var scopeConfiguration: CodeBuildClientTypes.ScopeConfiguration? public init( branchFilter: Swift.String? = nil, buildType: CodeBuildClientTypes.WebhookBuildType? = nil, filterGroups: [[CodeBuildClientTypes.WebhookFilter]]? = nil, manualCreation: Swift.Bool? = nil, - projectName: Swift.String? = nil + projectName: Swift.String? = nil, + scopeConfiguration: CodeBuildClientTypes.ScopeConfiguration? = nil ) { self.branchFilter = branchFilter @@ -3995,6 +4064,7 @@ public struct CreateWebhookInput { self.filterGroups = filterGroups self.manualCreation = manualCreation self.projectName = projectName + self.scopeConfiguration = scopeConfiguration } } @@ -6866,6 +6936,7 @@ extension CreateWebhookInput { try writer["filterGroups"].writeList(value.filterGroups, memberWritingClosure: SmithyReadWrite.listWritingClosure(memberWritingClosure: CodeBuildClientTypes.WebhookFilter.write(value:to:), memberNodeInfo: "member", isFlattened: false), memberNodeInfo: "member", isFlattened: false) try writer["manualCreation"].write(value.manualCreation) try writer["projectName"].write(value.projectName) + try writer["scopeConfiguration"].write(value.scopeConfiguration, with: CodeBuildClientTypes.ScopeConfiguration.write(value:to:)) } } @@ -9440,6 +9511,26 @@ extension CodeBuildClientTypes.Webhook { value.buildType = try reader["buildType"].readIfPresent() value.manualCreation = try reader["manualCreation"].readIfPresent() value.lastModifiedSecret = try reader["lastModifiedSecret"].readTimestampIfPresent(format: .epochSeconds) + value.scopeConfiguration = try reader["scopeConfiguration"].readIfPresent(with: CodeBuildClientTypes.ScopeConfiguration.read(from:)) + return value + } +} + +extension CodeBuildClientTypes.ScopeConfiguration { + + static func write(value: CodeBuildClientTypes.ScopeConfiguration?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["domain"].write(value.domain) + try writer["name"].write(value.name) + try writer["scope"].write(value.scope) + } + + static func read(from reader: SmithyJSON.Reader) throws -> CodeBuildClientTypes.ScopeConfiguration { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = CodeBuildClientTypes.ScopeConfiguration() + value.name = try reader["name"].readIfPresent() + value.domain = try reader["domain"].readIfPresent() + value.scope = try reader["scope"].readIfPresent() return value } } diff --git a/Sources/Services/AWSCodePipeline/Sources/AWSCodePipeline/CodePipelineClient.swift b/Sources/Services/AWSCodePipeline/Sources/AWSCodePipeline/CodePipelineClient.swift index 7ad11a45f58..bcf80f34d37 100644 --- a/Sources/Services/AWSCodePipeline/Sources/AWSCodePipeline/CodePipelineClient.swift +++ b/Sources/Services/AWSCodePipeline/Sources/AWSCodePipeline/CodePipelineClient.swift @@ -1081,7 +1081,7 @@ extension CodePipelineClient { /// Performs the `ListPipelineExecutions` operation on the `CodePipeline_20150709` service. /// - /// Gets a summary of the most recent executions for a pipeline. + /// Gets a summary of the most recent executions for a pipeline. When applying the filter for pipeline executions that have succeeded in the stage, the operation returns all executions in the current pipeline version beginning on February 1, 2024. /// /// - Parameter ListPipelineExecutionsInput : Represents the input of a ListPipelineExecutions action. /// diff --git a/Sources/Services/AWSCodePipeline/Sources/AWSCodePipeline/Models.swift b/Sources/Services/AWSCodePipeline/Sources/AWSCodePipeline/Models.swift index 4c6d9e65b0f..f86243e5859 100644 --- a/Sources/Services/AWSCodePipeline/Sources/AWSCodePipeline/Models.swift +++ b/Sources/Services/AWSCodePipeline/Sources/AWSCodePipeline/Models.swift @@ -3775,7 +3775,7 @@ public struct InvalidNextTokenException: ClientRuntime.ModeledError, AWSClientRu public struct ListActionExecutionsInput { /// Input information used to filter action execution history. public var filter: CodePipelineClientTypes.ActionExecutionFilter? - /// The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned nextToken value. Action execution history is retained for up to 12 months, based on action execution start times. Default value is 100. Detailed execution history is available for executions run on or after February 21, 2019. + /// The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned nextToken value. Action execution history is retained for up to 12 months, based on action execution start times. Default value is 100. public var maxResults: Swift.Int? /// The token that was returned from the previous ListActionExecutions call, which can be used to return the next set of action executions in the list. public var nextToken: Swift.String? @@ -5258,6 +5258,7 @@ extension CodePipelineClientTypes { public enum SourceRevisionType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { case commitId case imageDigest + case s3ObjectKey case s3ObjectVersionId case sdkUnknown(Swift.String) @@ -5265,6 +5266,7 @@ extension CodePipelineClientTypes { return [ .commitId, .imageDigest, + .s3ObjectKey, .s3ObjectVersionId ] } @@ -5278,6 +5280,7 @@ extension CodePipelineClientTypes { switch self { case .commitId: return "COMMIT_ID" case .imageDigest: return "IMAGE_DIGEST" + case .s3ObjectKey: return "S3_OBJECT_KEY" case .s3ObjectVersionId: return "S3_OBJECT_VERSION_ID" case let .sdkUnknown(s): return s } @@ -5286,7 +5289,7 @@ extension CodePipelineClientTypes { } extension CodePipelineClientTypes { - /// A list that allows you to specify, or override, the source revision for a pipeline execution that's being started. A source revision is the version with all the changes to your application code, or source artifact, for the pipeline execution. + /// A list that allows you to specify, or override, the source revision for a pipeline execution that's being started. A source revision is the version with all the changes to your application code, or source artifact, for the pipeline execution. For the S3_OBJECT_VERSION_ID and S3_OBJECT_KEY types of source revisions, either of the types can be used independently, or they can be used together to override the source with a specific ObjectKey and VersionID. public struct SourceRevisionOverride { /// The name of the action where the override will be applied. /// This member is required. diff --git a/Sources/Services/AWSDataZone/Sources/AWSDataZone/DataZoneClient.swift b/Sources/Services/AWSDataZone/Sources/AWSDataZone/DataZoneClient.swift index 0b406a185c5..8ea56b2b1a1 100644 --- a/Sources/Services/AWSDataZone/Sources/AWSDataZone/DataZoneClient.swift +++ b/Sources/Services/AWSDataZone/Sources/AWSDataZone/DataZoneClient.swift @@ -267,6 +267,57 @@ extension DataZoneClient { return result } + /// Performs the `AssociateEnvironmentRole` operation on the `DataZone` service. + /// + /// Associates the environment role in Amazon DataZone. + /// + /// - Parameter AssociateEnvironmentRoleInput : [no documentation found] + /// + /// - Returns: `AssociateEnvironmentRoleOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You do not have sufficient access to perform this action. + /// - `ConflictException` : There is a conflict while performing this action. + /// - `InternalServerException` : The request has failed because of an unknown error, exception or failure. + /// - `ResourceNotFoundException` : The specified resource cannot be found. + /// - `ThrottlingException` : The request was denied due to request throttling. + /// - `UnauthorizedException` : You do not have permission to perform this action. + /// - `ValidationException` : The input fails to satisfy the constraints specified by the Amazon Web Services service. + public func associateEnvironmentRole(input: AssociateEnvironmentRoleInput) async throws -> AssociateEnvironmentRoleOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .put) + .withServiceName(value: serviceName) + .withOperation(value: "associateEnvironmentRole") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "datazone") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "associateEnvironmentRole") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(AssociateEnvironmentRoleInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(AssociateEnvironmentRoleOutput.httpOutput(from:), AssociateEnvironmentRoleOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `CancelMetadataGenerationRun` operation on the `DataZone` service. /// /// Cancels the metadata generation run. @@ -700,6 +751,60 @@ extension DataZoneClient { return result } + /// Performs the `CreateEnvironmentAction` operation on the `DataZone` service. + /// + /// Creates an action for the environment, for example, creates a console link for an analytics tool that is available in this environment. + /// + /// - Parameter CreateEnvironmentActionInput : [no documentation found] + /// + /// - Returns: `CreateEnvironmentActionOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You do not have sufficient access to perform this action. + /// - `ConflictException` : There is a conflict while performing this action. + /// - `InternalServerException` : The request has failed because of an unknown error, exception or failure. + /// - `ResourceNotFoundException` : The specified resource cannot be found. + /// - `ThrottlingException` : The request was denied due to request throttling. + /// - `UnauthorizedException` : You do not have permission to perform this action. + /// - `ValidationException` : The input fails to satisfy the constraints specified by the Amazon Web Services service. + public func createEnvironmentAction(input: CreateEnvironmentActionInput) async throws -> CreateEnvironmentActionOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createEnvironmentAction") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "datazone") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "createEnvironmentAction") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(CreateEnvironmentActionInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: CreateEnvironmentActionInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(CreateEnvironmentActionOutput.httpOutput(from:), CreateEnvironmentActionOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `CreateEnvironmentProfile` operation on the `DataZone` service. /// /// Creates an Amazon DataZone environment profile. @@ -1615,6 +1720,57 @@ extension DataZoneClient { return result } + /// Performs the `DeleteEnvironmentAction` operation on the `DataZone` service. + /// + /// Deletes an action for the environment, for example, deletes a console link for an analytics tool that is available in this environment. + /// + /// - Parameter DeleteEnvironmentActionInput : [no documentation found] + /// + /// - Returns: `DeleteEnvironmentActionOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You do not have sufficient access to perform this action. + /// - `ConflictException` : There is a conflict while performing this action. + /// - `InternalServerException` : The request has failed because of an unknown error, exception or failure. + /// - `ResourceNotFoundException` : The specified resource cannot be found. + /// - `ThrottlingException` : The request was denied due to request throttling. + /// - `UnauthorizedException` : You do not have permission to perform this action. + /// - `ValidationException` : The input fails to satisfy the constraints specified by the Amazon Web Services service. + public func deleteEnvironmentAction(input: DeleteEnvironmentActionInput) async throws -> DeleteEnvironmentActionOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteEnvironmentAction") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "datazone") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteEnvironmentAction") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(DeleteEnvironmentActionInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(DeleteEnvironmentActionOutput.httpOutput(from:), DeleteEnvironmentActionOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `DeleteEnvironmentBlueprintConfiguration` operation on the `DataZone` service. /// /// Deletes the blueprint configuration in Amazon DataZone. @@ -2228,6 +2384,57 @@ extension DataZoneClient { return result } + /// Performs the `DisassociateEnvironmentRole` operation on the `DataZone` service. + /// + /// Disassociates the environment role in Amazon DataZone. + /// + /// - Parameter DisassociateEnvironmentRoleInput : [no documentation found] + /// + /// - Returns: `DisassociateEnvironmentRoleOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You do not have sufficient access to perform this action. + /// - `ConflictException` : There is a conflict while performing this action. + /// - `InternalServerException` : The request has failed because of an unknown error, exception or failure. + /// - `ResourceNotFoundException` : The specified resource cannot be found. + /// - `ThrottlingException` : The request was denied due to request throttling. + /// - `UnauthorizedException` : You do not have permission to perform this action. + /// - `ValidationException` : The input fails to satisfy the constraints specified by the Amazon Web Services service. + public func disassociateEnvironmentRole(input: DisassociateEnvironmentRoleInput) async throws -> DisassociateEnvironmentRoleOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "disassociateEnvironmentRole") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "datazone") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "disassociateEnvironmentRole") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(DisassociateEnvironmentRoleInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(DisassociateEnvironmentRoleOutput.httpOutput(from:), DisassociateEnvironmentRoleOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `GetAsset` operation on the `DataZone` service. /// /// Gets an Amazon DataZone asset. @@ -2535,6 +2742,56 @@ extension DataZoneClient { return result } + /// Performs the `GetEnvironmentAction` operation on the `DataZone` service. + /// + /// Gets the specified environment action. + /// + /// - Parameter GetEnvironmentActionInput : [no documentation found] + /// + /// - Returns: `GetEnvironmentActionOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You do not have sufficient access to perform this action. + /// - `InternalServerException` : The request has failed because of an unknown error, exception or failure. + /// - `ResourceNotFoundException` : The specified resource cannot be found. + /// - `ThrottlingException` : The request was denied due to request throttling. + /// - `UnauthorizedException` : You do not have permission to perform this action. + /// - `ValidationException` : The input fails to satisfy the constraints specified by the Amazon Web Services service. + public func getEnvironmentAction(input: GetEnvironmentActionInput) async throws -> GetEnvironmentActionOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getEnvironmentAction") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "datazone") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getEnvironmentAction") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GetEnvironmentActionInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GetEnvironmentActionOutput.httpOutput(from:), GetEnvironmentActionOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `GetEnvironmentBlueprint` operation on the `DataZone` service. /// /// Gets an Amazon DataZone blueprint. @@ -3653,6 +3910,56 @@ extension DataZoneClient { return result } + /// Performs the `ListEnvironmentActions` operation on the `DataZone` service. + /// + /// Lists existing environment actions. + /// + /// - Parameter ListEnvironmentActionsInput : [no documentation found] + /// + /// - Returns: `ListEnvironmentActionsOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You do not have sufficient access to perform this action. + /// - `InternalServerException` : The request has failed because of an unknown error, exception or failure. + /// - `ThrottlingException` : The request was denied due to request throttling. + /// - `UnauthorizedException` : You do not have permission to perform this action. + /// - `ValidationException` : The input fails to satisfy the constraints specified by the Amazon Web Services service. + public func listEnvironmentActions(input: ListEnvironmentActionsInput) async throws -> ListEnvironmentActionsOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listEnvironmentActions") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "datazone") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listEnvironmentActions") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListEnvironmentActionsInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListEnvironmentActionsInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListEnvironmentActionsOutput.httpOutput(from:), ListEnvironmentActionsOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `ListEnvironmentBlueprintConfigurations` operation on the `DataZone` service. /// /// Lists blueprint configurations for a Amazon DataZone environment. @@ -5280,6 +5587,60 @@ extension DataZoneClient { return result } + /// Performs the `UpdateEnvironmentAction` operation on the `DataZone` service. + /// + /// Updates an environment action. + /// + /// - Parameter UpdateEnvironmentActionInput : [no documentation found] + /// + /// - Returns: `UpdateEnvironmentActionOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You do not have sufficient access to perform this action. + /// - `ConflictException` : There is a conflict while performing this action. + /// - `InternalServerException` : The request has failed because of an unknown error, exception or failure. + /// - `ResourceNotFoundException` : The specified resource cannot be found. + /// - `ThrottlingException` : The request was denied due to request throttling. + /// - `UnauthorizedException` : You do not have permission to perform this action. + /// - `ValidationException` : The input fails to satisfy the constraints specified by the Amazon Web Services service. + public func updateEnvironmentAction(input: UpdateEnvironmentActionInput) async throws -> UpdateEnvironmentActionOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .patch) + .withServiceName(value: serviceName) + .withOperation(value: "updateEnvironmentAction") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "datazone") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "updateEnvironmentAction") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(UpdateEnvironmentActionInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: UpdateEnvironmentActionInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(UpdateEnvironmentActionOutput.httpOutput(from:), UpdateEnvironmentActionOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `UpdateEnvironmentProfile` operation on the `DataZone` service. /// /// Updates the specified environment profile in Amazon DataZone. diff --git a/Sources/Services/AWSDataZone/Sources/AWSDataZone/Models.swift b/Sources/Services/AWSDataZone/Sources/AWSDataZone/Models.swift index 436523f2883..cd64fc1ef1a 100644 --- a/Sources/Services/AWSDataZone/Sources/AWSDataZone/Models.swift +++ b/Sources/Services/AWSDataZone/Sources/AWSDataZone/Models.swift @@ -20,6 +20,11 @@ import struct Smithy.URIQueryItem import struct SmithyReadWrite.WritingClosureBox import struct SmithyTimestamps.TimestampFormatter +public struct DeleteEnvironmentActionOutput { + + public init() { } +} + public struct DeleteEnvironmentOutput { public init() { } @@ -607,6 +612,32 @@ extension AcceptSubscriptionRequestOutput: Swift.CustomDebugStringConvertible { "AcceptSubscriptionRequestOutput(createdAt: \(Swift.String(describing: createdAt)), createdBy: \(Swift.String(describing: createdBy)), domainId: \(Swift.String(describing: domainId)), id: \(Swift.String(describing: id)), reviewerId: \(Swift.String(describing: reviewerId)), status: \(Swift.String(describing: status)), subscribedListings: \(Swift.String(describing: subscribedListings)), subscribedPrincipals: \(Swift.String(describing: subscribedPrincipals)), updatedAt: \(Swift.String(describing: updatedAt)), updatedBy: \(Swift.String(describing: updatedBy)), decisionComment: \"CONTENT_REDACTED\", requestReason: \"CONTENT_REDACTED\")"} } +extension DataZoneClientTypes { + /// The parameters of the console link specified as part of the environment action. + public struct AwsConsoleLinkParameters { + /// The URI of the console link specified as part of the environment action. + public var uri: Swift.String? + + public init( + uri: Swift.String? = nil + ) + { + self.uri = uri + } + } + +} + +extension DataZoneClientTypes { + /// The parameters of the environment action. + public enum ActionParameters { + /// The console link specified as part of the environment action. + case awsconsolelink(DataZoneClientTypes.AwsConsoleLinkParameters) + case sdkUnknown(Swift.String) + } + +} + extension DataZoneClientTypes { public enum ListingStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { @@ -1901,6 +1932,34 @@ extension DataZoneClientTypes.AssetTypeItem: Swift.CustomDebugStringConvertible "AssetTypeItem(createdAt: \(Swift.String(describing: createdAt)), createdBy: \(Swift.String(describing: createdBy)), domainId: \(Swift.String(describing: domainId)), formsOutput: \(Swift.String(describing: formsOutput)), name: \(Swift.String(describing: name)), originDomainId: \(Swift.String(describing: originDomainId)), originProjectId: \(Swift.String(describing: originProjectId)), owningProjectId: \(Swift.String(describing: owningProjectId)), revision: \(Swift.String(describing: revision)), updatedAt: \(Swift.String(describing: updatedAt)), updatedBy: \(Swift.String(describing: updatedBy)), description: \"CONTENT_REDACTED\")"} } +public struct AssociateEnvironmentRoleInput { + /// The ID of the Amazon DataZone domain in which the environment role is associated. + /// This member is required. + public var domainIdentifier: Swift.String? + /// The ID of the Amazon DataZone environment. + /// This member is required. + public var environmentIdentifier: Swift.String? + /// The ARN of the environment role. + /// This member is required. + public var environmentRoleArn: Swift.String? + + public init( + domainIdentifier: Swift.String? = nil, + environmentIdentifier: Swift.String? = nil, + environmentRoleArn: Swift.String? = nil + ) + { + self.domainIdentifier = domainIdentifier + self.environmentIdentifier = environmentIdentifier + self.environmentRoleArn = environmentRoleArn + } +} + +public struct AssociateEnvironmentRoleOutput { + + public init() { } +} + extension DataZoneClientTypes { public enum AuthType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { @@ -3282,6 +3341,12 @@ public struct CreateEnvironmentInput { /// The identifier of the Amazon DataZone domain in which the environment is created. /// This member is required. public var domainIdentifier: Swift.String? + /// The ID of the account in which the environment is being created. + public var environmentAccountIdentifier: Swift.String? + /// The region of the account in which the environment is being created. + public var environmentAccountRegion: Swift.String? + /// The ID of the blueprint with which the environment is being created. + public var environmentBlueprintIdentifier: Swift.String? /// The identifier of the environment profile that is used to create this Amazon DataZone environment. /// This member is required. public var environmentProfileIdentifier: Swift.String? @@ -3299,6 +3364,9 @@ public struct CreateEnvironmentInput { public init( description: Swift.String? = nil, domainIdentifier: Swift.String? = nil, + environmentAccountIdentifier: Swift.String? = nil, + environmentAccountRegion: Swift.String? = nil, + environmentBlueprintIdentifier: Swift.String? = nil, environmentProfileIdentifier: Swift.String? = nil, glossaryTerms: [Swift.String]? = nil, name: Swift.String? = nil, @@ -3308,6 +3376,9 @@ public struct CreateEnvironmentInput { { self.description = description self.domainIdentifier = domainIdentifier + self.environmentAccountIdentifier = environmentAccountIdentifier + self.environmentAccountRegion = environmentAccountRegion + self.environmentBlueprintIdentifier = environmentBlueprintIdentifier self.environmentProfileIdentifier = environmentProfileIdentifier self.glossaryTerms = glossaryTerms self.name = name @@ -3627,7 +3698,6 @@ public struct CreateEnvironmentOutput { /// The ID of the blueprint with which this Amazon DataZone environment was created. public var environmentBlueprintId: Swift.String? /// The ID of the environment profile with which this Amazon DataZone environment was created. - /// This member is required. public var environmentProfileId: Swift.String? /// The glossary terms that can be used in this Amazon DataZone environment. public var glossaryTerms: [Swift.String]? @@ -3708,6 +3778,75 @@ extension CreateEnvironmentOutput: Swift.CustomDebugStringConvertible { "CreateEnvironmentOutput(awsAccountId: \(Swift.String(describing: awsAccountId)), awsAccountRegion: \(Swift.String(describing: awsAccountRegion)), createdAt: \(Swift.String(describing: createdAt)), createdBy: \(Swift.String(describing: createdBy)), deploymentProperties: \(Swift.String(describing: deploymentProperties)), domainId: \(Swift.String(describing: domainId)), environmentActions: \(Swift.String(describing: environmentActions)), environmentBlueprintId: \(Swift.String(describing: environmentBlueprintId)), environmentProfileId: \(Swift.String(describing: environmentProfileId)), glossaryTerms: \(Swift.String(describing: glossaryTerms)), id: \(Swift.String(describing: id)), lastDeployment: \(Swift.String(describing: lastDeployment)), projectId: \(Swift.String(describing: projectId)), provider: \(Swift.String(describing: provider)), provisionedResources: \(Swift.String(describing: provisionedResources)), provisioningProperties: \(Swift.String(describing: provisioningProperties)), status: \(Swift.String(describing: status)), updatedAt: \(Swift.String(describing: updatedAt)), userParameters: \(Swift.String(describing: userParameters)), description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\")"} } +public struct CreateEnvironmentActionInput { + /// The description of the environment action that is being created in the environment. + public var description: Swift.String? + /// The ID of the Amazon DataZone domain in which the environment action is created. + /// This member is required. + public var domainIdentifier: Swift.String? + /// The ID of the environment in which the environment action is created. + /// This member is required. + public var environmentIdentifier: Swift.String? + /// The name of the environment action. + /// This member is required. + public var name: Swift.String? + /// The parameters of the environment action. + /// This member is required. + public var parameters: DataZoneClientTypes.ActionParameters? + + public init( + description: Swift.String? = nil, + domainIdentifier: Swift.String? = nil, + environmentIdentifier: Swift.String? = nil, + name: Swift.String? = nil, + parameters: DataZoneClientTypes.ActionParameters? = nil + ) + { + self.description = description + self.domainIdentifier = domainIdentifier + self.environmentIdentifier = environmentIdentifier + self.name = name + self.parameters = parameters + } +} + +public struct CreateEnvironmentActionOutput { + /// The description of the environment action. + public var description: Swift.String? + /// The ID of the domain in which the environment action is created. + /// This member is required. + public var domainId: Swift.String? + /// The ID of the environment in which the environment is created. + /// This member is required. + public var environmentId: Swift.String? + /// The ID of the environment action. + /// This member is required. + public var id: Swift.String? + /// The name of the environment action. + /// This member is required. + public var name: Swift.String? + /// The parameters of the environment action. + /// This member is required. + public var parameters: DataZoneClientTypes.ActionParameters? + + public init( + description: Swift.String? = nil, + domainId: Swift.String? = nil, + environmentId: Swift.String? = nil, + id: Swift.String? = nil, + name: Swift.String? = nil, + parameters: DataZoneClientTypes.ActionParameters? = nil + ) + { + self.description = description + self.domainId = domainId + self.environmentId = environmentId + self.id = id + self.name = name + self.parameters = parameters + } +} + public struct CreateEnvironmentProfileInput { /// The Amazon Web Services account in which the Amazon DataZone environment is created. public var awsAccountId: Swift.String? @@ -5560,17 +5699,141 @@ public struct DeleteDataSourceInput { /// The identifier of the data source that is deleted. /// This member is required. public var identifier: Swift.String? + /// Specifies that the granted permissions are retained in case of a self-subscribe functionality failure for a data source. + public var retainPermissionsOnRevokeFailure: Swift.Bool? public init( clientToken: Swift.String? = nil, domainIdentifier: Swift.String? = nil, - identifier: Swift.String? = nil + identifier: Swift.String? = nil, + retainPermissionsOnRevokeFailure: Swift.Bool? = nil ) { self.clientToken = clientToken self.domainIdentifier = domainIdentifier self.identifier = identifier + self.retainPermissionsOnRevokeFailure = retainPermissionsOnRevokeFailure + } +} + +extension DataZoneClientTypes { + + public enum SelfGrantStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case granted + case grantFailed + case grantInProgress + case grantPending + case revokeFailed + case revokeInProgress + case revokePending + case sdkUnknown(Swift.String) + + public static var allCases: [SelfGrantStatus] { + return [ + .granted, + .grantFailed, + .grantInProgress, + .grantPending, + .revokeFailed, + .revokeInProgress, + .revokePending + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .granted: return "GRANTED" + case .grantFailed: return "GRANT_FAILED" + case .grantInProgress: return "GRANT_IN_PROGRESS" + case .grantPending: return "GRANT_PENDING" + case .revokeFailed: return "REVOKE_FAILED" + case .revokeInProgress: return "REVOKE_IN_PROGRESS" + case .revokePending: return "REVOKE_PENDING" + case let .sdkUnknown(s): return s + } + } + } +} + +extension DataZoneClientTypes { + /// The details for the self granting status. + public struct SelfGrantStatusDetail { + /// The name of the database used for the data source. + /// This member is required. + public var databaseName: Swift.String? + /// The reason for why the operation failed. + public var failureCause: Swift.String? + /// The name of the schema used in the data source. + public var schemaName: Swift.String? + /// The self granting status of the data source. + /// This member is required. + public var status: DataZoneClientTypes.SelfGrantStatus? + + public init( + databaseName: Swift.String? = nil, + failureCause: Swift.String? = nil, + schemaName: Swift.String? = nil, + status: DataZoneClientTypes.SelfGrantStatus? = nil + ) + { + self.databaseName = databaseName + self.failureCause = failureCause + self.schemaName = schemaName + self.status = status + } + } + +} + +extension DataZoneClientTypes { + /// The details of the self granting status. + public struct GlueSelfGrantStatusOutput { + /// The details for the self granting status for a Glue data source. + /// This member is required. + public var selfGrantStatusDetails: [DataZoneClientTypes.SelfGrantStatusDetail]? + + public init( + selfGrantStatusDetails: [DataZoneClientTypes.SelfGrantStatusDetail]? = nil + ) + { + self.selfGrantStatusDetails = selfGrantStatusDetails + } + } + +} + +extension DataZoneClientTypes { + /// The details for the self granting status for an Amazon Redshift data source. + public struct RedshiftSelfGrantStatusOutput { + /// The details for the self granting status for an Amazon Redshift data source. + /// This member is required. + public var selfGrantStatusDetails: [DataZoneClientTypes.SelfGrantStatusDetail]? + + public init( + selfGrantStatusDetails: [DataZoneClientTypes.SelfGrantStatusDetail]? = nil + ) + { + self.selfGrantStatusDetails = selfGrantStatusDetails + } + } + +} + +extension DataZoneClientTypes { + /// The details for the self granting status for a data source. + public enum SelfGrantStatusOutput { + /// The details for the self granting status for a Glue data source. + case glueselfgrantstatus(DataZoneClientTypes.GlueSelfGrantStatusOutput) + /// The details for the self granting status for an Amazon Redshift data source. + case redshiftselfgrantstatus(DataZoneClientTypes.RedshiftSelfGrantStatusOutput) + case sdkUnknown(Swift.String) } + } public struct DeleteDataSourceOutput { @@ -5609,8 +5872,12 @@ public struct DeleteDataSourceOutput { public var projectId: Swift.String? /// Specifies whether the assets that this data source creates in the inventory are to be also automatically published to the catalog. public var publishOnImport: Swift.Bool? + /// Specifies that the granted permissions are retained in case of a self-subscribe functionality failure for a data source. + public var retainPermissionsOnRevokeFailure: Swift.Bool? /// The schedule of runs for this data source. public var schedule: DataZoneClientTypes.ScheduleConfiguration? + /// Specifies the status of the self-granting functionality. + public var selfGrantStatus: DataZoneClientTypes.SelfGrantStatusOutput? /// The status of this data source. public var status: DataZoneClientTypes.DataSourceStatus? /// The type of this data source. @@ -5634,7 +5901,9 @@ public struct DeleteDataSourceOutput { name: Swift.String? = nil, projectId: Swift.String? = nil, publishOnImport: Swift.Bool? = nil, + retainPermissionsOnRevokeFailure: Swift.Bool? = nil, schedule: DataZoneClientTypes.ScheduleConfiguration? = nil, + selfGrantStatus: DataZoneClientTypes.SelfGrantStatusOutput? = nil, status: DataZoneClientTypes.DataSourceStatus? = nil, type: Swift.String? = nil, updatedAt: Foundation.Date? = nil @@ -5655,7 +5924,9 @@ public struct DeleteDataSourceOutput { self.name = name self.projectId = projectId self.publishOnImport = publishOnImport + self.retainPermissionsOnRevokeFailure = retainPermissionsOnRevokeFailure self.schedule = schedule + self.selfGrantStatus = selfGrantStatus self.status = status self.type = type self.updatedAt = updatedAt @@ -5664,7 +5935,7 @@ public struct DeleteDataSourceOutput { extension DeleteDataSourceOutput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "DeleteDataSourceOutput(assetFormsOutput: \(Swift.String(describing: assetFormsOutput)), configuration: \(Swift.String(describing: configuration)), createdAt: \(Swift.String(describing: createdAt)), domainId: \(Swift.String(describing: domainId)), enableSetting: \(Swift.String(describing: enableSetting)), environmentId: \(Swift.String(describing: environmentId)), errorMessage: \(Swift.String(describing: errorMessage)), id: \(Swift.String(describing: id)), lastRunAt: \(Swift.String(describing: lastRunAt)), lastRunErrorMessage: \(Swift.String(describing: lastRunErrorMessage)), lastRunStatus: \(Swift.String(describing: lastRunStatus)), projectId: \(Swift.String(describing: projectId)), publishOnImport: \(Swift.String(describing: publishOnImport)), status: \(Swift.String(describing: status)), type: \(Swift.String(describing: type)), updatedAt: \(Swift.String(describing: updatedAt)), description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\", schedule: \"CONTENT_REDACTED\")"} + "DeleteDataSourceOutput(assetFormsOutput: \(Swift.String(describing: assetFormsOutput)), configuration: \(Swift.String(describing: configuration)), createdAt: \(Swift.String(describing: createdAt)), domainId: \(Swift.String(describing: domainId)), enableSetting: \(Swift.String(describing: enableSetting)), environmentId: \(Swift.String(describing: environmentId)), errorMessage: \(Swift.String(describing: errorMessage)), id: \(Swift.String(describing: id)), lastRunAt: \(Swift.String(describing: lastRunAt)), lastRunErrorMessage: \(Swift.String(describing: lastRunErrorMessage)), lastRunStatus: \(Swift.String(describing: lastRunStatus)), projectId: \(Swift.String(describing: projectId)), publishOnImport: \(Swift.String(describing: publishOnImport)), retainPermissionsOnRevokeFailure: \(Swift.String(describing: retainPermissionsOnRevokeFailure)), selfGrantStatus: \(Swift.String(describing: selfGrantStatus)), status: \(Swift.String(describing: status)), type: \(Swift.String(describing: type)), updatedAt: \(Swift.String(describing: updatedAt)), description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\", schedule: \"CONTENT_REDACTED\")"} } public struct GetDataSourceInput { @@ -5727,6 +5998,8 @@ public struct GetDataSourceOutput { public var recommendation: DataZoneClientTypes.RecommendationConfiguration? /// The schedule of the data source runs. public var schedule: DataZoneClientTypes.ScheduleConfiguration? + /// Specifies the status of the self-granting functionality. + public var selfGrantStatus: DataZoneClientTypes.SelfGrantStatusOutput? /// The status of the data source. public var status: DataZoneClientTypes.DataSourceStatus? /// The type of the data source. @@ -5753,6 +6026,7 @@ public struct GetDataSourceOutput { publishOnImport: Swift.Bool? = nil, recommendation: DataZoneClientTypes.RecommendationConfiguration? = nil, schedule: DataZoneClientTypes.ScheduleConfiguration? = nil, + selfGrantStatus: DataZoneClientTypes.SelfGrantStatusOutput? = nil, status: DataZoneClientTypes.DataSourceStatus? = nil, type: Swift.String? = nil, updatedAt: Foundation.Date? = nil @@ -5776,6 +6050,7 @@ public struct GetDataSourceOutput { self.publishOnImport = publishOnImport self.recommendation = recommendation self.schedule = schedule + self.selfGrantStatus = selfGrantStatus self.status = status self.type = type self.updatedAt = updatedAt @@ -5784,7 +6059,7 @@ public struct GetDataSourceOutput { extension GetDataSourceOutput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "GetDataSourceOutput(assetFormsOutput: \(Swift.String(describing: assetFormsOutput)), configuration: \(Swift.String(describing: configuration)), createdAt: \(Swift.String(describing: createdAt)), domainId: \(Swift.String(describing: domainId)), enableSetting: \(Swift.String(describing: enableSetting)), environmentId: \(Swift.String(describing: environmentId)), errorMessage: \(Swift.String(describing: errorMessage)), id: \(Swift.String(describing: id)), lastRunAssetCount: \(Swift.String(describing: lastRunAssetCount)), lastRunAt: \(Swift.String(describing: lastRunAt)), lastRunErrorMessage: \(Swift.String(describing: lastRunErrorMessage)), lastRunStatus: \(Swift.String(describing: lastRunStatus)), projectId: \(Swift.String(describing: projectId)), publishOnImport: \(Swift.String(describing: publishOnImport)), recommendation: \(Swift.String(describing: recommendation)), status: \(Swift.String(describing: status)), type: \(Swift.String(describing: type)), updatedAt: \(Swift.String(describing: updatedAt)), description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\", schedule: \"CONTENT_REDACTED\")"} + "GetDataSourceOutput(assetFormsOutput: \(Swift.String(describing: assetFormsOutput)), configuration: \(Swift.String(describing: configuration)), createdAt: \(Swift.String(describing: createdAt)), domainId: \(Swift.String(describing: domainId)), enableSetting: \(Swift.String(describing: enableSetting)), environmentId: \(Swift.String(describing: environmentId)), errorMessage: \(Swift.String(describing: errorMessage)), id: \(Swift.String(describing: id)), lastRunAssetCount: \(Swift.String(describing: lastRunAssetCount)), lastRunAt: \(Swift.String(describing: lastRunAt)), lastRunErrorMessage: \(Swift.String(describing: lastRunErrorMessage)), lastRunStatus: \(Swift.String(describing: lastRunStatus)), projectId: \(Swift.String(describing: projectId)), publishOnImport: \(Swift.String(describing: publishOnImport)), recommendation: \(Swift.String(describing: recommendation)), selfGrantStatus: \(Swift.String(describing: selfGrantStatus)), status: \(Swift.String(describing: status)), type: \(Swift.String(describing: type)), updatedAt: \(Swift.String(describing: updatedAt)), description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\", schedule: \"CONTENT_REDACTED\")"} } public struct ListDataSourcesInput { @@ -5951,6 +6226,8 @@ public struct UpdateDataSourceInput { public var publishOnImport: Swift.Bool? /// The recommendation to be updated as part of the UpdateDataSource action. public var recommendation: DataZoneClientTypes.RecommendationConfiguration? + /// Specifies that the granted permissions are retained in case of a self-subscribe functionality failure for a data source. + public var retainPermissionsOnRevokeFailure: Swift.Bool? /// The schedule to be updated as part of the UpdateDataSource action. public var schedule: DataZoneClientTypes.ScheduleConfiguration? @@ -5964,6 +6241,7 @@ public struct UpdateDataSourceInput { name: Swift.String? = nil, publishOnImport: Swift.Bool? = nil, recommendation: DataZoneClientTypes.RecommendationConfiguration? = nil, + retainPermissionsOnRevokeFailure: Swift.Bool? = nil, schedule: DataZoneClientTypes.ScheduleConfiguration? = nil ) { @@ -5976,13 +6254,14 @@ public struct UpdateDataSourceInput { self.name = name self.publishOnImport = publishOnImport self.recommendation = recommendation + self.retainPermissionsOnRevokeFailure = retainPermissionsOnRevokeFailure self.schedule = schedule } } extension UpdateDataSourceInput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "UpdateDataSourceInput(configuration: \(Swift.String(describing: configuration)), domainIdentifier: \(Swift.String(describing: domainIdentifier)), enableSetting: \(Swift.String(describing: enableSetting)), identifier: \(Swift.String(describing: identifier)), publishOnImport: \(Swift.String(describing: publishOnImport)), recommendation: \(Swift.String(describing: recommendation)), assetFormsInput: \"CONTENT_REDACTED\", description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\", schedule: \"CONTENT_REDACTED\")"} + "UpdateDataSourceInput(configuration: \(Swift.String(describing: configuration)), domainIdentifier: \(Swift.String(describing: domainIdentifier)), enableSetting: \(Swift.String(describing: enableSetting)), identifier: \(Swift.String(describing: identifier)), publishOnImport: \(Swift.String(describing: publishOnImport)), recommendation: \(Swift.String(describing: recommendation)), retainPermissionsOnRevokeFailure: \(Swift.String(describing: retainPermissionsOnRevokeFailure)), assetFormsInput: \"CONTENT_REDACTED\", description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\", schedule: \"CONTENT_REDACTED\")"} } public struct UpdateDataSourceOutput { @@ -6023,8 +6302,12 @@ public struct UpdateDataSourceOutput { public var publishOnImport: Swift.Bool? /// The recommendation to be updated as part of the UpdateDataSource action. public var recommendation: DataZoneClientTypes.RecommendationConfiguration? + /// Specifies that the granted permissions are retained in case of a self-subscribe functionality failure for a data source. + public var retainPermissionsOnRevokeFailure: Swift.Bool? /// The schedule to be updated as part of the UpdateDataSource action. public var schedule: DataZoneClientTypes.ScheduleConfiguration? + /// Specifies the status of the self-granting functionality. + public var selfGrantStatus: DataZoneClientTypes.SelfGrantStatusOutput? /// The status to be updated as part of the UpdateDataSource action. public var status: DataZoneClientTypes.DataSourceStatus? /// The type to be updated as part of the UpdateDataSource action. @@ -6049,7 +6332,9 @@ public struct UpdateDataSourceOutput { projectId: Swift.String? = nil, publishOnImport: Swift.Bool? = nil, recommendation: DataZoneClientTypes.RecommendationConfiguration? = nil, + retainPermissionsOnRevokeFailure: Swift.Bool? = nil, schedule: DataZoneClientTypes.ScheduleConfiguration? = nil, + selfGrantStatus: DataZoneClientTypes.SelfGrantStatusOutput? = nil, status: DataZoneClientTypes.DataSourceStatus? = nil, type: Swift.String? = nil, updatedAt: Foundation.Date? = nil @@ -6071,7 +6356,9 @@ public struct UpdateDataSourceOutput { self.projectId = projectId self.publishOnImport = publishOnImport self.recommendation = recommendation + self.retainPermissionsOnRevokeFailure = retainPermissionsOnRevokeFailure self.schedule = schedule + self.selfGrantStatus = selfGrantStatus self.status = status self.type = type self.updatedAt = updatedAt @@ -6080,7 +6367,7 @@ public struct UpdateDataSourceOutput { extension UpdateDataSourceOutput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "UpdateDataSourceOutput(assetFormsOutput: \(Swift.String(describing: assetFormsOutput)), configuration: \(Swift.String(describing: configuration)), createdAt: \(Swift.String(describing: createdAt)), domainId: \(Swift.String(describing: domainId)), enableSetting: \(Swift.String(describing: enableSetting)), environmentId: \(Swift.String(describing: environmentId)), errorMessage: \(Swift.String(describing: errorMessage)), id: \(Swift.String(describing: id)), lastRunAt: \(Swift.String(describing: lastRunAt)), lastRunErrorMessage: \(Swift.String(describing: lastRunErrorMessage)), lastRunStatus: \(Swift.String(describing: lastRunStatus)), projectId: \(Swift.String(describing: projectId)), publishOnImport: \(Swift.String(describing: publishOnImport)), recommendation: \(Swift.String(describing: recommendation)), status: \(Swift.String(describing: status)), type: \(Swift.String(describing: type)), updatedAt: \(Swift.String(describing: updatedAt)), description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\", schedule: \"CONTENT_REDACTED\")"} + "UpdateDataSourceOutput(assetFormsOutput: \(Swift.String(describing: assetFormsOutput)), configuration: \(Swift.String(describing: configuration)), createdAt: \(Swift.String(describing: createdAt)), domainId: \(Swift.String(describing: domainId)), enableSetting: \(Swift.String(describing: enableSetting)), environmentId: \(Swift.String(describing: environmentId)), errorMessage: \(Swift.String(describing: errorMessage)), id: \(Swift.String(describing: id)), lastRunAt: \(Swift.String(describing: lastRunAt)), lastRunErrorMessage: \(Swift.String(describing: lastRunErrorMessage)), lastRunStatus: \(Swift.String(describing: lastRunStatus)), projectId: \(Swift.String(describing: projectId)), publishOnImport: \(Swift.String(describing: publishOnImport)), recommendation: \(Swift.String(describing: recommendation)), retainPermissionsOnRevokeFailure: \(Swift.String(describing: retainPermissionsOnRevokeFailure)), selfGrantStatus: \(Swift.String(describing: selfGrantStatus)), status: \(Swift.String(describing: status)), type: \(Swift.String(describing: type)), updatedAt: \(Swift.String(describing: updatedAt)), description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\", schedule: \"CONTENT_REDACTED\")"} } extension DataZoneClientTypes { @@ -6512,6 +6799,29 @@ public struct DeleteEnvironmentInput { } } +public struct DeleteEnvironmentActionInput { + /// The ID of the Amazon DataZone domain in which an environment action is deleted. + /// This member is required. + public var domainIdentifier: Swift.String? + /// The ID of the environment where an environment action is deleted. + /// This member is required. + public var environmentIdentifier: Swift.String? + /// The ID of the environment action that is deleted. + /// This member is required. + public var identifier: Swift.String? + + public init( + domainIdentifier: Swift.String? = nil, + environmentIdentifier: Swift.String? = nil, + identifier: Swift.String? = nil + ) + { + self.domainIdentifier = domainIdentifier + self.environmentIdentifier = environmentIdentifier + self.identifier = identifier + } +} + public struct DeleteEnvironmentProfileInput { /// The ID of the Amazon DataZone domain in which the environment profile is deleted. /// This member is required. @@ -6770,6 +7080,34 @@ public struct DeleteTimeSeriesDataPointsOutput { public init() { } } +public struct DisassociateEnvironmentRoleInput { + /// The ID of the Amazon DataZone domain in which an environment role is disassociated. + /// This member is required. + public var domainIdentifier: Swift.String? + /// The ID of the environment. + /// This member is required. + public var environmentIdentifier: Swift.String? + /// The ARN of the environment role. + /// This member is required. + public var environmentRoleArn: Swift.String? + + public init( + domainIdentifier: Swift.String? = nil, + environmentIdentifier: Swift.String? = nil, + environmentRoleArn: Swift.String? = nil + ) + { + self.domainIdentifier = domainIdentifier + self.environmentIdentifier = environmentIdentifier + self.environmentRoleArn = environmentRoleArn + } +} + +public struct DisassociateEnvironmentRoleOutput { + + public init() { } +} + public struct DeleteDomainInput { /// A unique, case-sensitive identifier that is provided to ensure the idempotency of the request. public var clientToken: Swift.String? @@ -7458,7 +7796,6 @@ public struct GetEnvironmentOutput { /// The blueprint with which the environment is created. public var environmentBlueprintId: Swift.String? /// The ID of the environment profile with which the environment is created. - /// This member is required. public var environmentProfileId: Swift.String? /// The business glossary terms that can be used in this environment. public var glossaryTerms: [Swift.String]? @@ -7539,48 +7876,108 @@ extension GetEnvironmentOutput: Swift.CustomDebugStringConvertible { "GetEnvironmentOutput(awsAccountId: \(Swift.String(describing: awsAccountId)), awsAccountRegion: \(Swift.String(describing: awsAccountRegion)), createdAt: \(Swift.String(describing: createdAt)), createdBy: \(Swift.String(describing: createdBy)), deploymentProperties: \(Swift.String(describing: deploymentProperties)), domainId: \(Swift.String(describing: domainId)), environmentActions: \(Swift.String(describing: environmentActions)), environmentBlueprintId: \(Swift.String(describing: environmentBlueprintId)), environmentProfileId: \(Swift.String(describing: environmentProfileId)), glossaryTerms: \(Swift.String(describing: glossaryTerms)), id: \(Swift.String(describing: id)), lastDeployment: \(Swift.String(describing: lastDeployment)), projectId: \(Swift.String(describing: projectId)), provider: \(Swift.String(describing: provider)), provisionedResources: \(Swift.String(describing: provisionedResources)), provisioningProperties: \(Swift.String(describing: provisioningProperties)), status: \(Swift.String(describing: status)), updatedAt: \(Swift.String(describing: updatedAt)), userParameters: \(Swift.String(describing: userParameters)), description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\")"} } -public struct GetEnvironmentBlueprintInput { - /// The identifier of the domain in which this blueprint exists. +public struct GetEnvironmentActionInput { + /// The ID of the Amazon DataZone domain in which the GetEnvironmentAction API is invoked. /// This member is required. public var domainIdentifier: Swift.String? - /// The ID of this Amazon DataZone blueprint. + /// The environment ID of the environment action. + /// This member is required. + public var environmentIdentifier: Swift.String? + /// The ID of the environment action /// This member is required. public var identifier: Swift.String? public init( domainIdentifier: Swift.String? = nil, + environmentIdentifier: Swift.String? = nil, identifier: Swift.String? = nil ) { self.domainIdentifier = domainIdentifier + self.environmentIdentifier = environmentIdentifier self.identifier = identifier } } -public struct GetEnvironmentBlueprintOutput { - /// A timestamp of when this blueprint was created. - public var createdAt: Foundation.Date? - /// The deployment properties of this Amazon DataZone blueprint. - public var deploymentProperties: DataZoneClientTypes.DeploymentProperties? - /// The description of this Amazon DataZone blueprint. +public struct GetEnvironmentActionOutput { + /// The description of the environment action. public var description: Swift.String? - /// The glossary terms attached to this Amazon DataZone blueprint. - public var glossaryTerms: [Swift.String]? - /// The ID of this Amazon DataZone blueprint. + /// The ID of the Amazon DataZone domain in which the environment action lives. + /// This member is required. + public var domainId: Swift.String? + /// The environment ID of the environment action. + /// This member is required. + public var environmentId: Swift.String? + /// The ID of the environment action. /// This member is required. public var id: Swift.String? - /// The name of this Amazon DataZone blueprint. + /// The name of the environment action. /// This member is required. public var name: Swift.String? - /// The provider of this Amazon DataZone blueprint. - /// This member is required. - public var provider: Swift.String? - /// The provisioning properties of this Amazon DataZone blueprint. + /// The parameters of the environment action. /// This member is required. - public var provisioningProperties: DataZoneClientTypes.ProvisioningProperties? - /// The timestamp of when this blueprint was updated. - public var updatedAt: Foundation.Date? - /// The user parameters of this blueprint. + public var parameters: DataZoneClientTypes.ActionParameters? + + public init( + description: Swift.String? = nil, + domainId: Swift.String? = nil, + environmentId: Swift.String? = nil, + id: Swift.String? = nil, + name: Swift.String? = nil, + parameters: DataZoneClientTypes.ActionParameters? = nil + ) + { + self.description = description + self.domainId = domainId + self.environmentId = environmentId + self.id = id + self.name = name + self.parameters = parameters + } +} + +public struct GetEnvironmentBlueprintInput { + /// The identifier of the domain in which this blueprint exists. + /// This member is required. + public var domainIdentifier: Swift.String? + /// The ID of this Amazon DataZone blueprint. + /// This member is required. + public var identifier: Swift.String? + + public init( + domainIdentifier: Swift.String? = nil, + identifier: Swift.String? = nil + ) + { + self.domainIdentifier = domainIdentifier + self.identifier = identifier + } +} + +public struct GetEnvironmentBlueprintOutput { + /// A timestamp of when this blueprint was created. + public var createdAt: Foundation.Date? + /// The deployment properties of this Amazon DataZone blueprint. + public var deploymentProperties: DataZoneClientTypes.DeploymentProperties? + /// The description of this Amazon DataZone blueprint. + public var description: Swift.String? + /// The glossary terms attached to this Amazon DataZone blueprint. + public var glossaryTerms: [Swift.String]? + /// The ID of this Amazon DataZone blueprint. + /// This member is required. + public var id: Swift.String? + /// The name of this Amazon DataZone blueprint. + /// This member is required. + public var name: Swift.String? + /// The provider of this Amazon DataZone blueprint. + /// This member is required. + public var provider: Swift.String? + /// The provisioning properties of this Amazon DataZone blueprint. + /// This member is required. + public var provisioningProperties: DataZoneClientTypes.ProvisioningProperties? + /// The timestamp of when this blueprint was updated. + public var updatedAt: Foundation.Date? + /// The user parameters of this blueprint. public var userParameters: [DataZoneClientTypes.CustomParameter]? public init( @@ -8825,6 +9222,89 @@ public struct ListDataSourceRunActivitiesOutput { } } +public struct ListEnvironmentActionsInput { + /// The ID of the Amazon DataZone domain in which the environment actions are listed. + /// This member is required. + public var domainIdentifier: Swift.String? + /// The ID of the envrironment whose environment actions are listed. + /// This member is required. + public var environmentIdentifier: Swift.String? + /// The maximum number of environment actions to return in a single call to ListEnvironmentActions. When the number of environment actions to be listed is greater than the value of MaxResults, the response contains a NextToken value that you can use in a subsequent call to ListEnvironmentActions to list the next set of environment actions. + public var maxResults: Swift.Int? + /// When the number of environment actions is greater than the default value for the MaxResults parameter, or if you explicitly specify a value for MaxResults that is less than the number of environment actions, the response includes a pagination token named NextToken. You can specify this NextToken value in a subsequent call to ListEnvironmentActions to list the next set of environment actions. + public var nextToken: Swift.String? + + public init( + domainIdentifier: Swift.String? = nil, + environmentIdentifier: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.domainIdentifier = domainIdentifier + self.environmentIdentifier = environmentIdentifier + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +extension DataZoneClientTypes { + /// The details about the specified action configured for an environment. For example, the details of the specified console links for an analytics tool that is available in this environment. + public struct EnvironmentActionSummary { + /// The environment action description. + public var description: Swift.String? + /// The Amazon DataZone domain ID of the environment action. + /// This member is required. + public var domainId: Swift.String? + /// The environment ID of the environment action. + /// This member is required. + public var environmentId: Swift.String? + /// The ID of the environment action. + /// This member is required. + public var id: Swift.String? + /// The name of the environment action. + /// This member is required. + public var name: Swift.String? + /// The parameters of the environment action. + /// This member is required. + public var parameters: DataZoneClientTypes.ActionParameters? + + public init( + description: Swift.String? = nil, + domainId: Swift.String? = nil, + environmentId: Swift.String? = nil, + id: Swift.String? = nil, + name: Swift.String? = nil, + parameters: DataZoneClientTypes.ActionParameters? = nil + ) + { + self.description = description + self.domainId = domainId + self.environmentId = environmentId + self.id = id + self.name = name + self.parameters = parameters + } + } + +} + +public struct ListEnvironmentActionsOutput { + /// The results of ListEnvironmentActions. + public var items: [DataZoneClientTypes.EnvironmentActionSummary]? + /// When the number of environment actions is greater than the default value for the MaxResults parameter, or if you explicitly specify a value for MaxResults that is less than the number of environment actions, the response includes a pagination token named NextToken. You can specify this NextToken value in a subsequent call to ListEnvironmentActions to list the next set of environment actions. + public var nextToken: Swift.String? + + public init( + items: [DataZoneClientTypes.EnvironmentActionSummary]? = nil, + nextToken: Swift.String? = nil + ) + { + self.items = items + self.nextToken = nextToken + } +} + public struct ListEnvironmentBlueprintsInput { /// The identifier of the Amazon DataZone domain. /// This member is required. @@ -9121,7 +9601,6 @@ extension DataZoneClientTypes { /// This member is required. public var domainId: Swift.String? /// The identifier of the environment profile with which the environment was created. - /// This member is required. public var environmentProfileId: Swift.String? /// The identifier of the environment. public var id: Swift.String? @@ -12083,7 +12562,6 @@ public struct UpdateEnvironmentOutput { /// The blueprint identifier of the environment. public var environmentBlueprintId: Swift.String? /// The profile identifier of the environment. - /// This member is required. public var environmentProfileId: Swift.String? /// The glossary terms to be updated as part of the UpdateEnvironment action. public var glossaryTerms: [Swift.String]? @@ -12164,6 +12642,78 @@ extension UpdateEnvironmentOutput: Swift.CustomDebugStringConvertible { "UpdateEnvironmentOutput(awsAccountId: \(Swift.String(describing: awsAccountId)), awsAccountRegion: \(Swift.String(describing: awsAccountRegion)), createdAt: \(Swift.String(describing: createdAt)), createdBy: \(Swift.String(describing: createdBy)), deploymentProperties: \(Swift.String(describing: deploymentProperties)), domainId: \(Swift.String(describing: domainId)), environmentActions: \(Swift.String(describing: environmentActions)), environmentBlueprintId: \(Swift.String(describing: environmentBlueprintId)), environmentProfileId: \(Swift.String(describing: environmentProfileId)), glossaryTerms: \(Swift.String(describing: glossaryTerms)), id: \(Swift.String(describing: id)), lastDeployment: \(Swift.String(describing: lastDeployment)), projectId: \(Swift.String(describing: projectId)), provider: \(Swift.String(describing: provider)), provisionedResources: \(Swift.String(describing: provisionedResources)), provisioningProperties: \(Swift.String(describing: provisioningProperties)), status: \(Swift.String(describing: status)), updatedAt: \(Swift.String(describing: updatedAt)), userParameters: \(Swift.String(describing: userParameters)), description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\")"} } +public struct UpdateEnvironmentActionInput { + /// The description of the environment action. + public var description: Swift.String? + /// The domain ID of the environment action. + /// This member is required. + public var domainIdentifier: Swift.String? + /// The environment ID of the environment action. + /// This member is required. + public var environmentIdentifier: Swift.String? + /// The ID of the environment action. + /// This member is required. + public var identifier: Swift.String? + /// The name of the environment action. + public var name: Swift.String? + /// The parameters of the environment action. + public var parameters: DataZoneClientTypes.ActionParameters? + + public init( + description: Swift.String? = nil, + domainIdentifier: Swift.String? = nil, + environmentIdentifier: Swift.String? = nil, + identifier: Swift.String? = nil, + name: Swift.String? = nil, + parameters: DataZoneClientTypes.ActionParameters? = nil + ) + { + self.description = description + self.domainIdentifier = domainIdentifier + self.environmentIdentifier = environmentIdentifier + self.identifier = identifier + self.name = name + self.parameters = parameters + } +} + +public struct UpdateEnvironmentActionOutput { + /// The description of the environment action. + public var description: Swift.String? + /// The domain ID of the environment action. + /// This member is required. + public var domainId: Swift.String? + /// The environment ID of the environment action. + /// This member is required. + public var environmentId: Swift.String? + /// The ID of the environment action. + /// This member is required. + public var id: Swift.String? + /// The name of the environment action. + /// This member is required. + public var name: Swift.String? + /// The parameters of the environment action. + /// This member is required. + public var parameters: DataZoneClientTypes.ActionParameters? + + public init( + description: Swift.String? = nil, + domainId: Swift.String? = nil, + environmentId: Swift.String? = nil, + id: Swift.String? = nil, + name: Swift.String? = nil, + parameters: DataZoneClientTypes.ActionParameters? = nil + ) + { + self.description = description + self.domainId = domainId + self.environmentId = environmentId + self.id = id + self.name = name + self.parameters = parameters + } +} + public struct UpdateEnvironmentProfileInput { /// The Amazon Web Services account in which a specified environment profile is to be udpated. public var awsAccountId: Swift.String? @@ -12994,6 +13544,22 @@ extension AcceptSubscriptionRequestInput { } } +extension AssociateEnvironmentRoleInput { + + static func urlPathProvider(_ value: AssociateEnvironmentRoleInput) -> Swift.String? { + guard let domainIdentifier = value.domainIdentifier else { + return nil + } + guard let environmentIdentifier = value.environmentIdentifier else { + return nil + } + guard let environmentRoleArn = value.environmentRoleArn else { + return nil + } + return "/v2/domains/\(domainIdentifier.urlPercentEncoding())/environments/\(environmentIdentifier.urlPercentEncoding())/roles/\(environmentRoleArn.urlPercentEncoding())" + } +} + extension CancelMetadataGenerationRunInput { static func urlPathProvider(_ value: CancelMetadataGenerationRunInput) -> Swift.String? { @@ -13080,6 +13646,19 @@ extension CreateEnvironmentInput { } } +extension CreateEnvironmentActionInput { + + static func urlPathProvider(_ value: CreateEnvironmentActionInput) -> Swift.String? { + guard let domainIdentifier = value.domainIdentifier else { + return nil + } + guard let environmentIdentifier = value.environmentIdentifier else { + return nil + } + return "/v2/domains/\(domainIdentifier.urlPercentEncoding())/environments/\(environmentIdentifier.urlPercentEncoding())/actions" + } +} + extension CreateEnvironmentProfileInput { static func urlPathProvider(_ value: CreateEnvironmentProfileInput) -> Swift.String? { @@ -13249,6 +13828,10 @@ extension DeleteDataSourceInput { static func queryItemProvider(_ value: DeleteDataSourceInput) throws -> [Smithy.URIQueryItem] { var items = [Smithy.URIQueryItem]() + if let retainPermissionsOnRevokeFailure = value.retainPermissionsOnRevokeFailure { + let retainPermissionsOnRevokeFailureQueryItem = Smithy.URIQueryItem(name: "retainPermissionsOnRevokeFailure".urlPercentEncoding(), value: Swift.String(retainPermissionsOnRevokeFailure).urlPercentEncoding()) + items.append(retainPermissionsOnRevokeFailureQueryItem) + } if let clientToken = value.clientToken { let clientTokenQueryItem = Smithy.URIQueryItem(name: "clientToken".urlPercentEncoding(), value: Swift.String(clientToken).urlPercentEncoding()) items.append(clientTokenQueryItem) @@ -13296,6 +13879,22 @@ extension DeleteEnvironmentInput { } } +extension DeleteEnvironmentActionInput { + + static func urlPathProvider(_ value: DeleteEnvironmentActionInput) -> Swift.String? { + guard let domainIdentifier = value.domainIdentifier else { + return nil + } + guard let environmentIdentifier = value.environmentIdentifier else { + return nil + } + guard let identifier = value.identifier else { + return nil + } + return "/v2/domains/\(domainIdentifier.urlPercentEncoding())/environments/\(environmentIdentifier.urlPercentEncoding())/actions/\(identifier.urlPercentEncoding())" + } +} + extension DeleteEnvironmentBlueprintConfigurationInput { static func urlPathProvider(_ value: DeleteEnvironmentBlueprintConfigurationInput) -> Swift.String? { @@ -13488,6 +14087,22 @@ extension DeleteTimeSeriesDataPointsInput { } } +extension DisassociateEnvironmentRoleInput { + + static func urlPathProvider(_ value: DisassociateEnvironmentRoleInput) -> Swift.String? { + guard let domainIdentifier = value.domainIdentifier else { + return nil + } + guard let environmentIdentifier = value.environmentIdentifier else { + return nil + } + guard let environmentRoleArn = value.environmentRoleArn else { + return nil + } + return "/v2/domains/\(domainIdentifier.urlPercentEncoding())/environments/\(environmentIdentifier.urlPercentEncoding())/roles/\(environmentRoleArn.urlPercentEncoding())" + } +} + extension GetAssetInput { static func urlPathProvider(_ value: GetAssetInput) -> Swift.String? { @@ -13587,6 +14202,22 @@ extension GetEnvironmentInput { } } +extension GetEnvironmentActionInput { + + static func urlPathProvider(_ value: GetEnvironmentActionInput) -> Swift.String? { + guard let domainIdentifier = value.domainIdentifier else { + return nil + } + guard let environmentIdentifier = value.environmentIdentifier else { + return nil + } + guard let identifier = value.identifier else { + return nil + } + return "/v2/domains/\(domainIdentifier.urlPercentEncoding())/environments/\(environmentIdentifier.urlPercentEncoding())/actions/\(identifier.urlPercentEncoding())" + } +} + extension GetEnvironmentBlueprintInput { static func urlPathProvider(_ value: GetEnvironmentBlueprintInput) -> Swift.String? { @@ -14034,35 +14665,64 @@ extension ListDomainsInput { } } -extension ListEnvironmentBlueprintConfigurationsInput { +extension ListEnvironmentActionsInput { - static func urlPathProvider(_ value: ListEnvironmentBlueprintConfigurationsInput) -> Swift.String? { + static func urlPathProvider(_ value: ListEnvironmentActionsInput) -> Swift.String? { guard let domainIdentifier = value.domainIdentifier else { return nil } - return "/v2/domains/\(domainIdentifier.urlPercentEncoding())/environment-blueprint-configurations" + guard let environmentIdentifier = value.environmentIdentifier else { + return nil + } + return "/v2/domains/\(domainIdentifier.urlPercentEncoding())/environments/\(environmentIdentifier.urlPercentEncoding())/actions" } } -extension ListEnvironmentBlueprintConfigurationsInput { +extension ListEnvironmentActionsInput { - static func queryItemProvider(_ value: ListEnvironmentBlueprintConfigurationsInput) throws -> [Smithy.URIQueryItem] { + static func queryItemProvider(_ value: ListEnvironmentActionsInput) throws -> [Smithy.URIQueryItem] { var items = [Smithy.URIQueryItem]() - if let maxResults = value.maxResults { - let maxResultsQueryItem = Smithy.URIQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) - items.append(maxResultsQueryItem) - } if let nextToken = value.nextToken { let nextTokenQueryItem = Smithy.URIQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) items.append(nextTokenQueryItem) } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } return items } } -extension ListEnvironmentBlueprintsInput { +extension ListEnvironmentBlueprintConfigurationsInput { - static func urlPathProvider(_ value: ListEnvironmentBlueprintsInput) -> Swift.String? { + static func urlPathProvider(_ value: ListEnvironmentBlueprintConfigurationsInput) -> Swift.String? { + guard let domainIdentifier = value.domainIdentifier else { + return nil + } + return "/v2/domains/\(domainIdentifier.urlPercentEncoding())/environment-blueprint-configurations" + } +} + +extension ListEnvironmentBlueprintConfigurationsInput { + + static func queryItemProvider(_ value: ListEnvironmentBlueprintConfigurationsInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + return items + } +} + +extension ListEnvironmentBlueprintsInput { + + static func urlPathProvider(_ value: ListEnvironmentBlueprintsInput) -> Swift.String? { guard let domainIdentifier = value.domainIdentifier else { return nil } @@ -14843,6 +15503,22 @@ extension UpdateEnvironmentInput { } } +extension UpdateEnvironmentActionInput { + + static func urlPathProvider(_ value: UpdateEnvironmentActionInput) -> Swift.String? { + guard let domainIdentifier = value.domainIdentifier else { + return nil + } + guard let environmentIdentifier = value.environmentIdentifier else { + return nil + } + guard let identifier = value.identifier else { + return nil + } + return "/v2/domains/\(domainIdentifier.urlPercentEncoding())/environments/\(environmentIdentifier.urlPercentEncoding())/actions/\(identifier.urlPercentEncoding())" + } +} + extension UpdateEnvironmentProfileInput { static func urlPathProvider(_ value: UpdateEnvironmentProfileInput) -> Swift.String? { @@ -15064,6 +15740,9 @@ extension CreateEnvironmentInput { static func write(value: CreateEnvironmentInput?, to writer: SmithyJSON.Writer) throws { guard let value else { return } try writer["description"].write(value.description) + try writer["environmentAccountIdentifier"].write(value.environmentAccountIdentifier) + try writer["environmentAccountRegion"].write(value.environmentAccountRegion) + try writer["environmentBlueprintIdentifier"].write(value.environmentBlueprintIdentifier) try writer["environmentProfileIdentifier"].write(value.environmentProfileIdentifier) try writer["glossaryTerms"].writeList(value.glossaryTerms, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) try writer["name"].write(value.name) @@ -15072,6 +15751,16 @@ extension CreateEnvironmentInput { } } +extension CreateEnvironmentActionInput { + + static func write(value: CreateEnvironmentActionInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["description"].write(value.description) + try writer["name"].write(value.name) + try writer["parameters"].write(value.parameters, with: DataZoneClientTypes.ActionParameters.write(value:to:)) + } +} + extension CreateEnvironmentProfileInput { static func write(value: CreateEnvironmentProfileInput?, to writer: SmithyJSON.Writer) throws { @@ -15371,6 +16060,7 @@ extension UpdateDataSourceInput { try writer["name"].write(value.name) try writer["publishOnImport"].write(value.publishOnImport) try writer["recommendation"].write(value.recommendation, with: DataZoneClientTypes.RecommendationConfiguration.write(value:to:)) + try writer["retainPermissionsOnRevokeFailure"].write(value.retainPermissionsOnRevokeFailure) try writer["schedule"].write(value.schedule, with: DataZoneClientTypes.ScheduleConfiguration.write(value:to:)) } } @@ -15396,6 +16086,16 @@ extension UpdateEnvironmentInput { } } +extension UpdateEnvironmentActionInput { + + static func write(value: UpdateEnvironmentActionInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["description"].write(value.description) + try writer["name"].write(value.name) + try writer["parameters"].write(value.parameters, with: DataZoneClientTypes.ActionParameters.write(value:to:)) + } +} + extension UpdateEnvironmentProfileInput { static func write(value: UpdateEnvironmentProfileInput?, to writer: SmithyJSON.Writer) throws { @@ -15527,6 +16227,13 @@ extension AcceptSubscriptionRequestOutput { } } +extension AssociateEnvironmentRoleOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> AssociateEnvironmentRoleOutput { + return AssociateEnvironmentRoleOutput() + } +} + extension CancelMetadataGenerationRunOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CancelMetadataGenerationRunOutput { @@ -15707,7 +16414,7 @@ extension CreateEnvironmentOutput { value.domainId = try reader["domainId"].readIfPresent() value.environmentActions = try reader["environmentActions"].readListIfPresent(memberReadingClosure: DataZoneClientTypes.ConfigurableEnvironmentAction.read(from:), memberNodeInfo: "member", isFlattened: false) value.environmentBlueprintId = try reader["environmentBlueprintId"].readIfPresent() - value.environmentProfileId = try reader["environmentProfileId"].readIfPresent() + value.environmentProfileId = try reader["environmentProfileId"].readIfPresent() ?? "" value.glossaryTerms = try reader["glossaryTerms"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) value.id = try reader["id"].readIfPresent() value.lastDeployment = try reader["lastDeployment"].readIfPresent(with: DataZoneClientTypes.Deployment.read(from:)) @@ -15723,6 +16430,23 @@ extension CreateEnvironmentOutput { } } +extension CreateEnvironmentActionOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CreateEnvironmentActionOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = CreateEnvironmentActionOutput() + value.description = try reader["description"].readIfPresent() + value.domainId = try reader["domainId"].readIfPresent() + value.environmentId = try reader["environmentId"].readIfPresent() + value.id = try reader["id"].readIfPresent() + value.name = try reader["name"].readIfPresent() + value.parameters = try reader["parameters"].readIfPresent(with: DataZoneClientTypes.ActionParameters.read(from:)) + return value + } +} + extension CreateEnvironmentProfileOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CreateEnvironmentProfileOutput { @@ -15980,7 +16704,9 @@ extension DeleteDataSourceOutput { value.name = try reader["name"].readIfPresent() value.projectId = try reader["projectId"].readIfPresent() value.publishOnImport = try reader["publishOnImport"].readIfPresent() + value.retainPermissionsOnRevokeFailure = try reader["retainPermissionsOnRevokeFailure"].readIfPresent() value.schedule = try reader["schedule"].readIfPresent(with: DataZoneClientTypes.ScheduleConfiguration.read(from:)) + value.selfGrantStatus = try reader["selfGrantStatus"].readIfPresent(with: DataZoneClientTypes.SelfGrantStatusOutput.read(from:)) value.status = try reader["status"].readIfPresent() value.type = try reader["type"].readIfPresent() value.updatedAt = try reader["updatedAt"].readTimestampIfPresent(format: .dateTime) @@ -16007,6 +16733,13 @@ extension DeleteEnvironmentOutput { } } +extension DeleteEnvironmentActionOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DeleteEnvironmentActionOutput { + return DeleteEnvironmentActionOutput() + } +} + extension DeleteEnvironmentBlueprintConfigurationOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DeleteEnvironmentBlueprintConfigurationOutput { @@ -16106,6 +16839,13 @@ extension DeleteTimeSeriesDataPointsOutput { } } +extension DisassociateEnvironmentRoleOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DisassociateEnvironmentRoleOutput { + return DisassociateEnvironmentRoleOutput() + } +} + extension GetAssetOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetAssetOutput { @@ -16183,6 +16923,7 @@ extension GetDataSourceOutput { value.publishOnImport = try reader["publishOnImport"].readIfPresent() value.recommendation = try reader["recommendation"].readIfPresent(with: DataZoneClientTypes.RecommendationConfiguration.read(from:)) value.schedule = try reader["schedule"].readIfPresent(with: DataZoneClientTypes.ScheduleConfiguration.read(from:)) + value.selfGrantStatus = try reader["selfGrantStatus"].readIfPresent(with: DataZoneClientTypes.SelfGrantStatusOutput.read(from:)) value.status = try reader["status"].readIfPresent() value.type = try reader["type"].readIfPresent() value.updatedAt = try reader["updatedAt"].readTimestampIfPresent(format: .dateTime) @@ -16253,7 +16994,7 @@ extension GetEnvironmentOutput { value.domainId = try reader["domainId"].readIfPresent() value.environmentActions = try reader["environmentActions"].readListIfPresent(memberReadingClosure: DataZoneClientTypes.ConfigurableEnvironmentAction.read(from:), memberNodeInfo: "member", isFlattened: false) value.environmentBlueprintId = try reader["environmentBlueprintId"].readIfPresent() - value.environmentProfileId = try reader["environmentProfileId"].readIfPresent() + value.environmentProfileId = try reader["environmentProfileId"].readIfPresent() ?? "" value.glossaryTerms = try reader["glossaryTerms"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) value.id = try reader["id"].readIfPresent() value.lastDeployment = try reader["lastDeployment"].readIfPresent(with: DataZoneClientTypes.Deployment.read(from:)) @@ -16269,6 +17010,23 @@ extension GetEnvironmentOutput { } } +extension GetEnvironmentActionOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetEnvironmentActionOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = GetEnvironmentActionOutput() + value.description = try reader["description"].readIfPresent() + value.domainId = try reader["domainId"].readIfPresent() + value.environmentId = try reader["environmentId"].readIfPresent() + value.id = try reader["id"].readIfPresent() + value.name = try reader["name"].readIfPresent() + value.parameters = try reader["parameters"].readIfPresent(with: DataZoneClientTypes.ActionParameters.read(from:)) + return value + } +} + extension GetEnvironmentBlueprintOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetEnvironmentBlueprintOutput { @@ -16679,6 +17437,19 @@ extension ListDomainsOutput { } } +extension ListEnvironmentActionsOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListEnvironmentActionsOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListEnvironmentActionsOutput() + value.items = try reader["items"].readListIfPresent(memberReadingClosure: DataZoneClientTypes.EnvironmentActionSummary.read(from:), memberNodeInfo: "member", isFlattened: false) + value.nextToken = try reader["nextToken"].readIfPresent() + return value + } +} + extension ListEnvironmentBlueprintConfigurationsOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListEnvironmentBlueprintConfigurationsOutput { @@ -17100,7 +17871,9 @@ extension UpdateDataSourceOutput { value.projectId = try reader["projectId"].readIfPresent() value.publishOnImport = try reader["publishOnImport"].readIfPresent() value.recommendation = try reader["recommendation"].readIfPresent(with: DataZoneClientTypes.RecommendationConfiguration.read(from:)) + value.retainPermissionsOnRevokeFailure = try reader["retainPermissionsOnRevokeFailure"].readIfPresent() value.schedule = try reader["schedule"].readIfPresent(with: DataZoneClientTypes.ScheduleConfiguration.read(from:)) + value.selfGrantStatus = try reader["selfGrantStatus"].readIfPresent(with: DataZoneClientTypes.SelfGrantStatusOutput.read(from:)) value.status = try reader["status"].readIfPresent() value.type = try reader["type"].readIfPresent() value.updatedAt = try reader["updatedAt"].readTimestampIfPresent(format: .dateTime) @@ -17141,7 +17914,7 @@ extension UpdateEnvironmentOutput { value.domainId = try reader["domainId"].readIfPresent() value.environmentActions = try reader["environmentActions"].readListIfPresent(memberReadingClosure: DataZoneClientTypes.ConfigurableEnvironmentAction.read(from:), memberNodeInfo: "member", isFlattened: false) value.environmentBlueprintId = try reader["environmentBlueprintId"].readIfPresent() - value.environmentProfileId = try reader["environmentProfileId"].readIfPresent() + value.environmentProfileId = try reader["environmentProfileId"].readIfPresent() ?? "" value.glossaryTerms = try reader["glossaryTerms"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) value.id = try reader["id"].readIfPresent() value.lastDeployment = try reader["lastDeployment"].readIfPresent(with: DataZoneClientTypes.Deployment.read(from:)) @@ -17157,6 +17930,23 @@ extension UpdateEnvironmentOutput { } } +extension UpdateEnvironmentActionOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> UpdateEnvironmentActionOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = UpdateEnvironmentActionOutput() + value.description = try reader["description"].readIfPresent() + value.domainId = try reader["domainId"].readIfPresent() + value.environmentId = try reader["environmentId"].readIfPresent() + value.id = try reader["id"].readIfPresent() + value.name = try reader["name"].readIfPresent() + value.parameters = try reader["parameters"].readIfPresent(with: DataZoneClientTypes.ActionParameters.read(from:)) + return value + } +} + extension UpdateEnvironmentProfileOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> UpdateEnvironmentProfileOutput { @@ -17388,6 +18178,26 @@ enum AcceptSubscriptionRequestOutputError { } } +enum AssociateEnvironmentRoleOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + if let error = try httpServiceError(baseError: baseError) { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum CancelMetadataGenerationRunOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -17551,6 +18361,26 @@ enum CreateEnvironmentOutputError { } } +enum CreateEnvironmentActionOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + if let error = try httpServiceError(baseError: baseError) { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum CreateEnvironmentProfileOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -17888,6 +18718,26 @@ enum DeleteEnvironmentOutputError { } } +enum DeleteEnvironmentActionOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + if let error = try httpServiceError(baseError: baseError) { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum DeleteEnvironmentBlueprintConfigurationOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -18122,6 +18972,26 @@ enum DeleteTimeSeriesDataPointsOutputError { } } +enum DisassociateEnvironmentRoleOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + if let error = try httpServiceError(baseError: baseError) { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum GetAssetOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -18241,6 +19111,25 @@ enum GetEnvironmentOutputError { } } +enum GetEnvironmentActionOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + if let error = try httpServiceError(baseError: baseError) { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum GetEnvironmentBlueprintOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -18665,6 +19554,24 @@ enum ListDomainsOutputError { } } +enum ListEnvironmentActionsOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + if let error = try httpServiceError(baseError: baseError) { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum ListEnvironmentBlueprintConfigurationsOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -19251,6 +20158,26 @@ enum UpdateEnvironmentOutputError { } } +enum UpdateEnvironmentActionOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + if let error = try httpServiceError(baseError: baseError) { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum UpdateEnvironmentProfileOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -20020,6 +20947,45 @@ extension DataZoneClientTypes.DeploymentProperties { } } +extension DataZoneClientTypes.ActionParameters { + + static func write(value: DataZoneClientTypes.ActionParameters?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + switch value { + case let .awsconsolelink(awsconsolelink): + try writer["awsConsoleLink"].write(awsconsolelink, with: DataZoneClientTypes.AwsConsoleLinkParameters.write(value:to:)) + case let .sdkUnknown(sdkUnknown): + try writer["sdkUnknown"].write(sdkUnknown) + } + } + + static func read(from reader: SmithyJSON.Reader) throws -> DataZoneClientTypes.ActionParameters { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "awsConsoleLink": + return .awsconsolelink(try reader["awsConsoleLink"].read(with: DataZoneClientTypes.AwsConsoleLinkParameters.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension DataZoneClientTypes.AwsConsoleLinkParameters { + + static func write(value: DataZoneClientTypes.AwsConsoleLinkParameters?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["uri"].write(value.uri) + } + + static func read(from reader: SmithyJSON.Reader) throws -> DataZoneClientTypes.AwsConsoleLinkParameters { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = DataZoneClientTypes.AwsConsoleLinkParameters() + value.uri = try reader["uri"].readIfPresent() + return value + } +} + extension DataZoneClientTypes.TermRelations { static func write(value: DataZoneClientTypes.TermRelations?, to writer: SmithyJSON.Writer) throws { @@ -20159,6 +21125,55 @@ extension DataZoneClientTypes.IamUserProfileDetails { } } +extension DataZoneClientTypes.SelfGrantStatusOutput { + + static func read(from reader: SmithyJSON.Reader) throws -> DataZoneClientTypes.SelfGrantStatusOutput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "glueSelfGrantStatus": + return .glueselfgrantstatus(try reader["glueSelfGrantStatus"].read(with: DataZoneClientTypes.GlueSelfGrantStatusOutput.read(from:))) + case "redshiftSelfGrantStatus": + return .redshiftselfgrantstatus(try reader["redshiftSelfGrantStatus"].read(with: DataZoneClientTypes.RedshiftSelfGrantStatusOutput.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension DataZoneClientTypes.RedshiftSelfGrantStatusOutput { + + static func read(from reader: SmithyJSON.Reader) throws -> DataZoneClientTypes.RedshiftSelfGrantStatusOutput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = DataZoneClientTypes.RedshiftSelfGrantStatusOutput() + value.selfGrantStatusDetails = try reader["selfGrantStatusDetails"].readListIfPresent(memberReadingClosure: DataZoneClientTypes.SelfGrantStatusDetail.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension DataZoneClientTypes.SelfGrantStatusDetail { + + static func read(from reader: SmithyJSON.Reader) throws -> DataZoneClientTypes.SelfGrantStatusDetail { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = DataZoneClientTypes.SelfGrantStatusDetail() + value.databaseName = try reader["databaseName"].readIfPresent() + value.schemaName = try reader["schemaName"].readIfPresent() + value.status = try reader["status"].readIfPresent() + value.failureCause = try reader["failureCause"].readIfPresent() + return value + } +} + +extension DataZoneClientTypes.GlueSelfGrantStatusOutput { + + static func read(from reader: SmithyJSON.Reader) throws -> DataZoneClientTypes.GlueSelfGrantStatusOutput { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = DataZoneClientTypes.GlueSelfGrantStatusOutput() + value.selfGrantStatusDetails = try reader["selfGrantStatusDetails"].readListIfPresent(memberReadingClosure: DataZoneClientTypes.SelfGrantStatusDetail.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + extension DataZoneClientTypes.RunStatisticsForAssets { static func read(from reader: SmithyJSON.Reader) throws -> DataZoneClientTypes.RunStatisticsForAssets { @@ -20367,6 +21382,21 @@ extension DataZoneClientTypes.DomainSummary { } } +extension DataZoneClientTypes.EnvironmentActionSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> DataZoneClientTypes.EnvironmentActionSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = DataZoneClientTypes.EnvironmentActionSummary() + value.domainId = try reader["domainId"].readIfPresent() + value.environmentId = try reader["environmentId"].readIfPresent() + value.id = try reader["id"].readIfPresent() + value.name = try reader["name"].readIfPresent() + value.parameters = try reader["parameters"].readIfPresent(with: DataZoneClientTypes.ActionParameters.read(from:)) + value.description = try reader["description"].readIfPresent() + return value + } +} + extension DataZoneClientTypes.EnvironmentBlueprintConfigurationItem { static func read(from reader: SmithyJSON.Reader) throws -> DataZoneClientTypes.EnvironmentBlueprintConfigurationItem { @@ -20433,7 +21463,7 @@ extension DataZoneClientTypes.EnvironmentSummary { value.updatedAt = try reader["updatedAt"].readTimestampIfPresent(format: .dateTime) value.name = try reader["name"].readIfPresent() value.description = try reader["description"].readIfPresent() - value.environmentProfileId = try reader["environmentProfileId"].readIfPresent() + value.environmentProfileId = try reader["environmentProfileId"].readIfPresent() ?? "" value.awsAccountId = try reader["awsAccountId"].readIfPresent() value.awsAccountRegion = try reader["awsAccountRegion"].readIfPresent() value.provider = try reader["provider"].readIfPresent() diff --git a/Sources/Services/AWSDataZone/Sources/AWSDataZone/Paginators.swift b/Sources/Services/AWSDataZone/Sources/AWSDataZone/Paginators.swift index fdc7363e1d2..826c448c929 100644 --- a/Sources/Services/AWSDataZone/Sources/AWSDataZone/Paginators.swift +++ b/Sources/Services/AWSDataZone/Sources/AWSDataZone/Paginators.swift @@ -69,6 +69,38 @@ extension PaginatorSequence where OperationStackInput == ListDataSourceRunActivi return try await self.asyncCompactMap { item in item.items } } } +extension DataZoneClient { + /// Paginate over `[ListEnvironmentActionsOutput]` results. + /// + /// When this operation is called, an `AsyncSequence` is created. AsyncSequences are lazy so no service + /// calls are made until the sequence is iterated over. This also means there is no guarantee that the request is valid + /// until then. If there are errors in your request, you will see the failures only after you start iterating. + /// - Parameters: + /// - input: A `[ListEnvironmentActionsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListEnvironmentActionsOutput` + public func listEnvironmentActionsPaginated(input: ListEnvironmentActionsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \.nextToken, outputKey: \.nextToken, paginationFunction: self.listEnvironmentActions(input:)) + } +} + +extension ListEnvironmentActionsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListEnvironmentActionsInput { + return ListEnvironmentActionsInput( + domainIdentifier: self.domainIdentifier, + environmentIdentifier: self.environmentIdentifier, + maxResults: self.maxResults, + nextToken: token + )} +} + +extension PaginatorSequence where OperationStackInput == ListEnvironmentActionsInput, OperationStackOutput == ListEnvironmentActionsOutput { + /// This paginator transforms the `AsyncSequence` returned by `listEnvironmentActionsPaginated` + /// to access the nested member `[DataZoneClientTypes.EnvironmentActionSummary]` + /// - Returns: `[DataZoneClientTypes.EnvironmentActionSummary]` + public func items() async throws -> [DataZoneClientTypes.EnvironmentActionSummary] { + return try await self.asyncCompactMap { item in item.items } + } +} extension DataZoneClient { /// Paginate over `[ListEnvironmentBlueprintsOutput]` results. /// diff --git a/Sources/Services/AWSEC2/Sources/AWSEC2/EC2Client.swift b/Sources/Services/AWSEC2/Sources/AWSEC2/EC2Client.swift index 5ae6126ade1..bffbf342969 100644 --- a/Sources/Services/AWSEC2/Sources/AWSEC2/EC2Client.swift +++ b/Sources/Services/AWSEC2/Sources/AWSEC2/EC2Client.swift @@ -159,7 +159,7 @@ extension EC2Client { extension EC2Client { /// Performs the `AcceptAddressTransfer` operation on the `AmazonEC2` service. /// - /// Accepts an Elastic IP address transfer. For more information, see [Accept a transferred Elastic IP address](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#using-instance-addressing-eips-transfer-accept) in the Amazon Virtual Private Cloud User Guide. + /// Accepts an Elastic IP address transfer. For more information, see [Accept a transferred Elastic IP address](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#using-instance-addressing-eips-transfer-accept) in the Amazon VPC User Guide. /// /// - Parameter AcceptAddressTransferInput : [no documentation found] /// @@ -527,7 +527,7 @@ extension EC2Client { /// Performs the `AllocateAddress` operation on the `AmazonEC2` service. /// - /// Allocates an Elastic IP address to your Amazon Web Services account. After you allocate the Elastic IP address you can associate it with an instance or network interface. After you release an Elastic IP address, it is released to the IP address pool and can be allocated to a different Amazon Web Services account. You can allocate an Elastic IP address from an address pool owned by Amazon Web Services or from an address pool created from a public IPv4 address range that you have brought to Amazon Web Services for use with your Amazon Web Services resources using bring your own IP addresses (BYOIP). For more information, see [Bring Your Own IP Addresses (BYOIP)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html) in the Amazon Elastic Compute Cloud User Guide. If you release an Elastic IP address, you might be able to recover it. You cannot recover an Elastic IP address that you released after it is allocated to another Amazon Web Services account. To attempt to recover an Elastic IP address that you released, specify it in this operation. For more information, see [Elastic IP Addresses](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) in the Amazon Elastic Compute Cloud User Guide. You can allocate a carrier IP address which is a public IP address from a telecommunication carrier, to a network interface which resides in a subnet in a Wavelength Zone (for example an EC2 instance). + /// Allocates an Elastic IP address to your Amazon Web Services account. After you allocate the Elastic IP address you can associate it with an instance or network interface. After you release an Elastic IP address, it is released to the IP address pool and can be allocated to a different Amazon Web Services account. You can allocate an Elastic IP address from an address pool owned by Amazon Web Services or from an address pool created from a public IPv4 address range that you have brought to Amazon Web Services for use with your Amazon Web Services resources using bring your own IP addresses (BYOIP). For more information, see [Bring Your Own IP Addresses (BYOIP)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html) in the Amazon EC2 User Guide. If you release an Elastic IP address, you might be able to recover it. You cannot recover an Elastic IP address that you released after it is allocated to another Amazon Web Services account. To attempt to recover an Elastic IP address that you released, specify it in this operation. For more information, see [Elastic IP Addresses](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) in the Amazon EC2 User Guide. You can allocate a carrier IP address which is a public IP address from a telecommunication carrier, to a network interface which resides in a subnet in a Wavelength Zone (for example an EC2 instance). /// /// - Parameter AllocateAddressInput : [no documentation found] /// @@ -712,7 +712,7 @@ extension EC2Client { /// Performs the `AssignIpv6Addresses` operation on the `AmazonEC2` service. /// - /// Assigns one or more IPv6 addresses to the specified network interface. You can specify one or more specific IPv6 addresses, or you can specify the number of IPv6 addresses to be automatically assigned from within the subnet's IPv6 CIDR block range. You can assign as many IPv6 addresses to a network interface as you can assign private IPv4 addresses, and the limit varies per instance type. For information, see [IP Addresses Per Network Interface Per Instance Type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI) in the Amazon Elastic Compute Cloud User Guide. You must specify either the IPv6 addresses or the IPv6 address count in the request. You can optionally use Prefix Delegation on the network interface. You must specify either the IPV6 Prefix Delegation prefixes, or the IPv6 Prefix Delegation count. For information, see [ Assigning prefixes to Amazon EC2 network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html) in the Amazon Elastic Compute Cloud User Guide. + /// Assigns one or more IPv6 addresses to the specified network interface. You can specify one or more specific IPv6 addresses, or you can specify the number of IPv6 addresses to be automatically assigned from within the subnet's IPv6 CIDR block range. You can assign as many IPv6 addresses to a network interface as you can assign private IPv4 addresses, and the limit varies per instance type. You must specify either the IPv6 addresses or the IPv6 address count in the request. You can optionally use Prefix Delegation on the network interface. You must specify either the IPV6 Prefix Delegation prefixes, or the IPv6 Prefix Delegation count. For information, see [ Assigning prefixes to network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html) in the Amazon EC2 User Guide. /// /// - Parameter AssignIpv6AddressesInput : [no documentation found] /// @@ -758,7 +758,7 @@ extension EC2Client { /// Performs the `AssignPrivateIpAddresses` operation on the `AmazonEC2` service. /// - /// Assigns one or more secondary private IP addresses to the specified network interface. You can specify one or more specific secondary IP addresses, or you can specify the number of secondary IP addresses to be automatically assigned within the subnet's CIDR block range. The number of secondary IP addresses that you can assign to an instance varies by instance type. For information about instance types, see [Instance Types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the Amazon Elastic Compute Cloud User Guide. For more information about Elastic IP addresses, see [Elastic IP Addresses](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) in the Amazon Elastic Compute Cloud User Guide. When you move a secondary private IP address to another network interface, any Elastic IP address that is associated with the IP address is also moved. Remapping an IP address is an asynchronous operation. When you move an IP address from one network interface to another, check network/interfaces/macs/mac/local-ipv4s in the instance metadata to confirm that the remapping is complete. You must specify either the IP addresses or the IP address count in the request. You can optionally use Prefix Delegation on the network interface. You must specify either the IPv4 Prefix Delegation prefixes, or the IPv4 Prefix Delegation count. For information, see [ Assigning prefixes to Amazon EC2 network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html) in the Amazon Elastic Compute Cloud User Guide. + /// Assigns one or more secondary private IP addresses to the specified network interface. You can specify one or more specific secondary IP addresses, or you can specify the number of secondary IP addresses to be automatically assigned within the subnet's CIDR block range. The number of secondary IP addresses that you can assign to an instance varies by instance type. For more information about Elastic IP addresses, see [Elastic IP Addresses](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) in the Amazon EC2 User Guide. When you move a secondary private IP address to another network interface, any Elastic IP address that is associated with the IP address is also moved. Remapping an IP address is an asynchronous operation. When you move an IP address from one network interface to another, check network/interfaces/macs/mac/local-ipv4s in the instance metadata to confirm that the remapping is complete. You must specify either the IP addresses or the IP address count in the request. You can optionally use Prefix Delegation on the network interface. You must specify either the IPv4 Prefix Delegation prefixes, or the IPv4 Prefix Delegation count. For information, see [ Assigning prefixes to network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html) in the Amazon EC2 User Guide. /// /// - Parameter AssignPrivateIpAddressesInput : Contains the parameters for AssignPrivateIpAddresses. /// @@ -804,7 +804,7 @@ extension EC2Client { /// Performs the `AssignPrivateNatGatewayAddress` operation on the `AmazonEC2` service. /// - /// Assigns one or more private IPv4 addresses to a private NAT gateway. For more information, see [Work with NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with) in the Amazon VPC User Guide. + /// Assigns private IPv4 addresses to a private NAT gateway. For more information, see [Work with NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with) in the Amazon VPC User Guide. /// /// - Parameter AssignPrivateNatGatewayAddressInput : [no documentation found] /// @@ -943,7 +943,7 @@ extension EC2Client { /// Performs the `AssociateDhcpOptions` operation on the `AmazonEC2` service. /// - /// Associates a set of DHCP options (that you've previously created) with the specified VPC, or associates no DHCP options with the VPC. After you associate the options with the VPC, any existing instances and all new instances that you launch in that VPC use the options. You don't need to restart or relaunch the instances. They automatically pick up the changes within a few hours, depending on how frequently the instance renews its DHCP lease. You can explicitly renew the lease using the operating system on the instance. For more information, see [DHCP options sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon VPC User Guide. + /// Associates a set of DHCP options (that you've previously created) with the specified VPC, or associates no DHCP options with the VPC. After you associate the options with the VPC, any existing instances and all new instances that you launch in that VPC use the options. You don't need to restart or relaunch the instances. They automatically pick up the changes within a few hours, depending on how frequently the instance renews its DHCP lease. You can explicitly renew the lease using the operating system on the instance. For more information, see [DHCP option sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon VPC User Guide. /// /// - Parameter AssociateDhcpOptionsInput : [no documentation found] /// @@ -1496,7 +1496,7 @@ extension EC2Client { /// Performs the `AssociateTrunkInterface` operation on the `AmazonEC2` service. /// - /// Associates a branch network interface with a trunk network interface. Before you create the association, run the [create-network-interface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html) command and set --interface-type to trunk. You must also create a network interface for each branch network interface that you want to associate with the trunk network interface. + /// Associates a branch network interface with a trunk network interface. Before you create the association, use [CreateNetworkInterface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html) command and set the interface type to trunk. You must also create a network interface for each branch network interface that you want to associate with the trunk network interface. /// /// - Parameter AssociateTrunkInterfaceInput : [no documentation found] /// @@ -2390,7 +2390,7 @@ extension EC2Client { /// Performs the `CancelReservedInstancesListing` operation on the `AmazonEC2` service. /// - /// Cancels the specified Reserved Instance listing in the Reserved Instance Marketplace. For more information, see [Reserved Instance Marketplace](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) in the Amazon EC2 User Guide. + /// Cancels the specified Reserved Instance listing in the Reserved Instance Marketplace. For more information, see [Sell in the Reserved Instance Marketplace](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) in the Amazon EC2 User Guide. /// /// - Parameter CancelReservedInstancesListingInput : Contains the parameters for CancelReservedInstancesListing. /// @@ -2668,7 +2668,7 @@ extension EC2Client { /// Performs the `CopySnapshot` operation on the `AmazonEC2` service. /// - /// Copies a point-in-time snapshot of an EBS volume and stores it in Amazon S3. You can copy a snapshot within the same Region, from one Region to another, or from a Region to an Outpost. You can't copy a snapshot from an Outpost to a Region, from one Outpost to another, or within the same Outpost. You can use the snapshot to create EBS volumes or Amazon Machine Images (AMIs). When copying snapshots to a Region, copies of encrypted EBS snapshots remain encrypted. Copies of unencrypted snapshots remain unencrypted, unless you enable encryption for the snapshot copy operation. By default, encrypted snapshot copies use the default Key Management Service (KMS) KMS key; however, you can specify a different KMS key. To copy an encrypted snapshot that has been shared from another account, you must have permissions for the KMS key used to encrypt the snapshot. Snapshots copied to an Outpost are encrypted by default using the default encryption key for the Region, or a different key that you specify in the request using KmsKeyId. Outposts do not support unencrypted snapshots. For more information, [ Amazon EBS local snapshots on Outposts](https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#ami) in the Amazon EBS User Guide. Snapshots created by copying another snapshot have an arbitrary volume ID that should not be used for any purpose. For more information, see [Copy an Amazon EBS snapshot](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-copy-snapshot.html) in the Amazon EBS User Guide. + /// Copies a point-in-time snapshot of an EBS volume and stores it in Amazon S3. You can copy a snapshot within the same Region, from one Region to another, or from a Region to an Outpost. You can't copy a snapshot from an Outpost to a Region, from one Outpost to another, or within the same Outpost. You can use the snapshot to create EBS volumes or Amazon Machine Images (AMIs). When copying snapshots to a Region, copies of encrypted EBS snapshots remain encrypted. Copies of unencrypted snapshots remain unencrypted, unless you enable encryption for the snapshot copy operation. By default, encrypted snapshot copies use the default KMS key; however, you can specify a different KMS key. To copy an encrypted snapshot that has been shared from another account, you must have permissions for the KMS key used to encrypt the snapshot. Snapshots copied to an Outpost are encrypted by default using the default encryption key for the Region, or a different key that you specify in the request using KmsKeyId. Outposts do not support unencrypted snapshots. For more information, [ Amazon EBS local snapshots on Outposts](https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#ami) in the Amazon EBS User Guide. Snapshots created by copying another snapshot have an arbitrary volume ID that should not be used for any purpose. For more information, see [Copy an Amazon EBS snapshot](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-copy-snapshot.html) in the Amazon EBS User Guide. /// /// - Parameter CopySnapshotInput : [no documentation found] /// @@ -3178,7 +3178,7 @@ extension EC2Client { /// Performs the `CreateDhcpOptions` operation on the `AmazonEC2` service. /// - /// Creates a custom set of DHCP options. After you create a DHCP option set, you associate it with a VPC. After you associate a DHCP option set with a VPC, all existing and newly launched instances in the VPC use this set of DHCP options. The following are the individual DHCP options you can specify. For more information, see [DHCP options sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon VPC User Guide. + /// Creates a custom set of DHCP options. After you create a DHCP option set, you associate it with a VPC. After you associate a DHCP option set with a VPC, all existing and newly launched instances in the VPC use this set of DHCP options. The following are the individual DHCP options you can specify. For more information, see [DHCP option sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon VPC User Guide. /// /// * domain-name - If you're using AmazonProvidedDNS in us-east-1, specify ec2.internal. If you're using AmazonProvidedDNS in any other Region, specify region.compute.internal. Otherwise, specify a custom domain name. This value is used to complete unqualified DNS hostnames. Some Linux operating systems accept multiple domain names separated by spaces. However, Windows and other Linux operating systems treat the value as a single domain, which results in unexpected behavior. If your DHCP option set is associated with a VPC that has instances running operating systems that treat the value as a single domain, specify only one domain name. /// @@ -3188,7 +3188,7 @@ extension EC2Client { /// /// * netbios-name-servers - The IP addresses of up to four NetBIOS name servers. /// - /// * netbios-node-type - The NetBIOS node type (1, 2, 4, or 8). We recommend that you specify 2. Broadcast and multicast are not supported. For more information about NetBIOS node types, see [RFC 2132](http://www.ietf.org/rfc/rfc2132.txt). + /// * netbios-node-type - The NetBIOS node type (1, 2, 4, or 8). We recommend that you specify 2. Broadcast and multicast are not supported. For more information about NetBIOS node types, see [RFC 2132](https://www.ietf.org/rfc/rfc2132.txt). /// /// * ipv6-address-preferred-lease-time - A value (in seconds, minutes, hours, or years) for how frequently a running instance with an IPv6 assigned to it goes through DHCPv6 lease renewal. Acceptable values are between 140 and 2147483647 seconds (approximately 68 years). If no value is entered, the default lease time is 140 seconds. If you use long-term addressing for EC2 instances, you can increase the lease time and avoid frequent lease renewal requests. Lease renewal typically occurs when half of the lease time has elapsed. /// @@ -3328,7 +3328,7 @@ extension EC2Client { /// Performs the `CreateFlowLogs` operation on the `AmazonEC2` service. /// - /// Creates one or more flow logs to capture information about IP traffic for a specific network interface, subnet, or VPC. Flow log data for a monitored network interface is recorded as flow log records, which are log events consisting of fields that describe the traffic flow. For more information, see [Flow log records](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records) in the Amazon Virtual Private Cloud User Guide. When publishing to CloudWatch Logs, flow log records are published to a log group, and each network interface has a unique log stream in the log group. When publishing to Amazon S3, flow log records for all of the monitored network interfaces are published to a single log file object that is stored in the specified bucket. For more information, see [VPC Flow Logs](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) in the Amazon Virtual Private Cloud User Guide. + /// Creates one or more flow logs to capture information about IP traffic for a specific network interface, subnet, or VPC. Flow log data for a monitored network interface is recorded as flow log records, which are log events consisting of fields that describe the traffic flow. For more information, see [Flow log records](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records) in the Amazon VPC User Guide. When publishing to CloudWatch Logs, flow log records are published to a log group, and each network interface has a unique log stream in the log group. When publishing to Amazon S3, flow log records for all of the monitored network interfaces are published to a single log file object that is stored in the specified bucket. For more information, see [VPC Flow Logs](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) in the Amazon VPC User Guide. /// /// - Parameter CreateFlowLogsInput : [no documentation found] /// @@ -3892,7 +3892,7 @@ extension EC2Client { /// Performs the `CreateLaunchTemplate` operation on the `AmazonEC2` service. /// - /// Creates a launch template. A launch template contains the parameters to launch an instance. When you launch an instance using [RunInstances], you can specify a launch template instead of providing the launch parameters in the request. For more information, see [Launch an instance from a launch template](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html) in the Amazon Elastic Compute Cloud User Guide. To clone an existing launch template as the basis for a new launch template, use the Amazon EC2 console. The API, SDKs, and CLI do not support cloning a template. For more information, see [Create a launch template from an existing launch template](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template-from-existing-launch-template) in the Amazon Elastic Compute Cloud User Guide. + /// Creates a launch template. A launch template contains the parameters to launch an instance. When you launch an instance using [RunInstances], you can specify a launch template instead of providing the launch parameters in the request. For more information, see [Launch an instance from a launch template](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html) in the Amazon EC2 User Guide. To clone an existing launch template as the basis for a new launch template, use the Amazon EC2 console. The API, SDKs, and CLI do not support cloning a template. For more information, see [Create a launch template from an existing launch template](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template-from-existing-launch-template) in the Amazon EC2 User Guide. /// /// - Parameter CreateLaunchTemplateInput : [no documentation found] /// @@ -3938,7 +3938,7 @@ extension EC2Client { /// Performs the `CreateLaunchTemplateVersion` operation on the `AmazonEC2` service. /// - /// Creates a new version of a launch template. You must specify an existing launch template, either by name or ID. You can determine whether the new version inherits parameters from a source version, and add or overwrite parameters as needed. Launch template versions are numbered in the order in which they are created. You can't specify, change, or replace the numbering of launch template versions. Launch templates are immutable; after you create a launch template, you can't modify it. Instead, you can create a new version of the launch template that includes the changes that you require. For more information, see [Modify a launch template (manage launch template versions)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#manage-launch-template-versions) in the Amazon Elastic Compute Cloud User Guide. + /// Creates a new version of a launch template. You must specify an existing launch template, either by name or ID. You can determine whether the new version inherits parameters from a source version, and add or overwrite parameters as needed. Launch template versions are numbered in the order in which they are created. You can't specify, change, or replace the numbering of launch template versions. Launch templates are immutable; after you create a launch template, you can't modify it. Instead, you can create a new version of the launch template that includes the changes that you require. For more information, see [Modify a launch template (manage launch template versions)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#manage-launch-template-versions) in the Amazon EC2 User Guide. /// /// - Parameter CreateLaunchTemplateVersionInput : [no documentation found] /// @@ -4453,7 +4453,7 @@ extension EC2Client { /// Performs the `CreateNetworkInterface` operation on the `AmazonEC2` service. /// - /// Creates a network interface in the specified subnet. The number of IP addresses you can assign to a network interface varies by instance type. For more information, see [IP Addresses Per ENI Per Instance Type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI) in the Amazon Virtual Private Cloud User Guide. For more information about network interfaces, see [Elastic network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) in the Amazon Elastic Compute Cloud User Guide. + /// Creates a network interface in the specified subnet. The number of IP addresses you can assign to a network interface varies by instance type. For more information about network interfaces, see [Elastic network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) in the Amazon EC2 User Guide. /// /// - Parameter CreateNetworkInterfaceInput : [no documentation found] /// @@ -4638,7 +4638,7 @@ extension EC2Client { /// Performs the `CreateReplaceRootVolumeTask` operation on the `AmazonEC2` service. /// - /// Replaces the EBS-backed root volume for a running instance with a new volume that is restored to the original root volume's launch state, that is restored to a specific snapshot taken from the original root volume, or that is restored from an AMI that has the same key characteristics as that of the instance. For more information, see [Replace a root volume](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/replace-root.html) in the Amazon Elastic Compute Cloud User Guide. + /// Replaces the EBS-backed root volume for a running instance with a new volume that is restored to the original root volume's launch state, that is restored to a specific snapshot taken from the original root volume, or that is restored from an AMI that has the same key characteristics as that of the instance. For more information, see [Replace a root volume](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/replace-root.html) in the Amazon EC2 User Guide. /// /// - Parameter CreateReplaceRootVolumeTaskInput : [no documentation found] /// @@ -4685,7 +4685,7 @@ extension EC2Client { /// Performs the `CreateReservedInstancesListing` operation on the `AmazonEC2` service. /// - /// Creates a listing for Amazon EC2 Standard Reserved Instances to be sold in the Reserved Instance Marketplace. You can submit one Standard Reserved Instance listing at a time. To get a list of your Standard Reserved Instances, you can use the [DescribeReservedInstances] operation. Only Standard Reserved Instances can be sold in the Reserved Instance Marketplace. Convertible Reserved Instances cannot be sold. The Reserved Instance Marketplace matches sellers who want to resell Standard Reserved Instance capacity that they no longer need with buyers who want to purchase additional capacity. Reserved Instances bought and sold through the Reserved Instance Marketplace work like any other Reserved Instances. To sell your Standard Reserved Instances, you must first register as a seller in the Reserved Instance Marketplace. After completing the registration process, you can create a Reserved Instance Marketplace listing of some or all of your Standard Reserved Instances, and specify the upfront price to receive for them. Your Standard Reserved Instance listings then become available for purchase. To view the details of your Standard Reserved Instance listing, you can use the [DescribeReservedInstancesListings] operation. For more information, see [Reserved Instance Marketplace](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) in the Amazon EC2 User Guide. + /// Creates a listing for Amazon EC2 Standard Reserved Instances to be sold in the Reserved Instance Marketplace. You can submit one Standard Reserved Instance listing at a time. To get a list of your Standard Reserved Instances, you can use the [DescribeReservedInstances] operation. Only Standard Reserved Instances can be sold in the Reserved Instance Marketplace. Convertible Reserved Instances cannot be sold. The Reserved Instance Marketplace matches sellers who want to resell Standard Reserved Instance capacity that they no longer need with buyers who want to purchase additional capacity. Reserved Instances bought and sold through the Reserved Instance Marketplace work like any other Reserved Instances. To sell your Standard Reserved Instances, you must first register as a seller in the Reserved Instance Marketplace. After completing the registration process, you can create a Reserved Instance Marketplace listing of some or all of your Standard Reserved Instances, and specify the upfront price to receive for them. Your Standard Reserved Instance listings then become available for purchase. To view the details of your Standard Reserved Instance listing, you can use the [DescribeReservedInstancesListings] operation. For more information, see [Sell in the Reserved Instance Marketplace](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) in the Amazon EC2 User Guide. /// /// - Parameter CreateReservedInstancesListingInput : Contains the parameters for CreateReservedInstancesListing. /// @@ -4923,7 +4923,7 @@ extension EC2Client { /// Performs the `CreateSnapshot` operation on the `AmazonEC2` service. /// - /// Creates a snapshot of an EBS volume and stores it in Amazon S3. You can use snapshots for backups, to make copies of EBS volumes, and to save data before shutting down an instance. You can create snapshots of volumes in a Region and volumes on an Outpost. If you create a snapshot of a volume in a Region, the snapshot must be stored in the same Region as the volume. If you create a snapshot of a volume on an Outpost, the snapshot can be stored on the same Outpost as the volume, or in the Region for that Outpost. When a snapshot is created, any Amazon Web Services Marketplace product codes that are associated with the source volume are propagated to the snapshot. You can take a snapshot of an attached volume that is in use. However, snapshots only capture data that has been written to your Amazon EBS volume at the time the snapshot command is issued; this might exclude any data that has been cached by any applications or the operating system. If you can pause any file systems on the volume long enough to take a snapshot, your snapshot should be complete. However, if you cannot pause all file writes to the volume, you should unmount the volume from within the instance, issue the snapshot command, and then remount the volume to ensure a consistent and complete snapshot. You may remount and use your volume while the snapshot status is pending. When you create a snapshot for an EBS volume that serves as a root device, we recommend that you stop the instance before taking the snapshot. Snapshots that are taken from encrypted volumes are automatically encrypted. Volumes that are created from encrypted snapshots are also automatically encrypted. Your encrypted volumes and any associated snapshots always remain protected. You can tag your snapshots during creation. For more information, see [Tag your Amazon EC2 resources](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) in the Amazon Elastic Compute Cloud User Guide. For more information, see [Amazon Elastic Block Store](https://docs.aws.amazon.com/ebs/latest/userguide/what-is-ebs.html) and [Amazon EBS encryption](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html) in the Amazon EBS User Guide. + /// Creates a snapshot of an EBS volume and stores it in Amazon S3. You can use snapshots for backups, to make copies of EBS volumes, and to save data before shutting down an instance. You can create snapshots of volumes in a Region and volumes on an Outpost. If you create a snapshot of a volume in a Region, the snapshot must be stored in the same Region as the volume. If you create a snapshot of a volume on an Outpost, the snapshot can be stored on the same Outpost as the volume, or in the Region for that Outpost. When a snapshot is created, any Amazon Web Services Marketplace product codes that are associated with the source volume are propagated to the snapshot. You can take a snapshot of an attached volume that is in use. However, snapshots only capture data that has been written to your Amazon EBS volume at the time the snapshot command is issued; this might exclude any data that has been cached by any applications or the operating system. If you can pause any file systems on the volume long enough to take a snapshot, your snapshot should be complete. However, if you cannot pause all file writes to the volume, you should unmount the volume from within the instance, issue the snapshot command, and then remount the volume to ensure a consistent and complete snapshot. You may remount and use your volume while the snapshot status is pending. When you create a snapshot for an EBS volume that serves as a root device, we recommend that you stop the instance before taking the snapshot. Snapshots that are taken from encrypted volumes are automatically encrypted. Volumes that are created from encrypted snapshots are also automatically encrypted. Your encrypted volumes and any associated snapshots always remain protected. You can tag your snapshots during creation. For more information, see [Tag your Amazon EC2 resources](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) in the Amazon EC2 User Guide. For more information, see [Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/what-is-ebs.html) and [Amazon EBS encryption](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html) in the Amazon EBS User Guide. /// /// - Parameter CreateSnapshotInput : [no documentation found] /// @@ -5015,7 +5015,7 @@ extension EC2Client { /// Performs the `CreateSpotDatafeedSubscription` operation on the `AmazonEC2` service. /// - /// Creates a data feed for Spot Instances, enabling you to view Spot Instance usage logs. You can create one data feed per Amazon Web Services account. For more information, see [Spot Instance data feed](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html) in the Amazon EC2 User Guide for Linux Instances. + /// Creates a data feed for Spot Instances, enabling you to view Spot Instance usage logs. You can create one data feed per Amazon Web Services account. For more information, see [Spot Instance data feed](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html) in the Amazon EC2 User Guide. /// /// - Parameter CreateSpotDatafeedSubscriptionInput : Contains the parameters for CreateSpotDatafeedSubscription. /// @@ -5153,7 +5153,7 @@ extension EC2Client { /// Performs the `CreateSubnetCidrReservation` operation on the `AmazonEC2` service. /// - /// Creates a subnet CIDR reservation. For more information, see [Subnet CIDR reservations](https://docs.aws.amazon.com/vpc/latest/userguide/subnet-cidr-reservation.html) in the Amazon Virtual Private Cloud User Guide and [Assign prefixes to network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html) in the Amazon Elastic Compute Cloud User Guide. + /// Creates a subnet CIDR reservation. For more information, see [Subnet CIDR reservations](https://docs.aws.amazon.com/vpc/latest/userguide/subnet-cidr-reservation.html) in the Amazon VPC User Guide and [Assign prefixes to network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html) in the Amazon EC2 User Guide. /// /// - Parameter CreateSubnetCidrReservationInput : [no documentation found] /// @@ -5525,7 +5525,7 @@ extension EC2Client { /// Performs the `CreateTransitGatewayConnectPeer` operation on the `AmazonEC2` service. /// - /// Creates a Connect peer for a specified transit gateway Connect attachment between a transit gateway and an appliance. The peer address and transit gateway address must be the same IP address family (IPv4 or IPv6). For more information, see [Connect peers](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html#tgw-connect-peer) in the Transit Gateways Guide. + /// Creates a Connect peer for a specified transit gateway Connect attachment between a transit gateway and an appliance. The peer address and transit gateway address must be the same IP address family (IPv4 or IPv6). For more information, see [Connect peers](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html#tgw-connect-peer) in the Amazon Web Services Transit Gateways Guide. /// /// - Parameter CreateTransitGatewayConnectPeerInput : [no documentation found] /// @@ -6127,7 +6127,7 @@ extension EC2Client { /// Performs the `CreateVolume` operation on the `AmazonEC2` service. /// - /// Creates an EBS volume that can be attached to an instance in the same Availability Zone. You can create a new empty volume or restore a volume from an EBS snapshot. Any Amazon Web Services Marketplace product codes from the snapshot are propagated to the volume. You can create encrypted volumes. Encrypted volumes must be attached to instances that support Amazon EBS encryption. Volumes that are created from encrypted snapshots are also automatically encrypted. For more information, see [Amazon EBS encryption](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html) in the Amazon EBS User Guide. You can tag your volumes during creation. For more information, see [Tag your Amazon EC2 resources](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) in the Amazon Elastic Compute Cloud User Guide. For more information, see [Create an Amazon EBS volume](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-creating-volume.html) in the Amazon EBS User Guide. + /// Creates an EBS volume that can be attached to an instance in the same Availability Zone. You can create a new empty volume or restore a volume from an EBS snapshot. Any Amazon Web Services Marketplace product codes from the snapshot are propagated to the volume. You can create encrypted volumes. Encrypted volumes must be attached to instances that support Amazon EBS encryption. Volumes that are created from encrypted snapshots are also automatically encrypted. For more information, see [Amazon EBS encryption](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html) in the Amazon EBS User Guide. You can tag your volumes during creation. For more information, see [Tag your Amazon EC2 resources](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) in the Amazon EC2 User Guide. For more information, see [Create an Amazon EBS volume](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-creating-volume.html) in the Amazon EBS User Guide. /// /// - Parameter CreateVolumeInput : [no documentation found] /// @@ -6266,7 +6266,7 @@ extension EC2Client { /// Performs the `CreateVpcEndpointConnectionNotification` operation on the `AmazonEC2` service. /// - /// Creates a connection notification for a specified VPC endpoint or VPC endpoint service. A connection notification notifies you of specific endpoint events. You must create an SNS topic to receive notifications. For more information, see [Create a Topic](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) in the Amazon Simple Notification Service Developer Guide. You can create a connection notification for interface endpoints only. + /// Creates a connection notification for a specified VPC endpoint or VPC endpoint service. A connection notification notifies you of specific endpoint events. You must create an SNS topic to receive notifications. For more information, see [Creating an Amazon SNS topic](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) in the Amazon SNS Developer Guide. You can create a connection notification for interface endpoints only. /// /// - Parameter CreateVpcEndpointConnectionNotificationInput : [no documentation found] /// @@ -6365,7 +6365,7 @@ extension EC2Client { /// Performs the `CreateVpcPeeringConnection` operation on the `AmazonEC2` service. /// - /// Requests a VPC peering connection between two VPCs: a requester VPC that you own and an accepter VPC with which to create the connection. The accepter VPC can belong to another Amazon Web Services account and can be in a different Region to the requester VPC. The requester VPC and accepter VPC cannot have overlapping CIDR blocks. Limitations and rules apply to a VPC peering connection. For more information, see the [limitations](https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-basics.html#vpc-peering-limitations) section in the VPC Peering Guide. The owner of the accepter VPC must accept the peering request to activate the peering connection. The VPC peering connection request expires after 7 days, after which it cannot be accepted or rejected. If you create a VPC peering connection request between VPCs with overlapping CIDR blocks, the VPC peering connection has a status of failed. + /// Requests a VPC peering connection between two VPCs: a requester VPC that you own and an accepter VPC with which to create the connection. The accepter VPC can belong to another Amazon Web Services account and can be in a different Region to the requester VPC. The requester VPC and accepter VPC cannot have overlapping CIDR blocks. Limitations and rules apply to a VPC peering connection. For more information, see the [VPC peering limitations](https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-basics.html#vpc-peering-limitations) in the VPC Peering Guide. The owner of the accepter VPC must accept the peering request to activate the peering connection. The VPC peering connection request expires after 7 days, after which it cannot be accepted or rejected. If you create a VPC peering connection request between VPCs with overlapping CIDR blocks, the VPC peering connection has a status of failed. /// /// - Parameter CreateVpcPeeringConnectionInput : [no documentation found] /// @@ -7480,7 +7480,7 @@ extension EC2Client { /// Performs the `DeleteLaunchTemplateVersions` operation on the `AmazonEC2` service. /// - /// Deletes one or more versions of a launch template. You can't delete the default version of a launch template; you must first assign a different version as the default. If the default version is the only version for the launch template, you must delete the entire launch template using [DeleteLaunchTemplate]. You can delete up to 200 launch template versions in a single request. To delete more than 200 versions in a single request, use [DeleteLaunchTemplate], which deletes the launch template and all of its versions. For more information, see [Delete a launch template version](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-launch-template-versions.html#delete-launch-template-version) in the EC2 User Guide. + /// Deletes one or more versions of a launch template. You can't delete the default version of a launch template; you must first assign a different version as the default. If the default version is the only version for the launch template, you must delete the entire launch template using [DeleteLaunchTemplate]. You can delete up to 200 launch template versions in a single request. To delete more than 200 versions in a single request, use [DeleteLaunchTemplate], which deletes the launch template and all of its versions. For more information, see [Delete a launch template version](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-launch-template-versions.html#delete-launch-template-version) in the Amazon EC2 User Guide. /// /// - Parameter DeleteLaunchTemplateVersionsInput : [no documentation found] /// @@ -10397,7 +10397,7 @@ extension EC2Client { /// Performs the `DescribeAddressTransfers` operation on the `AmazonEC2` service. /// - /// Describes an Elastic IP address transfer. For more information, see [Transfer Elastic IP addresses](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro) in the Amazon Virtual Private Cloud User Guide. When you transfer an Elastic IP address, there is a two-step handshake between the source and transfer Amazon Web Services accounts. When the source account starts the transfer, the transfer account has seven days to accept the Elastic IP address transfer. During those seven days, the source account can view the pending transfer by using this action. After seven days, the transfer expires and ownership of the Elastic IP address returns to the source account. Accepted transfers are visible to the source account for three days after the transfers have been accepted. + /// Describes an Elastic IP address transfer. For more information, see [Transfer Elastic IP addresses](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro) in the Amazon VPC User Guide. When you transfer an Elastic IP address, there is a two-step handshake between the source and transfer Amazon Web Services accounts. When the source account starts the transfer, the transfer account has seven days to accept the Elastic IP address transfer. During those seven days, the source account can view the pending transfer by using this action. After seven days, the transfer expires and ownership of the Elastic IP address returns to the source account. Accepted transfers are visible to the source account for three days after the transfers have been accepted. /// /// - Parameter DescribeAddressTransfersInput : [no documentation found] /// @@ -10581,7 +10581,7 @@ extension EC2Client { /// Performs the `DescribeAvailabilityZones` operation on the `AmazonEC2` service. /// - /// Describes the Availability Zones, Local Zones, and Wavelength Zones that are available to you. If there is an event impacting a zone, you can use this request to view the state and any provided messages for that zone. For more information about Availability Zones, Local Zones, and Wavelength Zones, see [Regions and zones](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html) in the Amazon Elastic Compute Cloud User Guide. The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order. + /// Describes the Availability Zones, Local Zones, and Wavelength Zones that are available to you. If there is an event impacting a zone, you can use this request to view the state and any provided messages for that zone. For more information about Availability Zones, Local Zones, and Wavelength Zones, see [Regions and zones](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html) in the Amazon EC2 User Guide. The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order. /// /// - Parameter DescribeAvailabilityZonesInput : [no documentation found] /// @@ -10949,7 +10949,7 @@ extension EC2Client { /// Performs the `DescribeClassicLinkInstances` operation on the `AmazonEC2` service. /// - /// This action is deprecated. Describes one or more of your linked EC2-Classic instances. This request only returns information about EC2-Classic instances linked to a VPC through ClassicLink. You cannot use this request to return information about other instances. + /// This action is deprecated. Describes your linked EC2-Classic instances. This request only returns information about EC2-Classic instances linked to a VPC through ClassicLink. You cannot use this request to return information about other instances. /// /// - Parameter DescribeClassicLinkInstancesInput : [no documentation found] /// @@ -11363,7 +11363,7 @@ extension EC2Client { /// Performs the `DescribeDhcpOptions` operation on the `AmazonEC2` service. /// - /// Describes one or more of your DHCP options sets. For more information, see [DHCP options sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon VPC User Guide. + /// Describes your DHCP option sets. The default is to describe all your DHCP option sets. Alternatively, you can specify specific DHCP option set IDs or filter the results to include only the DHCP option sets that match specific criteria. For more information, see [DHCP option sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon VPC User Guide. /// /// - Parameter DescribeDhcpOptionsInput : [no documentation found] /// @@ -11409,7 +11409,7 @@ extension EC2Client { /// Performs the `DescribeEgressOnlyInternetGateways` operation on the `AmazonEC2` service. /// - /// Describes one or more of your egress-only internet gateways. + /// Describes your egress-only internet gateways. The default is to describe all your egress-only internet gateways. Alternatively, you can specify specific egress-only internet gateway IDs or filter the results to include only the egress-only internet gateways that match specific criteria. /// /// - Parameter DescribeEgressOnlyInternetGatewaysInput : [no documentation found] /// @@ -11455,7 +11455,7 @@ extension EC2Client { /// Performs the `DescribeElasticGpus` operation on the `AmazonEC2` service. /// - /// Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads that require graphics acceleration, we recommend that you use Amazon EC2 G4ad, G4dn, or G5 instances. Describes the Elastic Graphics accelerator associated with your instances. For more information about Elastic Graphics, see [Amazon Elastic Graphics](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html). + /// Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads that require graphics acceleration, we recommend that you use Amazon EC2 G4, G5, or G6 instances. Describes the Elastic Graphics accelerator associated with your instances. /// /// - Parameter DescribeElasticGpusInput : [no documentation found] /// @@ -12913,7 +12913,7 @@ extension EC2Client { /// Performs the `DescribeInternetGateways` operation on the `AmazonEC2` service. /// - /// Describes one or more of your internet gateways. + /// Describes your internet gateways. The default is to describe all your internet gateways. Alternatively, you can specify specific internet gateway IDs or filter the results to include only the internet gateways that match specific criteria. /// /// - Parameter DescribeInternetGatewaysInput : [no documentation found] /// @@ -13879,7 +13879,7 @@ extension EC2Client { /// Performs the `DescribeNatGateways` operation on the `AmazonEC2` service. /// - /// Describes one or more of your NAT gateways. + /// Describes your NAT gateways. The default is to describe all your NAT gateways. Alternatively, you can specify specific NAT gateway IDs or filter the results to include only the NAT gateways that match specific criteria. /// /// - Parameter DescribeNatGatewaysInput : [no documentation found] /// @@ -13925,7 +13925,7 @@ extension EC2Client { /// Performs the `DescribeNetworkAcls` operation on the `AmazonEC2` service. /// - /// Describes one or more of your network ACLs. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) in the Amazon VPC User Guide. + /// Describes your network ACLs. The default is to describe all your network ACLs. Alternatively, you can specify specific network ACL IDs or filter the results to include only the network ACLs that match specific criteria. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) in the Amazon VPC User Guide. /// /// - Parameter DescribeNetworkAclsInput : [no documentation found] /// @@ -14477,7 +14477,7 @@ extension EC2Client { /// Performs the `DescribeRegions` operation on the `AmazonEC2` service. /// - /// Describes the Regions that are enabled for your account, or all Regions. For a list of the Regions supported by Amazon EC2, see [ Amazon Elastic Compute Cloud endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/ec2-service.html). For information about enabling and disabling Regions for your account, see [Managing Amazon Web Services Regions](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html) in the Amazon Web Services General Reference. The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order. + /// Describes the Regions that are enabled for your account, or all Regions. For a list of the Regions supported by Amazon EC2, see [Amazon EC2 service endpoints](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-endpoints.html). For information about enabling and disabling Regions for your account, see [Specify which Amazon Web Services Regions your account can use](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html) in the Amazon Web Services Account Management Reference Guide. The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order. /// /// - Parameter DescribeRegionsInput : [no documentation found] /// @@ -14523,7 +14523,7 @@ extension EC2Client { /// Performs the `DescribeReplaceRootVolumeTasks` operation on the `AmazonEC2` service. /// - /// Describes a root volume replacement task. For more information, see [Replace a root volume](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/replace-root.html) in the Amazon Elastic Compute Cloud User Guide. + /// Describes a root volume replacement task. For more information, see [Replace a root volume](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/replace-root.html) in the Amazon EC2 User Guide. /// /// - Parameter DescribeReplaceRootVolumeTasksInput : [no documentation found] /// @@ -14615,7 +14615,7 @@ extension EC2Client { /// Performs the `DescribeReservedInstancesListings` operation on the `AmazonEC2` service. /// - /// Describes your account's Reserved Instance listings in the Reserved Instance Marketplace. The Reserved Instance Marketplace matches sellers who want to resell Reserved Instance capacity that they no longer need with buyers who want to purchase additional capacity. Reserved Instances bought and sold through the Reserved Instance Marketplace work like any other Reserved Instances. As a seller, you choose to list some or all of your Reserved Instances, and you specify the upfront price to receive for them. Your Reserved Instances are then listed in the Reserved Instance Marketplace and are available for purchase. As a buyer, you specify the configuration of the Reserved Instance to purchase, and the Marketplace matches what you're searching for with what's available. The Marketplace first sells the lowest priced Reserved Instances to you, and continues to sell available Reserved Instance listings to you until your demand is met. You are charged based on the total price of all of the listings that you purchase. For more information, see [Reserved Instance Marketplace](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) in the Amazon EC2 User Guide. The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order. + /// Describes your account's Reserved Instance listings in the Reserved Instance Marketplace. The Reserved Instance Marketplace matches sellers who want to resell Reserved Instance capacity that they no longer need with buyers who want to purchase additional capacity. Reserved Instances bought and sold through the Reserved Instance Marketplace work like any other Reserved Instances. As a seller, you choose to list some or all of your Reserved Instances, and you specify the upfront price to receive for them. Your Reserved Instances are then listed in the Reserved Instance Marketplace and are available for purchase. As a buyer, you specify the configuration of the Reserved Instance to purchase, and the Marketplace matches what you're searching for with what's available. The Marketplace first sells the lowest priced Reserved Instances to you, and continues to sell available Reserved Instance listings to you until your demand is met. You are charged based on the total price of all of the listings that you purchase. For more information, see [Sell in the Reserved Instance Marketplace](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) in the Amazon EC2 User Guide. The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order. /// /// - Parameter DescribeReservedInstancesListingsInput : Contains the parameters for DescribeReservedInstancesListings. /// @@ -14661,7 +14661,7 @@ extension EC2Client { /// Performs the `DescribeReservedInstancesModifications` operation on the `AmazonEC2` service. /// - /// Describes the modifications made to your Reserved Instances. If no parameter is specified, information about all your Reserved Instances modification requests is returned. If a modification ID is specified, only information about the specific modification is returned. For more information, see [Modifying Reserved Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html) in the Amazon EC2 User Guide. The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order. + /// Describes the modifications made to your Reserved Instances. If no parameter is specified, information about all your Reserved Instances modification requests is returned. If a modification ID is specified, only information about the specific modification is returned. For more information, see [Modify Reserved Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html) in the Amazon EC2 User Guide. The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order. /// /// - Parameter DescribeReservedInstancesModificationsInput : Contains the parameters for DescribeReservedInstancesModifications. /// @@ -14707,7 +14707,7 @@ extension EC2Client { /// Performs the `DescribeReservedInstancesOfferings` operation on the `AmazonEC2` service. /// - /// Describes Reserved Instance offerings that are available for purchase. With Reserved Instances, you purchase the right to launch instances for a period of time. During that time period, you do not receive insufficient capacity errors, and you pay a lower usage rate than the rate charged for On-Demand instances for the actual time used. If you have listed your own Reserved Instances for sale in the Reserved Instance Marketplace, they will be excluded from these results. This is to ensure that you do not purchase your own Reserved Instances. For more information, see [Reserved Instance Marketplace](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) in the Amazon EC2 User Guide. The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order. + /// Describes Reserved Instance offerings that are available for purchase. With Reserved Instances, you purchase the right to launch instances for a period of time. During that time period, you do not receive insufficient capacity errors, and you pay a lower usage rate than the rate charged for On-Demand instances for the actual time used. If you have listed your own Reserved Instances for sale in the Reserved Instance Marketplace, they will be excluded from these results. This is to ensure that you do not purchase your own Reserved Instances. For more information, see [Sell in the Reserved Instance Marketplace](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) in the Amazon EC2 User Guide. The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order. /// /// - Parameter DescribeReservedInstancesOfferingsInput : Contains the parameters for DescribeReservedInstancesOfferings. /// @@ -14753,7 +14753,7 @@ extension EC2Client { /// Performs the `DescribeRouteTables` operation on the `AmazonEC2` service. /// - /// Describes one or more of your route tables. Each subnet in your VPC must be associated with a route table. If a subnet is not explicitly associated with any route table, it is implicitly associated with the main route table. This command does not return the subnet ID for implicit associations. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon VPC User Guide. + /// Describes your route tables. The default is to describe all your route tables. Alternatively, you can specify specific route table IDs or filter the results to include only the route tables that match specific criteria. Each subnet in your VPC must be associated with a route table. If a subnet is not explicitly associated with any route table, it is implicitly associated with the main route table. This command does not return the subnet ID for implicit associations. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon VPC User Guide. /// /// - Parameter DescribeRouteTablesInput : [no documentation found] /// @@ -15176,7 +15176,7 @@ extension EC2Client { /// Performs the `DescribeSpotDatafeedSubscription` operation on the `AmazonEC2` service. /// - /// Describes the data feed for Spot Instances. For more information, see [Spot Instance data feed](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html) in the Amazon EC2 User Guide for Linux Instances. + /// Describes the data feed for Spot Instances. For more information, see [Spot Instance data feed](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html) in the Amazon EC2 User Guide. /// /// - Parameter DescribeSpotDatafeedSubscriptionInput : Contains the parameters for DescribeSpotDatafeedSubscription. /// @@ -15406,7 +15406,7 @@ extension EC2Client { /// Performs the `DescribeSpotPriceHistory` operation on the `AmazonEC2` service. /// - /// Describes the Spot price history. For more information, see [Spot Instance pricing history](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-history.html) in the Amazon EC2 User Guide for Linux Instances. When you specify a start and end time, the operation returns the prices of the instance types within that time range. It also returns the last price change before the start time, which is the effective price as of the start time. + /// Describes the Spot price history. For more information, see [Spot Instance pricing history](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-history.html) in the Amazon EC2 User Guide. When you specify a start and end time, the operation returns the prices of the instance types within that time range. It also returns the last price change before the start time, which is the effective price as of the start time. /// /// - Parameter DescribeSpotPriceHistoryInput : Contains the parameters for DescribeSpotPriceHistory. /// @@ -15544,7 +15544,7 @@ extension EC2Client { /// Performs the `DescribeSubnets` operation on the `AmazonEC2` service. /// - /// Describes one or more of your subnets. For more information, see [Subnets](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html) in the Amazon VPC User Guide. + /// Describes your subnets. The default is to describe all your subnets. Alternatively, you can specify specific subnet IDs or filter the results to include only the subnets that match specific criteria. For more information, see [Subnets](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html) in the Amazon VPC User Guide. /// /// - Parameter DescribeSubnetsInput : [no documentation found] /// @@ -15634,6 +15634,52 @@ extension EC2Client { return try await op.execute(input: input) } + /// Performs the `DescribeTrafficMirrorFilterRules` operation on the `AmazonEC2` service. + /// + /// Describe traffic mirror filters that determine the traffic that is mirrored. + /// + /// - Parameter DescribeTrafficMirrorFilterRulesInput : [no documentation found] + /// + /// - Returns: `DescribeTrafficMirrorFilterRulesOutput` : [no documentation found] + public func describeTrafficMirrorFilterRules(input: DescribeTrafficMirrorFilterRulesInput) async throws -> DescribeTrafficMirrorFilterRulesOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "describeTrafficMirrorFilterRules") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "ec2") + .withSigningRegion(value: config.signingRegion) + .build() + let builder = ClientRuntime.OrchestratorBuilder() + builder.interceptors.add(ClientRuntime.URLPathMiddleware(DescribeTrafficMirrorFilterRulesInput.urlPathProvider(_:))) + builder.interceptors.add(ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + builder.applyEndpoint(AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + builder.interceptors.add(AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + builder.selectAuthScheme(ClientRuntime.AuthSchemeMiddleware()) + builder.serialize(ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: DescribeTrafficMirrorFilterRulesInput.write(value:to:))) + builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/x-www-form-urlencoded")) + builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) + builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) + builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) + builder.applySigner(ClientRuntime.SignerMiddleware()) + builder.deserialize(ClientRuntime.DeserializeMiddleware(DescribeTrafficMirrorFilterRulesOutput.httpOutput(from:), DescribeTrafficMirrorFilterRulesOutputError.httpError(from:))) + builder.interceptors.add(ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let op = builder.attributes(context) + .executeRequest(client) + .build() + return try await op.execute(input: input) + } + /// Performs the `DescribeTrafficMirrorFilters` operation on the `AmazonEC2` service. /// /// Describes one or more Traffic Mirror filters. @@ -16648,7 +16694,7 @@ extension EC2Client { /// Performs the `DescribeVolumesModifications` operation on the `AmazonEC2` service. /// - /// Describes the most recent volume modification request for the specified EBS volumes. If a volume has never been modified, some information in the output will be null. If a volume has been modified more than once, the output includes only the most recent modification request. You can also use CloudWatch Events to check the status of a modification to an EBS volume. For information about CloudWatch Events, see the [Amazon CloudWatch Events User Guide](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/). For more information, see [Monitor the progress of volume modifications](https://docs.aws.amazon.com/ebs/latest/userguide/monitoring-volume-modifications.html) in the Amazon EBS User Guide. + /// Describes the most recent volume modification request for the specified EBS volumes. If a volume has never been modified, some information in the output will be null. If a volume has been modified more than once, the output includes only the most recent modification request. For more information, see [ Monitor the progress of volume modifications](https://docs.aws.amazon.com/ebs/latest/userguide/monitoring-volume-modifications.html) in the Amazon EBS User Guide. /// /// - Parameter DescribeVolumesModificationsInput : [no documentation found] /// @@ -17062,7 +17108,7 @@ extension EC2Client { /// Performs the `DescribeVpcEndpoints` operation on the `AmazonEC2` service. /// - /// Describes your VPC endpoints. + /// Describes your VPC endpoints. The default is to describe all your VPC endpoints. Alternatively, you can specify specific VPC endpoint IDs or filter the results to include only the VPC endpoints that match specific criteria. /// /// - Parameter DescribeVpcEndpointsInput : [no documentation found] /// @@ -17108,7 +17154,7 @@ extension EC2Client { /// Performs the `DescribeVpcPeeringConnections` operation on the `AmazonEC2` service. /// - /// Describes one or more of your VPC peering connections. + /// Describes your VPC peering connections. The default is to describe all your VPC peering connections. Alternatively, you can specify specific VPC peering connection IDs or filter the results to include only the VPC peering connections that match specific criteria. /// /// - Parameter DescribeVpcPeeringConnectionsInput : [no documentation found] /// @@ -17154,7 +17200,7 @@ extension EC2Client { /// Performs the `DescribeVpcs` operation on the `AmazonEC2` service. /// - /// Describes one or more of your VPCs. + /// Describes your VPCs. The default is to describe all your VPCs. Alternatively, you can specify specific VPC IDs or filter the results to include only the VPCs that match specific criteria. /// /// - Parameter DescribeVpcsInput : [no documentation found] /// @@ -17569,7 +17615,7 @@ extension EC2Client { /// Performs the `DisableAddressTransfer` operation on the `AmazonEC2` service. /// - /// Disables Elastic IP address transfer. For more information, see [Transfer Elastic IP addresses](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro) in the Amazon Virtual Private Cloud User Guide. + /// Disables Elastic IP address transfer. For more information, see [Transfer Elastic IP addresses](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro) in the Amazon VPC User Guide. /// /// - Parameter DisableAddressTransferInput : [no documentation found] /// @@ -19004,7 +19050,7 @@ extension EC2Client { /// Performs the `EnableAddressTransfer` operation on the `AmazonEC2` service. /// - /// Enables Elastic IP address transfer. For more information, see [Transfer Elastic IP addresses](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro) in the Amazon Virtual Private Cloud User Guide. + /// Enables Elastic IP address transfer. For more information, see [Transfer Elastic IP addresses](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro) in the Amazon VPC User Guide. /// /// - Parameter EnableAddressTransferInput : [no documentation found] /// @@ -19971,7 +20017,7 @@ extension EC2Client { /// Performs the `ExportTransitGatewayRoutes` operation on the `AmazonEC2` service. /// - /// Exports routes from the specified transit gateway route table to the specified S3 bucket. By default, all routes are exported. Alternatively, you can filter by CIDR range. The routes are saved to the specified bucket in a JSON file. For more information, see [Export Route Tables to Amazon S3](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-route-tables.html#tgw-export-route-tables) in Transit Gateways. + /// Exports routes from the specified transit gateway route table to the specified S3 bucket. By default, all routes are exported. Alternatively, you can filter by CIDR range. The routes are saved to the specified bucket in a JSON file. For more information, see [Export route tables to Amazon S3](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-route-tables.html#tgw-export-route-tables) in the Amazon Web Services Transit Gateways Guide. /// /// - Parameter ExportTransitGatewayRoutesInput : [no documentation found] /// @@ -21040,7 +21086,7 @@ extension EC2Client { /// Performs the `GetIpamPoolAllocations` operation on the `AmazonEC2` service. /// - /// Get a list of all the CIDR allocations in an IPAM pool. The Region you use should be the IPAM pool locale. The locale is the Amazon Web Services Region where this IPAM pool is available for allocations. If you use this action after [AllocateIpamPoolCidr](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AllocateIpamPoolCidr.html) or [ReleaseIpamPoolAllocation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ReleaseIpamPoolAllocation.html), note that all EC2 API actions follow an [eventual consistency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/query-api-troubleshooting.html#eventual-consistency) model. + /// Get a list of all the CIDR allocations in an IPAM pool. The Region you use should be the IPAM pool locale. The locale is the Amazon Web Services Region where this IPAM pool is available for allocations. If you use this action after [AllocateIpamPoolCidr](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AllocateIpamPoolCidr.html) or [ReleaseIpamPoolAllocation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ReleaseIpamPoolAllocation.html), note that all EC2 API actions follow an [eventual consistency](https://docs.aws.amazon.com/ec2/latest/devguide/eventual-consistency.html) model. /// /// - Parameter GetIpamPoolAllocationsInput : [no documentation found] /// @@ -21408,7 +21454,7 @@ extension EC2Client { /// Performs the `GetPasswordData` operation on the `AmazonEC2` service. /// - /// Retrieves the encrypted administrator password for a running Windows instance. The Windows password is generated at boot by the EC2Config service or EC2Launch scripts (Windows Server 2016 and later). This usually only happens the first time an instance is launched. For more information, see [EC2Config](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/UsingConfig_WinAMI.html) and [EC2Launch](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2launch.html) in the Amazon EC2 User Guide. For the EC2Config service, the password is not generated for rebundled AMIs unless Ec2SetPassword is enabled before bundling. The password is encrypted using the key pair that you specified when you launched the instance. You must provide the corresponding key pair file. When you launch an instance, password generation and encryption may take a few minutes. If you try to retrieve the password before it's available, the output returns an empty string. We recommend that you wait up to 15 minutes after launching an instance before trying to retrieve the generated password. + /// Retrieves the encrypted administrator password for a running Windows instance. The Windows password is generated at boot by the EC2Config service or EC2Launch scripts (Windows Server 2016 and later). This usually only happens the first time an instance is launched. For more information, see [EC2Config](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UsingConfig_WinAMI.html) and [EC2Launch](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2launch.html) in the Amazon EC2 User Guide. For the EC2Config service, the password is not generated for rebundled AMIs unless Ec2SetPassword is enabled before bundling. The password is encrypted using the key pair that you specified when you launched the instance. You must provide the corresponding key pair file. When you launch an instance, password generation and encryption may take a few minutes. If you try to retrieve the password before it's available, the output returns an empty string. We recommend that you wait up to 15 minutes after launching an instance before trying to retrieve the generated password. /// /// - Parameter GetPasswordDataInput : [no documentation found] /// @@ -22748,7 +22794,7 @@ extension EC2Client { /// Performs the `ModifyAvailabilityZoneGroup` operation on the `AmazonEC2` service. /// - /// Changes the opt-in status of the Local Zone and Wavelength Zone group for your account. Use [ DescribeAvailabilityZones](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html) to view the value for GroupName. + /// Changes the opt-in status of the specified zone group for your account. /// /// - Parameter ModifyAvailabilityZoneGroupInput : [no documentation found] /// @@ -24185,7 +24231,7 @@ extension EC2Client { /// Performs the `ModifyReservedInstances` operation on the `AmazonEC2` service. /// - /// Modifies the configuration of your Reserved Instances, such as the Availability Zone, instance count, or instance type. The Reserved Instances to be modified must be identical, except for Availability Zone, network platform, and instance type. For more information, see [Modifying Reserved Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html) in the Amazon EC2 User Guide. + /// Modifies the configuration of your Reserved Instances, such as the Availability Zone, instance count, or instance type. The Reserved Instances to be modified must be identical, except for Availability Zone, network platform, and instance type. For more information, see [Modify Reserved Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html) in the Amazon EC2 User Guide. /// /// - Parameter ModifyReservedInstancesInput : Contains the parameters for ModifyReservedInstances. /// @@ -25077,7 +25123,7 @@ extension EC2Client { /// Performs the `ModifyVolume` operation on the `AmazonEC2` service. /// - /// You can modify several parameters of an existing EBS volume, including volume size, volume type, and IOPS capacity. If your EBS volume is attached to a current-generation EC2 instance type, you might be able to apply these changes without stopping the instance or detaching the volume from it. For more information about modifying EBS volumes, see [Amazon EBS Elastic Volumes](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modify-volume.html) in the Amazon EBS User Guide. When you complete a resize operation on your volume, you need to extend the volume's file-system size to take advantage of the new storage capacity. For more information, see [Extend the file system](https://docs.aws.amazon.com/ebs/latest/userguide/recognize-expanded-volume-linux.html). You can use CloudWatch Events to check the status of a modification to an EBS volume. For information about CloudWatch Events, see the [Amazon CloudWatch Events User Guide](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/). You can also track the status of a modification using [DescribeVolumesModifications]. For information about tracking status changes using either method, see [Monitor the progress of volume modifications](https://docs.aws.amazon.com/ebs/latest/userguide/monitoring-volume-modifications.html). With previous-generation instance types, resizing an EBS volume might require detaching and reattaching the volume or stopping and restarting the instance. After modifying a volume, you must wait at least six hours and ensure that the volume is in the in-use or available state before you can modify the same volume. This is sometimes referred to as a cooldown period. + /// You can modify several parameters of an existing EBS volume, including volume size, volume type, and IOPS capacity. If your EBS volume is attached to a current-generation EC2 instance type, you might be able to apply these changes without stopping the instance or detaching the volume from it. For more information about modifying EBS volumes, see [Amazon EBS Elastic Volumes](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modify-volume.html) in the Amazon EBS User Guide. When you complete a resize operation on your volume, you need to extend the volume's file-system size to take advantage of the new storage capacity. For more information, see [Extend the file system](https://docs.aws.amazon.com/ebs/latest/userguide/recognize-expanded-volume-linux.html). For more information, see [Monitor the progress of volume modifications](https://docs.aws.amazon.com/ebs/latest/userguide/monitoring-volume-modifications.html) in the Amazon EBS User Guide. With previous-generation instance types, resizing an EBS volume might require detaching and reattaching the volume or stopping and restarting the instance. After modifying a volume, you must wait at least six hours and ensure that the volume is in the in-use or available state before you can modify the same volume. This is sometimes referred to as a cooldown period. /// /// - Parameter ModifyVolumeInput : [no documentation found] /// @@ -25870,7 +25916,7 @@ extension EC2Client { /// Performs the `ProvisionByoipCidr` operation on the `AmazonEC2` service. /// - /// Provisions an IPv4 or IPv6 address range for use with your Amazon Web Services resources through bring your own IP addresses (BYOIP) and creates a corresponding address pool. After the address range is provisioned, it is ready to be advertised using [AdvertiseByoipCidr]. Amazon Web Services verifies that you own the address range and are authorized to advertise it. You must ensure that the address range is registered to you and that you created an RPKI ROA to authorize Amazon ASNs 16509 and 14618 to advertise the address range. For more information, see [Bring your own IP addresses (BYOIP)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html) in the Amazon Elastic Compute Cloud User Guide. Provisioning an address range is an asynchronous operation, so the call returns immediately, but the address range is not ready to use until its status changes from pending-provision to provisioned. To monitor the status of an address range, use [DescribeByoipCidrs]. To allocate an Elastic IP address from your IPv4 address pool, use [AllocateAddress] with either the specific address from the address pool or the ID of the address pool. + /// Provisions an IPv4 or IPv6 address range for use with your Amazon Web Services resources through bring your own IP addresses (BYOIP) and creates a corresponding address pool. After the address range is provisioned, it is ready to be advertised using [AdvertiseByoipCidr]. Amazon Web Services verifies that you own the address range and are authorized to advertise it. You must ensure that the address range is registered to you and that you created an RPKI ROA to authorize Amazon ASNs 16509 and 14618 to advertise the address range. For more information, see [Bring your own IP addresses (BYOIP)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html) in the Amazon EC2 User Guide. Provisioning an address range is an asynchronous operation, so the call returns immediately, but the address range is not ready to use until its status changes from pending-provision to provisioned. To monitor the status of an address range, use [DescribeByoipCidrs]. To allocate an Elastic IP address from your IPv4 address pool, use [AllocateAddress] with either the specific address from the address pool or the ID of the address pool. /// /// - Parameter ProvisionByoipCidrInput : [no documentation found] /// @@ -26147,7 +26193,7 @@ extension EC2Client { /// Performs the `PurchaseReservedInstancesOffering` operation on the `AmazonEC2` service. /// - /// Purchases a Reserved Instance for use with your account. With Reserved Instances, you pay a lower hourly rate compared to On-Demand instance pricing. Use [DescribeReservedInstancesOfferings] to get a list of Reserved Instance offerings that match your specifications. After you've purchased a Reserved Instance, you can check for your new Reserved Instance with [DescribeReservedInstances]. To queue a purchase for a future date and time, specify a purchase time. If you do not specify a purchase time, the default is the current time. For more information, see [Reserved Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html) and [Reserved Instance Marketplace](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) in the Amazon EC2 User Guide. + /// Purchases a Reserved Instance for use with your account. With Reserved Instances, you pay a lower hourly rate compared to On-Demand instance pricing. Use [DescribeReservedInstancesOfferings] to get a list of Reserved Instance offerings that match your specifications. After you've purchased a Reserved Instance, you can check for your new Reserved Instance with [DescribeReservedInstances]. To queue a purchase for a future date and time, specify a purchase time. If you do not specify a purchase time, the default is the current time. For more information, see [Reserved Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html) and [Sell in the Reserved Instance Marketplace](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) in the Amazon EC2 User Guide. /// /// - Parameter PurchaseReservedInstancesOfferingInput : Contains the parameters for PurchaseReservedInstancesOffering. /// @@ -26387,7 +26433,7 @@ extension EC2Client { /// Performs the `RegisterTransitGatewayMulticastGroupMembers` operation on the `AmazonEC2` service. /// - /// Registers members (network interfaces) with the transit gateway multicast group. A member is a network interface associated with a supported EC2 instance that receives multicast traffic. For information about supported instances, see [Multicast Consideration](https://docs.aws.amazon.com/vpc/latest/tgw/transit-gateway-limits.html#multicast-limits) in Amazon VPC Transit Gateways. After you add the members, use [SearchTransitGatewayMulticastGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SearchTransitGatewayMulticastGroups.html) to verify that the members were added to the transit gateway multicast group. + /// Registers members (network interfaces) with the transit gateway multicast group. A member is a network interface associated with a supported EC2 instance that receives multicast traffic. For more information, see [Multicast on transit gateways](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-multicast-overview.html) in the Amazon Web Services Transit Gateways Guide. After you add the members, use [SearchTransitGatewayMulticastGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SearchTransitGatewayMulticastGroups.html) to verify that the members were added to the transit gateway multicast group. /// /// - Parameter RegisterTransitGatewayMulticastGroupMembersInput : [no documentation found] /// @@ -26433,7 +26479,7 @@ extension EC2Client { /// Performs the `RegisterTransitGatewayMulticastGroupSources` operation on the `AmazonEC2` service. /// - /// Registers sources (network interfaces) with the specified transit gateway multicast group. A multicast source is a network interface attached to a supported instance that sends multicast traffic. For information about supported instances, see [Multicast Considerations](https://docs.aws.amazon.com/vpc/latest/tgw/transit-gateway-limits.html#multicast-limits) in Amazon VPC Transit Gateways. After you add the source, use [SearchTransitGatewayMulticastGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SearchTransitGatewayMulticastGroups.html) to verify that the source was added to the multicast group. + /// Registers sources (network interfaces) with the specified transit gateway multicast group. A multicast source is a network interface attached to a supported instance that sends multicast traffic. For more information about supported instances, see [Multicast on transit gateways](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-multicast-overview.html) in the Amazon Web Services Transit Gateways Guide. After you add the source, use [SearchTransitGatewayMulticastGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SearchTransitGatewayMulticastGroups.html) to verify that the source was added to the multicast group. /// /// - Parameter RegisterTransitGatewayMulticastGroupSourcesInput : [no documentation found] /// @@ -26801,7 +26847,7 @@ extension EC2Client { /// Performs the `ReleaseIpamPoolAllocation` operation on the `AmazonEC2` service. /// - /// Release an allocation within an IPAM pool. The Region you use should be the IPAM pool locale. The locale is the Amazon Web Services Region where this IPAM pool is available for allocations. You can only use this action to release manual allocations. To remove an allocation for a resource without deleting the resource, set its monitored state to false using [ModifyIpamResourceCidr](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyIpamResourceCidr.html). For more information, see [Release an allocation](https://docs.aws.amazon.com/vpc/latest/ipam/release-alloc-ipam.html) in the Amazon VPC IPAM User Guide. All EC2 API actions follow an [eventual consistency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/query-api-troubleshooting.html#eventual-consistency) model. + /// Release an allocation within an IPAM pool. The Region you use should be the IPAM pool locale. The locale is the Amazon Web Services Region where this IPAM pool is available for allocations. You can only use this action to release manual allocations. To remove an allocation for a resource without deleting the resource, set its monitored state to false using [ModifyIpamResourceCidr](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyIpamResourceCidr.html). For more information, see [Release an allocation](https://docs.aws.amazon.com/vpc/latest/ipam/release-alloc-ipam.html) in the Amazon VPC IPAM User Guide. All EC2 API actions follow an [eventual consistency](https://docs.aws.amazon.com/ec2/latest/devguide/eventual-consistency.html) model. /// /// - Parameter ReleaseIpamPoolAllocationInput : [no documentation found] /// @@ -27261,7 +27307,7 @@ extension EC2Client { /// Performs the `RequestSpotInstances` operation on the `AmazonEC2` service. /// - /// Creates a Spot Instance request. For more information, see [Spot Instance requests](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html) in the Amazon EC2 User Guide for Linux Instances. We strongly discourage using the RequestSpotInstances API because it is a legacy API with no planned investment. For options for requesting Spot Instances, see [Which is the best Spot request method to use?](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-best-practices.html#which-spot-request-method-to-use) in the Amazon EC2 User Guide for Linux Instances. + /// Creates a Spot Instance request. For more information, see [Work with Spot Instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html) in the Amazon EC2 User Guide. We strongly discourage using the RequestSpotInstances API because it is a legacy API with no planned investment. For options for requesting Spot Instances, see [Which is the best Spot request method to use?](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-best-practices.html#which-spot-request-method-to-use) in the Amazon EC2 User Guide. /// /// - Parameter RequestSpotInstancesInput : Contains the parameters for RequestSpotInstances. /// @@ -27491,7 +27537,7 @@ extension EC2Client { /// Performs the `ResetInstanceAttribute` operation on the `AmazonEC2` service. /// - /// Resets an attribute of an instance to its default value. To reset the kernel or ramdisk, the instance must be in a stopped state. To reset the sourceDestCheck, the instance can be either running or stopped. The sourceDestCheck attribute controls whether source/destination checking is enabled. The default value is true, which means checking is enabled. This value must be false for a NAT instance to perform NAT. For more information, see [NAT Instances](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html) in the Amazon VPC User Guide. + /// Resets an attribute of an instance to its default value. To reset the kernel or ramdisk, the instance must be in a stopped state. To reset the sourceDestCheck, the instance can be either running or stopped. The sourceDestCheck attribute controls whether source/destination checking is enabled. The default value is true, which means checking is enabled. This value must be false for a NAT instance to perform NAT. For more information, see [NAT instances](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html) in the Amazon VPC User Guide. /// /// - Parameter ResetInstanceAttributeInput : [no documentation found] /// @@ -28005,12 +28051,12 @@ extension EC2Client { /// /// * Not all instance types support IPv6 addresses. For more information, see [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html). /// - /// * If you don't specify a security group ID, we use the default security group. For more information, see [Security groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html). + /// * If you don't specify a security group ID, we use the default security group for the VPC. For more information, see [Security groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html). /// /// * If any of the AMIs have a product code attached for which the user has not subscribed, the request fails. /// /// - /// You can create a [launch template](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html), which is a resource that contains the parameters to launch an instance. When you launch an instance using [RunInstances], you can specify the launch template instead of specifying the launch parameters. To ensure faster instance launches, break up large requests into smaller batches. For example, create five separate launch requests for 100 instances each instead of one launch request for 500 instances. An instance is ready for you to use when it's in the running state. You can check the state of your instance using [DescribeInstances]. You can tag instances and EBS volumes during launch, after launch, or both. For more information, see [CreateTags] and [Tagging your Amazon EC2 resources](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html). Linux instances have access to the public key of the key pair at boot. You can use this key to provide secure access to the instance. Amazon EC2 public images use this feature to provide secure access without passwords. For more information, see [Key pairs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html). For troubleshooting, see [What to do if an instance immediately terminates](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_InstanceStraightToTerminated.html), and [Troubleshooting connecting to your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html). + /// You can create a [launch template](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html), which is a resource that contains the parameters to launch an instance. When you launch an instance using [RunInstances], you can specify the launch template instead of specifying the launch parameters. To ensure faster instance launches, break up large requests into smaller batches. For example, create five separate launch requests for 100 instances each instead of one launch request for 500 instances. RunInstances is subject to both request rate limiting and resource rate limiting. For more information, see [Request throttling](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-throttling.html). An instance is ready for you to use when it's in the running state. You can check the state of your instance using [DescribeInstances]. You can tag instances and EBS volumes during launch, after launch, or both. For more information, see [CreateTags] and [Tagging your Amazon EC2 resources](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html). Linux instances have access to the public key of the key pair at boot. You can use this key to provide secure access to the instance. Amazon EC2 public images use this feature to provide secure access without passwords. For more information, see [Key pairs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html). For troubleshooting, see [What to do if an instance immediately terminates](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_InstanceStraightToTerminated.html), and [Troubleshooting connecting to your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html). /// /// - Parameter RunInstancesInput : [no documentation found] /// @@ -28057,7 +28103,7 @@ extension EC2Client { /// Performs the `RunScheduledInstances` operation on the `AmazonEC2` service. /// - /// Launches the specified Scheduled Instances. Before you can launch a Scheduled Instance, you must purchase it and obtain an identifier using [PurchaseScheduledInstances]. You must launch a Scheduled Instance during its scheduled time period. You can't stop or reboot a Scheduled Instance, but you can terminate it as needed. If you terminate a Scheduled Instance before the current scheduled time period ends, you can launch it again after a few minutes. For more information, see [Scheduled Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-scheduled-instances.html) in the Amazon EC2 User Guide. + /// Launches the specified Scheduled Instances. Before you can launch a Scheduled Instance, you must purchase it and obtain an identifier using [PurchaseScheduledInstances]. You must launch a Scheduled Instance during its scheduled time period. You can't stop or reboot a Scheduled Instance, but you can terminate it as needed. If you terminate a Scheduled Instance before the current scheduled time period ends, you can launch it again after a few minutes. /// /// - Parameter RunScheduledInstancesInput : Contains the parameters for RunScheduledInstances. /// @@ -28242,7 +28288,7 @@ extension EC2Client { /// Performs the `SendDiagnosticInterrupt` operation on the `AmazonEC2` service. /// - /// Sends a diagnostic interrupt to the specified Amazon EC2 instance to trigger a kernel panic (on Linux instances), or a blue screen/stop error (on Windows instances). For instances based on Intel and AMD processors, the interrupt is received as a non-maskable interrupt (NMI). In general, the operating system crashes and reboots when a kernel panic or stop error is triggered. The operating system can also be configured to perform diagnostic tasks, such as generating a memory dump file, loading a secondary kernel, or obtaining a call trace. Before sending a diagnostic interrupt to your instance, ensure that its operating system is configured to perform the required diagnostic tasks. For more information about configuring your operating system to generate a crash dump when a kernel panic or stop error occurs, see [Send a diagnostic interrupt (for advanced users)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/diagnostic-interrupt.html) (Linux instances) or [Send a diagnostic interrupt (for advanced users)](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/diagnostic-interrupt.html) (Windows instances). + /// Sends a diagnostic interrupt to the specified Amazon EC2 instance to trigger a kernel panic (on Linux instances), or a blue screen/stop error (on Windows instances). For instances based on Intel and AMD processors, the interrupt is received as a non-maskable interrupt (NMI). In general, the operating system crashes and reboots when a kernel panic or stop error is triggered. The operating system can also be configured to perform diagnostic tasks, such as generating a memory dump file, loading a secondary kernel, or obtaining a call trace. Before sending a diagnostic interrupt to your instance, ensure that its operating system is configured to perform the required diagnostic tasks. For more information about configuring your operating system to generate a crash dump when a kernel panic or stop error occurs, see [Send a diagnostic interrupt (for advanced users)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/diagnostic-interrupt.html) in the Amazon EC2 User Guide. /// /// - Parameter SendDiagnosticInterruptInput : [no documentation found] /// @@ -28288,7 +28334,7 @@ extension EC2Client { /// Performs the `StartInstances` operation on the `AmazonEC2` service. /// - /// Starts an Amazon EBS-backed instance that you've previously stopped. Instances that use Amazon EBS volumes as their root devices can be quickly stopped and started. When an instance is stopped, the compute resources are released and you are not billed for instance usage. However, your root partition Amazon EBS volume remains and continues to persist your data, and you are charged for Amazon EBS volume usage. You can restart your instance at any time. Every time you start your instance, Amazon EC2 charges a one-minute minimum for instance usage, and thereafter charges per second for instance usage. Before stopping an instance, make sure it is in a state from which it can be restarted. Stopping an instance does not preserve data stored in RAM. Performing this operation on an instance that uses an instance store as its root device returns an error. If you attempt to start a T3 instance with host tenancy and the unlimited CPU credit option, the request fails. The unlimited CPU credit option is not supported on Dedicated Hosts. Before you start the instance, either change its CPU credit option to standard, or change its tenancy to default or dedicated. For more information, see [Stop and start your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html) in the Amazon EC2 User Guide. + /// Starts an Amazon EBS-backed instance that you've previously stopped. Instances that use Amazon EBS volumes as their root devices can be quickly stopped and started. When an instance is stopped, the compute resources are released and you are not billed for instance usage. However, your root partition Amazon EBS volume remains and continues to persist your data, and you are charged for Amazon EBS volume usage. You can restart your instance at any time. Every time you start your instance, Amazon EC2 charges a one-minute minimum for instance usage, and thereafter charges per second for instance usage. Before stopping an instance, make sure it is in a state from which it can be restarted. Stopping an instance does not preserve data stored in RAM. Performing this operation on an instance that uses an instance store as its root device returns an error. If you attempt to start a T3 instance with host tenancy and the unlimited CPU credit option, the request fails. The unlimited CPU credit option is not supported on Dedicated Hosts. Before you start the instance, either change its CPU credit option to standard, or change its tenancy to default or dedicated. For more information, see [Stop and start Amazon EC2 instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html) in the Amazon EC2 User Guide. /// /// - Parameter StartInstancesInput : [no documentation found] /// @@ -28474,7 +28520,7 @@ extension EC2Client { /// Performs the `StopInstances` operation on the `AmazonEC2` service. /// - /// Stops an Amazon EBS-backed instance. For more information, see [Stop and start your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html) in the Amazon EC2 User Guide. You can use the Stop action to hibernate an instance if the instance is [enabled for hibernation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enabling-hibernation.html) and it meets the [hibernation prerequisites](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html). For more information, see [Hibernate your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) in the Amazon EC2 User Guide. We don't charge usage for a stopped instance, or data transfer fees; however, your root partition Amazon EBS volume remains and continues to persist your data, and you are charged for Amazon EBS volume usage. Every time you start your instance, Amazon EC2 charges a one-minute minimum for instance usage, and thereafter charges per second for instance usage. You can't stop or hibernate instance store-backed instances. You can't use the Stop action to hibernate Spot Instances, but you can specify that Amazon EC2 should hibernate Spot Instances when they are interrupted. For more information, see [Hibernating interrupted Spot Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html#hibernate-spot-instances) in the Amazon EC2 User Guide. When you stop or hibernate an instance, we shut it down. You can restart your instance at any time. Before stopping or hibernating an instance, make sure it is in a state from which it can be restarted. Stopping an instance does not preserve data stored in RAM, but hibernating an instance does preserve data stored in RAM. If an instance cannot hibernate successfully, a normal shutdown occurs. Stopping and hibernating an instance is different to rebooting or terminating it. For example, when you stop or hibernate an instance, the root device and any other devices attached to the instance persist. When you terminate an instance, the root device and any other devices attached during the instance launch are automatically deleted. For more information about the differences between rebooting, stopping, hibernating, and terminating instances, see [Instance lifecycle](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html) in the Amazon EC2 User Guide. When you stop an instance, we attempt to shut it down forcibly after a short while. If your instance appears stuck in the stopping state after a period of time, there may be an issue with the underlying host computer. For more information, see [Troubleshoot stopping your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html) in the Amazon EC2 User Guide. + /// Stops an Amazon EBS-backed instance. For more information, see [Stop and start Amazon EC2 instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html) in the Amazon EC2 User Guide. You can use the Stop action to hibernate an instance if the instance is [enabled for hibernation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enabling-hibernation.html) and it meets the [hibernation prerequisites](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html). For more information, see [Hibernate your Amazon EC2 instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) in the Amazon EC2 User Guide. We don't charge usage for a stopped instance, or data transfer fees; however, your root partition Amazon EBS volume remains and continues to persist your data, and you are charged for Amazon EBS volume usage. Every time you start your instance, Amazon EC2 charges a one-minute minimum for instance usage, and thereafter charges per second for instance usage. You can't stop or hibernate instance store-backed instances. You can't use the Stop action to hibernate Spot Instances, but you can specify that Amazon EC2 should hibernate Spot Instances when they are interrupted. For more information, see [Hibernating interrupted Spot Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html#hibernate-spot-instances) in the Amazon EC2 User Guide. When you stop or hibernate an instance, we shut it down. You can restart your instance at any time. Before stopping or hibernating an instance, make sure it is in a state from which it can be restarted. Stopping an instance does not preserve data stored in RAM, but hibernating an instance does preserve data stored in RAM. If an instance cannot hibernate successfully, a normal shutdown occurs. Stopping and hibernating an instance is different to rebooting or terminating it. For example, when you stop or hibernate an instance, the root device and any other devices attached to the instance persist. When you terminate an instance, the root device and any other devices attached during the instance launch are automatically deleted. For more information about the differences between rebooting, stopping, hibernating, and terminating instances, see [Instance lifecycle](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html) in the Amazon EC2 User Guide. When you stop an instance, we attempt to shut it down forcibly after a short while. If your instance appears stuck in the stopping state after a period of time, there may be an issue with the underlying host computer. For more information, see [Troubleshoot stopping your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html) in the Amazon EC2 User Guide. /// /// - Parameter StopInstancesInput : [no documentation found] /// diff --git a/Sources/Services/AWSEC2/Sources/AWSEC2/Models.swift b/Sources/Services/AWSEC2/Sources/AWSEC2/Models.swift index ef3a0aaddf5..55594e5e0c6 100644 --- a/Sources/Services/AWSEC2/Sources/AWSEC2/Models.swift +++ b/Sources/Services/AWSEC2/Sources/AWSEC2/Models.swift @@ -575,6 +575,7 @@ extension EC2ClientTypes { case volume case vpc case vpcBlockPublicAccessExclusion + case vpcEncryptionControl case vpcEndpoint case vpcEndpointConnection case vpcEndpointConnectionDeviceType @@ -665,6 +666,7 @@ extension EC2ClientTypes { .volume, .vpc, .vpcBlockPublicAccessExclusion, + .vpcEncryptionControl, .vpcEndpoint, .vpcEndpointConnection, .vpcEndpointConnectionDeviceType, @@ -761,6 +763,7 @@ extension EC2ClientTypes { case .volume: return "volume" case .vpc: return "vpc" case .vpcBlockPublicAccessExclusion: return "vpc-block-public-access-exclusion" + case .vpcEncryptionControl: return "vpc-encryption-control" case .vpcEndpoint: return "vpc-endpoint" case .vpcEndpointConnection: return "vpc-endpoint-connection" case .vpcEndpointConnectionDeviceType: return "vpc-endpoint-connection-device-type" @@ -871,7 +874,7 @@ extension EC2ClientTypes { } extension EC2ClientTypes { - /// Details on the Elastic IP address transfer. For more information, see [Transfer Elastic IP addresses](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro) in the Amazon Virtual Private Cloud User Guide. + /// Details on the Elastic IP address transfer. For more information, see [Transfer Elastic IP addresses](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro) in the Amazon VPC User Guide. public struct AddressTransfer { /// The Elastic IP address transfer status. public var addressTransferStatus: EC2ClientTypes.AddressTransferStatus? @@ -3752,7 +3755,7 @@ public struct AllocateAddressInput { public var domain: EC2ClientTypes.DomainType? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// A unique set of Availability Zones, Local Zones, or Wavelength Zones from which Amazon Web Services advertises IP addresses. Use this parameter to limit the IP address to this location. IP addresses cannot move between network border groups. Use [DescribeAvailabilityZones](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html) to view the network border groups. + /// A unique set of Availability Zones, Local Zones, or Wavelength Zones from which Amazon Web Services advertises IP addresses. Use this parameter to limit the IP address to this location. IP addresses cannot move between network border groups. public var networkBorderGroup: Swift.String? /// The ID of an address pool that you own. Use this parameter to let Amazon EC2 select an address from the address pool. To specify a specific address from the address pool, use the Address parameter instead. public var publicIpv4Pool: Swift.String? @@ -3913,7 +3916,7 @@ public struct AllocateHostsInput { /// /// * If you specify both AssetIds and Quantity, then the value for Quantity must be equal to the number of asset IDs specified. public var assetIds: [Swift.String]? - /// Indicates whether the host accepts any untargeted instance launches that match its instance type configuration, or if it only accepts Host tenancy instance launches that specify its unique host ID. For more information, see [ Understanding auto-placement and affinity](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-dedicated-hosts-work.html#dedicated-hosts-understanding) in the Amazon EC2 User Guide. Default: on + /// Indicates whether the host accepts any untargeted instance launches that match its instance type configuration, or if it only accepts Host tenancy instance launches that specify its unique host ID. For more information, see [ Understanding auto-placement and affinity](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-dedicated-hosts-work.html#dedicated-hosts-understanding) in the Amazon EC2 User Guide. Default: off public var autoPlacement: EC2ClientTypes.AutoPlacement? /// The Availability Zone in which to allocate the Dedicated Host. /// This member is required. @@ -3988,7 +3991,7 @@ public struct AllocateIpamPoolCidrInput { /// /// Possible values: Any available IPv4 or IPv6 CIDR. public var cidr: Swift.String? - /// A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// A description for the allocation. public var description: Swift.String? @@ -4436,7 +4439,7 @@ public struct AssignPrivateIpAddressesInput { extension EC2ClientTypes { /// Describes an IPv4 prefix. public struct Ipv4PrefixSpecification { - /// The IPv4 prefix. For information, see [ Assigning prefixes to Amazon EC2 network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html) in the Amazon Elastic Compute Cloud User Guide. + /// The IPv4 prefix. For information, see [ Assigning prefixes to network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html) in the Amazon EC2 User Guide. public var ipv4Prefix: Swift.String? public init( @@ -4660,7 +4663,7 @@ public struct AssociateAddressOutput { } public struct AssociateClientVpnTargetNetworkInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// The ID of the Client VPN endpoint. /// This member is required. @@ -5899,7 +5902,7 @@ public struct AssociateTrunkInterfaceInput { /// The ID of the branch network interface. /// This member is required. public var branchInterfaceId: Swift.String? - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to Ensure Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -5999,7 +6002,7 @@ extension EC2ClientTypes { } public struct AssociateTrunkInterfaceOutput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to Ensure Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Information about the association between the trunk network interface and branch network interface. public var interfaceAssociation: EC2ClientTypes.TrunkInterfaceAssociation? @@ -6351,7 +6354,7 @@ public struct AttachNetworkInterfaceOutput { } public struct AttachVerifiedAccessTrustProviderInput { - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -6901,7 +6904,7 @@ public struct AuthorizeClientVpnIngressInput { public var accessGroupId: Swift.String? /// Indicates whether to grant access to all clients. Specify true to grant all clients who successfully establish a VPN connection access to the network. Must be set to true if AccessGroupId is not specified. public var authorizeAllGroups: Swift.Bool? - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// The ID of the Client VPN endpoint. /// This member is required. @@ -8411,7 +8414,7 @@ public struct ConfirmProductInstanceOutput { } public struct CopyFpgaImageInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// The description for the new AFI. public var description: Swift.String? @@ -8561,7 +8564,7 @@ public struct CopySnapshotInput { public var dryRun: Swift.Bool? /// To encrypt a copy of an unencrypted snapshot if encryption by default is not enabled, enable encryption using this parameter. Otherwise, omit this parameter. Encrypted snapshots are encrypted, even if you omit this parameter and encryption by default is not enabled. You cannot set this parameter to false. For more information, see [Amazon EBS encryption](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html) in the Amazon EBS User Guide. public var encrypted: Swift.Bool? - /// The identifier of the Key Management Service (KMS) KMS key to use for Amazon EBS encryption. If this parameter is not specified, your KMS key for Amazon EBS is used. If KmsKeyId is specified, the encrypted state must be true. You can specify the KMS key using any of the following: + /// The identifier of the KMS key to use for Amazon EBS encryption. If this parameter is not specified, your KMS key for Amazon EBS is used. If KmsKeyId is specified, the encrypted state must be true. You can specify the KMS key using any of the following: /// /// * Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab. /// @@ -8574,7 +8577,7 @@ public struct CopySnapshotInput { /// /// Amazon Web Services authenticates the KMS key asynchronously. Therefore, if you specify an ID, alias, or ARN that is not valid, the action can appear to complete, but eventually fails. public var kmsKeyId: Swift.String? - /// When you copy an encrypted source snapshot using the Amazon EC2 Query API, you must supply a pre-signed URL. This parameter is optional for unencrypted snapshots. For more information, see [Query requests](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html). The PresignedUrl should use the snapshot source endpoint, the CopySnapshot action, and include the SourceRegion, SourceSnapshotId, and DestinationRegion parameters. The PresignedUrl must be signed using Amazon Web Services Signature Version 4. Because EBS snapshots are stored in Amazon S3, the signing algorithm for this parameter uses the same logic that is described in [Authenticating Requests: Using Query Parameters (Amazon Web Services Signature Version 4)](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html) in the Amazon Simple Storage Service API Reference. An invalid or improperly signed PresignedUrl will cause the copy operation to fail asynchronously, and the snapshot will move to an error state. + /// When you copy an encrypted source snapshot using the Amazon EC2 Query API, you must supply a pre-signed URL. This parameter is optional for unencrypted snapshots. For more information, see [Query requests](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html). The PresignedUrl should use the snapshot source endpoint, the CopySnapshot action, and include the SourceRegion, SourceSnapshotId, and DestinationRegion parameters. The PresignedUrl must be signed using Amazon Web Services Signature Version 4. Because EBS snapshots are stored in Amazon S3, the signing algorithm for this parameter uses the same logic that is described in [ Authenticating Requests: Using Query Parameters (Amazon Web Services Signature Version 4)](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html) in the Amazon S3 API Reference. An invalid or improperly signed PresignedUrl will cause the copy operation to fail asynchronously, and the snapshot will move to an error state. public var presignedUrl: Swift.String? /// The ID of the Region that contains the snapshot to be copied. /// This member is required. @@ -11676,7 +11679,7 @@ public struct CreateCapacityReservationFleetInput { /// /// * dedicated - The Capacity Reservations are created on single-tenant hardware that is dedicated to a single Amazon Web Services account. public var tenancy: EC2ClientTypes.FleetCapacityReservationTenancy? - /// The total number of capacity units to be reserved by the Capacity Reservation Fleet. This value, together with the instance type weights that you assign to each instance type used by the Fleet determine the number of instances for which the Fleet reserves capacity. Both values are based on units that make sense for your workload. For more information, see [ Total target capacity](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity) in the Amazon EC2 User Guide. + /// The total number of capacity units to be reserved by the Capacity Reservation Fleet. This value, together with the instance type weights that you assign to each instance type used by the Fleet determine the number of instances for which the Fleet reserves capacity. Both values are based on units that make sense for your workload. For more information, see [Total target capacity](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity) in the Amazon EC2 User Guide. /// This member is required. public var totalTargetCapacity: Swift.Int? @@ -11717,17 +11720,17 @@ extension EC2ClientTypes { public var createDate: Foundation.Date? /// Indicates whether the Capacity Reservation reserves capacity for EBS-optimized instance types. public var ebsOptimized: Swift.Bool? - /// The number of capacity units fulfilled by the Capacity Reservation. For more information, see [ Total target capacity](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity) in the Amazon EC2 User Guide. + /// The number of capacity units fulfilled by the Capacity Reservation. For more information, see [Total target capacity](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity) in the Amazon EC2 User Guide. public var fulfilledCapacity: Swift.Double? /// The type of operating system for which the Capacity Reservation reserves capacity. public var instancePlatform: EC2ClientTypes.CapacityReservationInstancePlatform? /// The instance type for which the Capacity Reservation reserves capacity. public var instanceType: EC2ClientTypes.InstanceType? - /// The priority of the instance type in the Capacity Reservation Fleet. For more information, see [ Instance type priority](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-priority) in the Amazon EC2 User Guide. + /// The priority of the instance type in the Capacity Reservation Fleet. For more information, see [Instance type priority](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-priority) in the Amazon EC2 User Guide. public var priority: Swift.Int? /// The total number of instances for which the Capacity Reservation reserves capacity. public var totalInstanceCount: Swift.Int? - /// The weight of the instance type in the Capacity Reservation Fleet. For more information, see [ Instance type weight](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-weight) in the Amazon EC2 User Guide. + /// The weight of the instance type in the Capacity Reservation Fleet. For more information, see [Instance type weight](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-weight) in the Amazon EC2 User Guide. public var weight: Swift.Double? public init( @@ -11813,7 +11816,7 @@ public struct CreateCapacityReservationFleetOutput { } public struct CreateCarrierGatewayInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -12161,7 +12164,7 @@ public struct CreateClientVpnEndpointInput { public var clientConnectOptions: EC2ClientTypes.ClientConnectOptions? /// Options for enabling a customizable text banner that will be displayed on Amazon Web Services provided clients when a VPN session is established. public var clientLoginBannerOptions: EC2ClientTypes.ClientLoginBannerOptions? - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Information about the client connection logging options. If you enable client connection logging, data about client connections is sent to a Cloudwatch Logs log stream. The following information is logged: /// @@ -12326,7 +12329,7 @@ public struct CreateClientVpnEndpointOutput { } public struct CreateClientVpnRouteInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// The ID of the Client VPN endpoint to which to add the route. /// This member is required. @@ -13160,7 +13163,7 @@ public struct CreateDhcpOptionsOutput { } public struct CreateEgressOnlyInternetGatewayInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -14028,9 +14031,9 @@ extension EC2ClientTypes { public var allocationStrategy: EC2ClientTypes.FleetOnDemandAllocationStrategy? /// The strategy for using unused Capacity Reservations for fulfilling On-Demand capacity. Supported only for fleets of type instant. public var capacityReservationOptions: EC2ClientTypes.CapacityReservationOptionsRequest? - /// The maximum amount per hour for On-Demand Instances that you're willing to pay. If your fleet includes T instances that are configured as unlimited, and if their average CPU usage exceeds the baseline utilization, you will incur a charge for surplus credits. The MaxTotalPrice does not account for surplus credits, and, if you use surplus credits, your final cost might be higher than what you specified for MaxTotalPrice. For more information, see [Surplus credits can incur charges](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits) in the EC2 User Guide. + /// The maximum amount per hour for On-Demand Instances that you're willing to pay. If your fleet includes T instances that are configured as unlimited, and if their average CPU usage exceeds the baseline utilization, you will incur a charge for surplus credits. The MaxTotalPrice does not account for surplus credits, and, if you use surplus credits, your final cost might be higher than what you specified for MaxTotalPrice. For more information, see [Surplus credits can incur charges](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits) in the Amazon EC2 User Guide. public var maxTotalPrice: Swift.String? - /// The minimum target capacity for On-Demand Instances in the fleet. If the minimum target capacity is not reached, the fleet launches no instances. Supported only for fleets of type instant. At least one of the following must be specified: SingleAvailabilityZone | SingleInstanceType + /// The minimum target capacity for On-Demand Instances in the fleet. If this minimum capacity isn't reached, no instances are launched. Constraints: Maximum value of 1000. Supported only for fleets of type instant. At least one of the following must be specified: SingleAvailabilityZone | SingleInstanceType public var minTargetCapacity: Swift.Int? /// Indicates that the fleet launches all On-Demand Instances into a single Availability Zone. Supported only for fleets of type instant. public var singleAvailabilityZone: Swift.Bool? @@ -14195,7 +14198,7 @@ extension EC2ClientTypes { extension EC2ClientTypes { /// Describes the configuration of Spot Instances in an EC2 Fleet request. public struct SpotOptionsRequest { - /// The strategy that determines how to allocate the target Spot Instance capacity across the Spot Instance pools specified by the EC2 Fleet launch configuration. For more information, see [Allocation strategies for Spot Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html) in the Amazon EC2 User Guide. price-capacity-optimized (recommended) EC2 Fleet identifies the pools with the highest capacity availability for the number of instances that are launching. This means that we will request Spot Instances from the pools that we believe have the lowest chance of interruption in the near term. EC2 Fleet then requests Spot Instances from the lowest priced of these pools. capacity-optimized EC2 Fleet identifies the pools with the highest capacity availability for the number of instances that are launching. This means that we will request Spot Instances from the pools that we believe have the lowest chance of interruption in the near term. To give certain instance types a higher chance of launching first, use capacity-optimized-prioritized. Set a priority for each instance type by using the Priority parameter for LaunchTemplateOverrides. You can assign the same priority to different LaunchTemplateOverrides. EC2 implements the priorities on a best-effort basis, but optimizes for capacity first. capacity-optimized-prioritized is supported only if your EC2 Fleet uses a launch template. Note that if the On-Demand AllocationStrategy is set to prioritized, the same priority is applied when fulfilling On-Demand capacity. diversified EC2 Fleet requests instances from all of the Spot Instance pools that you specify. lowest-price EC2 Fleet requests instances from the lowest priced Spot Instance pool that has available capacity. If the lowest priced pool doesn't have available capacity, the Spot Instances come from the next lowest priced pool that has available capacity. If a pool runs out of capacity before fulfilling your desired capacity, EC2 Fleet will continue to fulfill your request by drawing from the next lowest priced pool. To ensure that your desired capacity is met, you might receive Spot Instances from several pools. Because this strategy only considers instance price and not capacity availability, it might lead to high interruption rates. Default: lowest-price + /// The strategy that determines how to allocate the target Spot Instance capacity across the Spot Instance pools specified by the EC2 Fleet launch configuration. For more information, see [Allocation strategies for Spot Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html) in the Amazon EC2 User Guide. price-capacity-optimized (recommended) EC2 Fleet identifies the pools with the highest capacity availability for the number of instances that are launching. This means that we will request Spot Instances from the pools that we believe have the lowest chance of interruption in the near term. EC2 Fleet then requests Spot Instances from the lowest priced of these pools. capacity-optimized EC2 Fleet identifies the pools with the highest capacity availability for the number of instances that are launching. This means that we will request Spot Instances from the pools that we believe have the lowest chance of interruption in the near term. To give certain instance types a higher chance of launching first, use capacity-optimized-prioritized. Set a priority for each instance type by using the Priority parameter for LaunchTemplateOverrides. You can assign the same priority to different LaunchTemplateOverrides. EC2 implements the priorities on a best-effort basis, but optimizes for capacity first. capacity-optimized-prioritized is supported only if your EC2 Fleet uses a launch template. Note that if the On-Demand AllocationStrategy is set to prioritized, the same priority is applied when fulfilling On-Demand capacity. diversified EC2 Fleet requests instances from all of the Spot Instance pools that you specify. lowest-price (not recommended) We don't recommend the lowest-price allocation strategy because it has the highest risk of interruption for your Spot Instances. EC2 Fleet requests instances from the lowest priced Spot Instance pool that has available capacity. If the lowest priced pool doesn't have available capacity, the Spot Instances come from the next lowest priced pool that has available capacity. If a pool runs out of capacity before fulfilling your desired capacity, EC2 Fleet will continue to fulfill your request by drawing from the next lowest priced pool. To ensure that your desired capacity is met, you might receive Spot Instances from several pools. Because this strategy only considers instance price and not capacity availability, it might lead to high interruption rates. Default: lowest-price public var allocationStrategy: EC2ClientTypes.SpotAllocationStrategy? /// The behavior when a Spot Instance is interrupted. Default: terminate public var instanceInterruptionBehavior: EC2ClientTypes.SpotInstanceInterruptionBehavior? @@ -14203,9 +14206,9 @@ extension EC2ClientTypes { public var instancePoolsToUseCount: Swift.Int? /// The strategies for managing your Spot Instances that are at an elevated risk of being interrupted. public var maintenanceStrategies: EC2ClientTypes.FleetSpotMaintenanceStrategiesRequest? - /// The maximum amount per hour for Spot Instances that you're willing to pay. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price. If you specify a maximum price, your Spot Instances will be interrupted more frequently than if you do not specify this parameter. If your fleet includes T instances that are configured as unlimited, and if their average CPU usage exceeds the baseline utilization, you will incur a charge for surplus credits. The MaxTotalPrice does not account for surplus credits, and, if you use surplus credits, your final cost might be higher than what you specified for MaxTotalPrice. For more information, see [Surplus credits can incur charges](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits) in the EC2 User Guide. + /// The maximum amount per hour for Spot Instances that you're willing to pay. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price. If you specify a maximum price, your Spot Instances will be interrupted more frequently than if you do not specify this parameter. If your fleet includes T instances that are configured as unlimited, and if their average CPU usage exceeds the baseline utilization, you will incur a charge for surplus credits. The MaxTotalPrice does not account for surplus credits, and, if you use surplus credits, your final cost might be higher than what you specified for MaxTotalPrice. For more information, see [Surplus credits can incur charges](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits) in the Amazon EC2 User Guide. public var maxTotalPrice: Swift.String? - /// The minimum target capacity for Spot Instances in the fleet. If the minimum target capacity is not reached, the fleet launches no instances. Supported only for fleets of type instant. At least one of the following must be specified: SingleAvailabilityZone | SingleInstanceType + /// The minimum target capacity for Spot Instances in the fleet. If this minimum capacity isn't reached, no instances are launched. Constraints: Maximum value of 1000. Supported only for fleets of type instant. At least one of the following must be specified: SingleAvailabilityZone | SingleInstanceType public var minTargetCapacity: Swift.Int? /// Indicates that the fleet launches all Spot Instances into a single Availability Zone. Supported only for fleets of type instant. public var singleAvailabilityZone: Swift.Bool? @@ -15186,7 +15189,7 @@ extension EC2ClientTypes { } public struct CreateFlowLogsInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// The ARN of the IAM role that allows Amazon EC2 to publish flow logs across accounts. public var deliverCrossAccountRole: Swift.String? @@ -15210,7 +15213,7 @@ public struct CreateFlowLogsInput { public var logFormat: Swift.String? /// The name of a new or existing CloudWatch Logs log group where Amazon EC2 publishes your flow logs. This parameter is valid only if the destination type is cloud-watch-logs. public var logGroupName: Swift.String? - /// The maximum interval of time during which a flow of packets is captured and aggregated into a flow log record. The possible values are 60 seconds (1 minute) or 600 seconds (10 minutes). This parameter must be 60 seconds for transit gateway resource types. When a network interface is attached to a [Nitro-based instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances), the aggregation interval is always 60 seconds or less, regardless of the value that you specify. Default: 600 + /// The maximum interval of time during which a flow of packets is captured and aggregated into a flow log record. The possible values are 60 seconds (1 minute) or 600 seconds (10 minutes). This parameter must be 60 seconds for transit gateway resource types. When a network interface is attached to a [Nitro-based instance](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html), the aggregation interval is always 60 seconds or less, regardless of the value that you specify. Default: 600 public var maxAggregationInterval: Swift.Int? /// The IDs of the resources to monitor. For example, if the resource type is VPC, specify the IDs of the VPCs. Constraints: Maximum of 25 for transit gateway resource types. Maximum of 1000 for the other resource types. /// This member is required. @@ -15298,7 +15301,7 @@ extension EC2ClientTypes { } public struct CreateFpgaImageInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// A description for the AFI. public var description: Swift.String? @@ -16196,7 +16199,7 @@ extension EC2ClientTypes { } public struct CreateIpamInput { - /// A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// A description for the IPAM. public var description: Swift.String? @@ -16535,7 +16538,7 @@ public struct CreateIpamPoolInput { public var autoImport: Swift.Bool? /// Limits which service in Amazon Web Services that the pool can be used in. "ec2", for example, allows users to use space for Elastic IP addresses and VPCs. public var awsService: EC2ClientTypes.IpamPoolAwsService? - /// A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// A description for the IPAM pool. public var description: Swift.String? @@ -16770,7 +16773,7 @@ extension EC2ClientTypes { public var ownerId: Swift.String? /// The depth of pools in your IPAM pool. The pool depth quota is 10. For more information, see [Quotas in IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html) in the Amazon VPC IPAM User Guide. public var poolDepth: Swift.Int? - /// The IP address source for pools in the public scope. Only used for provisioning IP address CIDRs to pools in the public scope. Default is BYOIP. For more information, see [Create IPv6 pools](https://docs.aws.amazon.com/vpc/latest/ipam/intro-create-ipv6-pools.html) in the Amazon VPC IPAM User Guide. By default, you can add only one Amazon-provided IPv6 CIDR block to a top-level IPv6 pool. For information on increasing the default limit, see [ Quotas for your IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html) in the Amazon VPC IPAM User Guide. + /// The IP address source for pools in the public scope. Only used for provisioning IP address CIDRs to pools in the public scope. Default is BYOIP. For more information, see [Create IPv6 pools](https://docs.aws.amazon.com/vpc/latest/ipam/intro-create-ipv6-pools.html) in the Amazon VPC IPAM User Guide. By default, you can add only one Amazon-provided IPv6 CIDR block to a top-level IPv6 pool. For information on increasing the default limit, see [Quotas for your IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html) in the Amazon VPC IPAM User Guide. public var publicIpSource: EC2ClientTypes.IpamPoolPublicIpSource? /// Determines if a pool is publicly advertisable. This option is not available for pools with AddressFamily set to ipv4. public var publiclyAdvertisable: Swift.Bool? @@ -17025,7 +17028,7 @@ public struct CreateIpamResourceDiscoveryOutput { } public struct CreateIpamScopeInput { - /// A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// A description for the scope you're creating. public var description: Swift.String? @@ -17538,9 +17541,9 @@ extension EC2ClientTypes { } extension EC2ClientTypes { - /// Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads that require graphics acceleration, we recommend that you use Amazon EC2 G4ad, G4dn, or G5 instances. A specification for an Elastic Graphics accelerator. + /// Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads that require graphics acceleration, we recommend that you use Amazon EC2 G4, G5, or G6 instances. A specification for an Elastic Graphics accelerator. public struct ElasticGpuSpecification { - /// The type of Elastic Graphics accelerator. For more information about the values to specify for Type, see [Elastic Graphics Basics](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html#elastic-graphics-basics), specifically the Elastic Graphics accelerator column, in the Amazon Elastic Compute Cloud User Guide for Windows Instances. + /// The type of Elastic Graphics accelerator. /// This member is required. public var type: Swift.String? @@ -17983,7 +17986,7 @@ extension EC2ClientTypes { } extension EC2ClientTypes { - /// The metadata options for the instance. For more information, see [Instance metadata and user data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) in the Amazon Elastic Compute Cloud User Guide. + /// The metadata options for the instance. For more information, see [Instance metadata and user data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) in the Amazon EC2 User Guide. public struct LaunchTemplateInstanceMetadataOptionsRequest { /// Enables or disables the HTTP metadata endpoint on your instances. If the parameter is not specified, the default state is enabled. If you specify a value of disabled, you will not be able to access your instance metadata. public var httpEndpoint: EC2ClientTypes.LaunchTemplateInstanceMetadataEndpointState? @@ -18038,7 +18041,7 @@ extension EC2ClientTypes { } extension EC2ClientTypes { - /// A security group connection tracking specification request that enables you to set the idle timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon Elastic Compute Cloud User Guide. + /// A security group connection tracking specification request that enables you to set the idle timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon EC2 User Guide. public struct ConnectionTrackingSpecificationRequest { /// Timeout (in seconds) for idle TCP connections in an established state. Min: 60 seconds. Max: 432000 seconds (5 days). Default: 432000 seconds. Recommended: Less than 432000 seconds. public var tcpEstablishedTimeout: Swift.Int? @@ -18100,7 +18103,7 @@ extension EC2ClientTypes { extension EC2ClientTypes { /// Describes the IPv4 prefix option for a network interface. public struct Ipv4PrefixSpecificationRequest { - /// The IPv4 prefix. For information, see [ Assigning prefixes to Amazon EC2 network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html) in the Amazon Elastic Compute Cloud User Guide. + /// The IPv4 prefix. For information, see [ Assigning prefixes to network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html) in the Amazon EC2 User Guide. public var ipv4Prefix: Swift.String? public init( @@ -18172,7 +18175,7 @@ extension EC2ClientTypes { public var associateCarrierIpAddress: Swift.Bool? /// Associates a public IPv4 address with eth0 for a new network interface. Amazon Web Services charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the Public IPv4 Address tab on the [Amazon VPC pricing page](http://aws.amazon.com/vpc/pricing/). public var associatePublicIpAddress: Swift.Bool? - /// A security group connection tracking specification that enables you to set the timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon Elastic Compute Cloud User Guide. + /// A security group connection tracking specification that enables you to set the timeout for connection tracking on an Elastic network interface. For more information, see [Idle connection tracking timeout](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon EC2 User Guide. public var connectionTrackingSpecification: EC2ClientTypes.ConnectionTrackingSpecificationRequest? /// Indicates whether the network interface is deleted when the instance is terminated. public var deleteOnTermination: Swift.Bool? @@ -18184,7 +18187,7 @@ extension EC2ClientTypes { public var enaSrdSpecification: EC2ClientTypes.EnaSrdSpecificationRequest? /// The IDs of one or more security groups. public var groups: [Swift.String]? - /// The type of network interface. To create an Elastic Fabric Adapter (EFA), specify efa. For more information, see [Elastic Fabric Adapter](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) in the Amazon Elastic Compute Cloud User Guide. If you are not creating an EFA, specify interface or omit this parameter. Valid values: interface | efa + /// The type of network interface. To create an Elastic Fabric Adapter (EFA), specify efa. For more information, see [Elastic Fabric Adapter](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) in the Amazon EC2 User Guide. If you are not creating an EFA, specify interface or omit this parameter. Valid values: interface | efa public var interfaceType: Swift.String? /// The number of IPv4 prefixes to be automatically assigned to the network interface. You cannot use this option if you use the Ipv4Prefix option. public var ipv4PrefixCount: Swift.Int? @@ -18364,11 +18367,11 @@ extension EC2ClientTypes { public var blockDeviceMappings: [EC2ClientTypes.LaunchTemplateBlockDeviceMappingRequest]? /// The Capacity Reservation targeting option. If you do not specify this parameter, the instance's Capacity Reservation preference defaults to open, which enables it to run in any open Capacity Reservation that has matching attributes (instance type, platform, Availability Zone). public var capacityReservationSpecification: EC2ClientTypes.LaunchTemplateCapacityReservationSpecificationRequest? - /// The CPU options for the instance. For more information, see [Optimizing CPU Options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html) in the Amazon Elastic Compute Cloud User Guide. + /// The CPU options for the instance. For more information, see [Optimize CPU options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html) in the Amazon EC2 User Guide. public var cpuOptions: EC2ClientTypes.LaunchTemplateCpuOptionsRequest? /// The credit option for CPU usage of the instance. Valid only for T instances. public var creditSpecification: EC2ClientTypes.CreditSpecificationRequest? - /// Indicates whether to enable the instance for stop protection. For more information, see [Stop protection](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection) in the Amazon Elastic Compute Cloud User Guide. + /// Indicates whether to enable the instance for stop protection. For more information, see [Enable stop protection for your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-stop-protection.html) in the Amazon EC2 User Guide. public var disableApiStop: Swift.Bool? /// If you set this parameter to true, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. To change this attribute after launch, use [ModifyInstanceAttribute](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html). Alternatively, if you set InstanceInitiatedShutdownBehavior to terminate, you can terminate the instance by running the shutdown command from the instance. public var disableApiTermination: Swift.Bool? @@ -18378,9 +18381,9 @@ extension EC2ClientTypes { public var elasticGpuSpecifications: [EC2ClientTypes.ElasticGpuSpecification]? /// An elastic inference accelerator to associate with the instance. Elastic inference accelerators are a resource you can attach to your Amazon EC2 instances to accelerate your Deep Learning (DL) inference workloads. You cannot specify accelerators from different generations in the same request. Starting April 15, 2023, Amazon Web Services will not onboard new customers to Amazon Elastic Inference (EI), and will help current customers migrate their workloads to options that offer better price and performance. After April 15, 2023, new customers will not be able to launch instances with Amazon EI accelerators in Amazon SageMaker, Amazon ECS, or Amazon EC2. However, customers who have used Amazon EI at least once during the past 30-day period are considered current customers and will be able to continue using the service. public var elasticInferenceAccelerators: [EC2ClientTypes.LaunchTemplateElasticInferenceAccelerator]? - /// Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. For more information, see [ What is Amazon Web Services Nitro Enclaves?](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html) in the Amazon Web Services Nitro Enclaves User Guide. You can't enable Amazon Web Services Nitro Enclaves and hibernation on the same instance. + /// Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. For more information, see [What is Amazon Web Services Nitro Enclaves?](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html) in the Amazon Web Services Nitro Enclaves User Guide. You can't enable Amazon Web Services Nitro Enclaves and hibernation on the same instance. public var enclaveOptions: EC2ClientTypes.LaunchTemplateEnclaveOptionsRequest? - /// Indicates whether an instance is enabled for hibernation. This parameter is valid only if the instance meets the [hibernation prerequisites](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html). For more information, see [Hibernate your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) in the Amazon Elastic Compute Cloud User Guide. + /// Indicates whether an instance is enabled for hibernation. This parameter is valid only if the instance meets the [hibernation prerequisites](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html). For more information, see [Hibernate your Amazon EC2 instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) in the Amazon EC2 User Guide. public var hibernationOptions: EC2ClientTypes.LaunchTemplateHibernationOptionsRequest? /// The name or Amazon Resource Name (ARN) of an IAM instance profile. public var iamInstanceProfile: EC2ClientTypes.LaunchTemplateIamInstanceProfileSpecificationRequest? @@ -18397,7 +18400,7 @@ extension EC2ClientTypes { /// * resolve:ssm:public-parameter /// /// - /// Currently, EC2 Fleet and Spot Fleet do not support specifying a Systems Manager parameter. If the launch template will be used by an EC2 Fleet or Spot Fleet, you must specify the AMI ID. For more information, see [Use a Systems Manager parameter instead of an AMI ID](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#use-an-ssm-parameter-instead-of-an-ami-id) in the Amazon Elastic Compute Cloud User Guide. + /// Currently, EC2 Fleet and Spot Fleet do not support specifying a Systems Manager parameter. If the launch template will be used by an EC2 Fleet or Spot Fleet, you must specify the AMI ID. For more information, see [Use a Systems Manager parameter instead of an AMI ID](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#use-an-ssm-parameter-instead-of-an-ami-id) in the Amazon EC2 User Guide. public var imageId: Swift.String? /// Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown). Default: stop public var instanceInitiatedShutdownBehavior: EC2ClientTypes.ShutdownBehavior? @@ -18412,9 +18415,9 @@ extension EC2ClientTypes { /// /// If you specify InstanceRequirements, you can't specify InstanceType. Attribute-based instance type selection is only supported when using Auto Scaling groups, EC2 Fleet, and Spot Fleet to launch instances. If you plan to use the launch template in the [launch instance wizard](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html), or with the [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) API or [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html) Amazon Web Services CloudFormation resource, you can't specify InstanceRequirements. For more information, see [Attribute-based instance type selection for EC2 Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html), [Attribute-based instance type selection for Spot Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html), and [Spot placement score](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html) in the Amazon EC2 User Guide. public var instanceRequirements: EC2ClientTypes.InstanceRequirementsRequest? - /// The instance type. For more information, see [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the Amazon Elastic Compute Cloud User Guide. If you specify InstanceType, you can't specify InstanceRequirements. + /// The instance type. For more information, see [Amazon EC2 instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the Amazon EC2 User Guide. If you specify InstanceType, you can't specify InstanceRequirements. public var instanceType: EC2ClientTypes.InstanceType? - /// The ID of the kernel. We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see [User provided kernels](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html) in the Amazon Elastic Compute Cloud User Guide. + /// The ID of the kernel. We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see [User provided kernels](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html) in the Amazon EC2 User Guide. public var kernelId: Swift.String? /// The name of the key pair. You can create a key pair using [CreateKeyPair](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html) or [ImportKeyPair](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html). If you do not specify a key pair, you can't connect to the instance unless you choose an AMI that is configured to allow users another way to log in. public var keyName: Swift.String? @@ -18422,7 +18425,7 @@ extension EC2ClientTypes { public var licenseSpecifications: [EC2ClientTypes.LaunchTemplateLicenseConfigurationRequest]? /// The maintenance options for the instance. public var maintenanceOptions: EC2ClientTypes.LaunchTemplateInstanceMaintenanceOptionsRequest? - /// The metadata options for the instance. For more information, see [Instance metadata and user data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) in the Amazon Elastic Compute Cloud User Guide. + /// The metadata options for the instance. For more information, see [Instance metadata and user data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) in the Amazon EC2 User Guide. public var metadataOptions: EC2ClientTypes.LaunchTemplateInstanceMetadataOptionsRequest? /// The monitoring for the instance. public var monitoring: EC2ClientTypes.LaunchTemplatesMonitoringRequest? @@ -18432,7 +18435,7 @@ extension EC2ClientTypes { public var placement: EC2ClientTypes.LaunchTemplatePlacementRequest? /// The options for the instance hostname. The default values are inherited from the subnet. public var privateDnsNameOptions: EC2ClientTypes.LaunchTemplatePrivateDnsNameOptionsRequest? - /// The ID of the RAM disk. We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see [User provided kernels](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html) in the Amazon Elastic Compute Cloud User Guide. + /// The ID of the RAM disk. We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see [User provided kernels](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html) in the Amazon EC2 User Guide. public var ramDiskId: Swift.String? /// The IDs of the security groups. If you specify a network interface, you must specify any security groups as part of the network interface instead of using this parameter. public var securityGroupIds: [Swift.String]? @@ -18440,7 +18443,7 @@ extension EC2ClientTypes { public var securityGroups: [Swift.String]? /// The tags to apply to the resources that are created during instance launch. These tags are not applied to the launch template. public var tagSpecifications: [EC2ClientTypes.LaunchTemplateTagSpecificationRequest]? - /// The user data to make available to the instance. You must provide base64-encoded text. User data is limited to 16 KB. For more information, see [Run commands on your Linux instance at launch](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) (Linux) or [Work with instance user data](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instancedata-add-user-data.html) (Windows) in the Amazon Elastic Compute Cloud User Guide. If you are creating the launch template for use with Batch, the user data must be provided in the [ MIME multi-part archive format](https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive). For more information, see [Amazon EC2 user data in launch templates](https://docs.aws.amazon.com/batch/latest/userguide/launch-templates.html) in the Batch User Guide. + /// The user data to make available to the instance. You must provide base64-encoded text. User data is limited to 16 KB. For more information, see [Run commands on your Amazon EC2 instance at launch](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) in the Amazon EC2 User Guide. If you are creating the launch template for use with Batch, the user data must be provided in the [MIME multi-part archive format](https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive). For more information, see [Amazon EC2 user data in launch templates](https://docs.aws.amazon.com/batch/latest/userguide/launch-templates.html) in the Batch User Guide. public var userData: Swift.String? public init( @@ -18656,7 +18659,7 @@ public struct CreateLaunchTemplateVersionInput { public var launchTemplateId: Swift.String? /// The name of the launch template. You must specify either the launch template ID or the launch template name, but not both. public var launchTemplateName: Swift.String? - /// If true, and if a Systems Manager parameter is specified for ImageId, the AMI ID is displayed in the response for imageID. For more information, see [Use a Systems Manager parameter instead of an AMI ID](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#use-an-ssm-parameter-instead-of-an-ami-id) in the Amazon Elastic Compute Cloud User Guide. Default: false + /// If true, and if a Systems Manager parameter is specified for ImageId, the AMI ID is displayed in the response for imageID. For more information, see [Use a Systems Manager parameter instead of an AMI ID](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#use-an-ssm-parameter-instead-of-an-ami-id) in the Amazon EC2 User Guide. Default: false public var resolveAlias: Swift.Bool? /// The version of the launch template on which to base the new version. Snapshots applied to the block device mapping are ignored when creating a new version unless they are explicitly included. If you specify this parameter, the new version inherits the launch parameters from the source version. If you specify additional launch parameters for the new version, they overwrite any corresponding launch parameters inherited from the source version. If you omit this parameter, the new version contains only the launch parameters that you specify for the new version. public var sourceVersion: Swift.String? @@ -19043,7 +19046,7 @@ extension EC2ClientTypes { } extension EC2ClientTypes { - /// The metadata options for the instance. For more information, see [Instance metadata and user data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) in the Amazon Elastic Compute Cloud User Guide. + /// The metadata options for the instance. For more information, see [Instance metadata and user data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) in the Amazon EC2 User Guide. public struct LaunchTemplateInstanceMetadataOptions { /// Enables or disables the HTTP metadata endpoint on your instances. If the parameter is not specified, the default state is enabled. If you specify a value of disabled, you will not be able to access your instance metadata. public var httpEndpoint: EC2ClientTypes.LaunchTemplateInstanceMetadataEndpointState? @@ -19099,7 +19102,7 @@ extension EC2ClientTypes { } extension EC2ClientTypes { - /// A security group connection tracking specification that enables you to set the idle timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon Elastic Compute Cloud User Guide. + /// A security group connection tracking specification that enables you to set the idle timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon EC2 User Guide. public struct ConnectionTrackingSpecification { /// Timeout (in seconds) for idle TCP connections in an established state. Min: 60 seconds. Max: 432000 seconds (5 days). Default: 432000 seconds. Recommended: Less than 432000 seconds. public var tcpEstablishedTimeout: Swift.Int? @@ -19217,7 +19220,7 @@ extension EC2ClientTypes { public var associateCarrierIpAddress: Swift.Bool? /// Indicates whether to associate a public IPv4 address with eth0 for a new network interface. Amazon Web Services charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the Public IPv4 Address tab on the [Amazon VPC pricing page](http://aws.amazon.com/vpc/pricing/). public var associatePublicIpAddress: Swift.Bool? - /// A security group connection tracking specification that enables you to set the timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon Elastic Compute Cloud User Guide. + /// A security group connection tracking specification that enables you to set the timeout for connection tracking on an Elastic network interface. For more information, see [Idle connection tracking timeout](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon EC2 User Guide. public var connectionTrackingSpecification: EC2ClientTypes.ConnectionTrackingSpecification? /// Indicates whether the network interface is deleted when the instance is terminated. public var deleteOnTermination: Swift.Bool? @@ -19409,11 +19412,11 @@ extension EC2ClientTypes { public var blockDeviceMappings: [EC2ClientTypes.LaunchTemplateBlockDeviceMapping]? /// Information about the Capacity Reservation targeting option. public var capacityReservationSpecification: EC2ClientTypes.LaunchTemplateCapacityReservationSpecificationResponse? - /// The CPU options for the instance. For more information, see [Optimizing CPU options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html) in the Amazon Elastic Compute Cloud User Guide. + /// The CPU options for the instance. For more information, see [Optimize CPU options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html) in the Amazon EC2 User Guide. public var cpuOptions: EC2ClientTypes.LaunchTemplateCpuOptions? /// The credit option for CPU usage of the instance. public var creditSpecification: EC2ClientTypes.CreditSpecification? - /// Indicates whether the instance is enabled for stop protection. For more information, see [Stop protection](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection) in the Amazon Elastic Compute Cloud User Guide. + /// Indicates whether the instance is enabled for stop protection. For more information, see [Enable stop protection for your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-stop-protection.html) in the Amazon EC2 User Guide. public var disableApiStop: Swift.Bool? /// If set to true, indicates that the instance cannot be terminated using the Amazon EC2 console, command line tool, or API. public var disableApiTermination: Swift.Bool? @@ -19425,7 +19428,7 @@ extension EC2ClientTypes { public var elasticInferenceAccelerators: [EC2ClientTypes.LaunchTemplateElasticInferenceAcceleratorResponse]? /// Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. public var enclaveOptions: EC2ClientTypes.LaunchTemplateEnclaveOptions? - /// Indicates whether an instance is configured for hibernation. For more information, see [Hibernate your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) in the Amazon Elastic Compute Cloud User Guide. + /// Indicates whether an instance is configured for hibernation. For more information, see [Hibernate your Amazon EC2 instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) in the Amazon EC2 User Guide. public var hibernationOptions: EC2ClientTypes.LaunchTemplateHibernationOptions? /// The IAM instance profile. public var iamInstanceProfile: EC2ClientTypes.LaunchTemplateIamInstanceProfileSpecification? @@ -19438,7 +19441,7 @@ extension EC2ClientTypes { /// * If a Systems Manager parameter was specified in the request, and ResolveAlias was configured as false, then this is the parameter value. /// /// - /// For more information, see [Use a Systems Manager parameter instead of an AMI ID](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#use-an-ssm-parameter-instead-of-an-ami-id) in the Amazon Elastic Compute Cloud User Guide. + /// For more information, see [Use a Systems Manager parameter instead of an AMI ID](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#use-an-ssm-parameter-instead-of-an-ami-id) in the Amazon EC2 User Guide. public var imageId: Swift.String? /// Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown). public var instanceInitiatedShutdownBehavior: EC2ClientTypes.ShutdownBehavior? @@ -19456,7 +19459,7 @@ extension EC2ClientTypes { public var licenseSpecifications: [EC2ClientTypes.LaunchTemplateLicenseConfiguration]? /// The maintenance options for your instance. public var maintenanceOptions: EC2ClientTypes.LaunchTemplateInstanceMaintenanceOptions? - /// The metadata options for the instance. For more information, see [Instance metadata and user data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) in the Amazon Elastic Compute Cloud User Guide. + /// The metadata options for the instance. For more information, see [Instance metadata and user data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) in the Amazon EC2 User Guide. public var metadataOptions: EC2ClientTypes.LaunchTemplateInstanceMetadataOptions? /// The monitoring for the instance. public var monitoring: EC2ClientTypes.LaunchTemplatesMonitoring? @@ -20106,7 +20109,7 @@ public struct CreateManagedPrefixListInput { /// The IP address type. Valid Values: IPv4 | IPv6 /// This member is required. public var addressFamily: Swift.String? - /// Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). Constraints: Up to 255 UTF-8 characters in length. + /// Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). Constraints: Up to 255 UTF-8 characters in length. public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -20296,7 +20299,7 @@ extension EC2ClientTypes { public struct CreateNatGatewayInput { /// [Public NAT gateways only] The allocation ID of an Elastic IP address to associate with the NAT gateway. You cannot specify an Elastic IP address with a private NAT gateway. If the Elastic IP address is associated with another resource, you must first disassociate it. public var allocationId: Swift.String? - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). Constraint: Maximum 64 ASCII characters. + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). Constraint: Maximum 64 ASCII characters. public var clientToken: Swift.String? /// Indicates whether the NAT gateway supports public or private connectivity. The default is public connectivity. public var connectivityType: EC2ClientTypes.ConnectivityType? @@ -20343,17 +20346,17 @@ public struct CreateNatGatewayInput { } extension EC2ClientTypes { - /// Reserved. If you need to sustain traffic greater than the [documented limits](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), contact us through the [Support Center](https://console.aws.amazon.com/support/home?). + /// Reserved. If you need to sustain traffic greater than the [documented limits](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-gateways), contact Amazon Web Services Support. public struct ProvisionedBandwidth { - /// Reserved. If you need to sustain traffic greater than the [documented limits](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), contact us through the [Support Center](https://console.aws.amazon.com/support/home?). + /// Reserved. public var provisionTime: Foundation.Date? - /// Reserved. If you need to sustain traffic greater than the [documented limits](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), contact us through the [Support Center](https://console.aws.amazon.com/support/home?). + /// Reserved. public var provisioned: Swift.String? - /// Reserved. If you need to sustain traffic greater than the [documented limits](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), contact us through the [Support Center](https://console.aws.amazon.com/support/home?). + /// Reserved. public var requestTime: Foundation.Date? - /// Reserved. If you need to sustain traffic greater than the [documented limits](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), contact us through the [Support Center](https://console.aws.amazon.com/support/home?). + /// Reserved. public var requested: Swift.String? - /// Reserved. If you need to sustain traffic greater than the [documented limits](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), contact us through the [Support Center](https://console.aws.amazon.com/support/home?). + /// Reserved. public var status: Swift.String? public init( @@ -20441,7 +20444,7 @@ extension EC2ClientTypes { public var natGatewayAddresses: [EC2ClientTypes.NatGatewayAddress]? /// The ID of the NAT gateway. public var natGatewayId: Swift.String? - /// Reserved. If you need to sustain traffic greater than the [documented limits](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), contact us through the [Support Center](https://console.aws.amazon.com/support/home?). + /// Reserved. If you need to sustain traffic greater than the [documented limits](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-gateways), contact Amazon Web Services Support. public var provisionedBandwidth: EC2ClientTypes.ProvisionedBandwidth? /// The state of the NAT gateway. /// @@ -20511,7 +20514,7 @@ public struct CreateNatGatewayOutput { } public struct CreateNetworkAclInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -20655,7 +20658,7 @@ extension EC2ClientTypes { extension EC2ClientTypes { /// Describes a network ACL. public struct NetworkAcl { - /// Any associations between the network ACL and one or more subnets + /// Any associations between the network ACL and your subnets public var associations: [EC2ClientTypes.NetworkAclAssociation]? /// The entries (rules) in the network ACL. public var entries: [EC2ClientTypes.NetworkAclEntry]? @@ -20762,7 +20765,7 @@ public struct CreateNetworkAclEntryInput { } public struct CreateNetworkInsightsAccessScopeInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). /// This member is required. public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. @@ -20911,7 +20914,7 @@ extension EC2ClientTypes { } public struct CreateNetworkInsightsPathInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). /// This member is required. public var clientToken: Swift.String? /// The ID or ARN of the destination. If the resource is in another account, you must specify an ARN. @@ -21126,7 +21129,7 @@ extension EC2ClientTypes { } public struct CreateNetworkInterfaceInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// A connection tracking specification for the network interface. public var connectionTrackingSpecification: EC2ClientTypes.ConnectionTrackingSpecificationRequest? @@ -21331,7 +21334,7 @@ extension EC2ClientTypes { } extension EC2ClientTypes { - /// A security group connection tracking configuration that enables you to set the idle timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon Elastic Compute Cloud User Guide. + /// A security group connection tracking configuration that enables you to set the idle timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon EC2 User Guide. public struct ConnectionTrackingConfiguration { /// Timeout (in seconds) for idle TCP connections in an established state. Min: 60 seconds. Max: 432000 seconds (5 days). Default: 432000 seconds. Recommended: Less than 432000 seconds. public var tcpEstablishedTimeout: Swift.Int? @@ -21559,7 +21562,7 @@ extension EC2ClientTypes { public var attachment: EC2ClientTypes.NetworkInterfaceAttachment? /// The Availability Zone. public var availabilityZone: Swift.String? - /// A security group connection tracking configuration that enables you to set the timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon Elastic Compute Cloud User Guide. + /// A security group connection tracking configuration that enables you to set the timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon EC2 User Guide. public var connectionTrackingConfiguration: EC2ClientTypes.ConnectionTrackingConfiguration? /// Indicates whether a network interface with an IPv6 address is unreachable from the public internet. If the value is true, inbound traffic from the internet is dropped and you cannot assign an elastic IP address to the network interface. The network interface is reachable from peered VPCs and resources connected through a transit gateway, including on-premises networks. public var denyAllIgwTraffic: Swift.Bool? @@ -22067,7 +22070,7 @@ public struct CreatePublicIpv4PoolOutput { } public struct CreateReplaceRootVolumeTaskInput { - /// Unique, case-sensitive identifier you provide to ensure the idempotency of the request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier you provide to ensure the idempotency of the request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Indicates whether to automatically delete the original root volume after the root volume replacement task completes. To delete the original root volume, specify true. If you choose to keep the original root volume after the replacement task completes, you must manually delete it when you no longer need it. public var deleteReplacedRootVolume: Swift.Bool? @@ -22416,7 +22419,7 @@ public struct CreateRouteOutput { } public struct CreateRouteTableInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -22638,7 +22641,7 @@ extension EC2ClientTypes { extension EC2ClientTypes { /// Describes a route table. public struct RouteTable { - /// The associations between the route table and one or more subnets or a gateway. + /// The associations between the route table and your subnets or gateways. public var associations: [EC2ClientTypes.RouteTableAssociation]? /// The ID of the Amazon Web Services account that owns the route table. public var ownerId: Swift.String? @@ -22882,7 +22885,7 @@ public struct CreateSnapshotOutput { public var description: Swift.String? /// Indicates whether the snapshot is encrypted. public var encrypted: Swift.Bool? - /// The Amazon Resource Name (ARN) of the Key Management Service (KMS) KMS key that was used to protect the volume encryption key for the parent volume. + /// The Amazon Resource Name (ARN) of the KMS key that was used to protect the volume encryption key for the parent volume. public var kmsKeyId: Swift.String? /// The ARN of the Outpost on which the snapshot is stored. For more information, see [Amazon EBS local snapshots on Outposts](https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html) in the Amazon EBS User Guide. public var outpostArn: Swift.String? @@ -22902,7 +22905,7 @@ public struct CreateSnapshotOutput { public var startTime: Foundation.Date? /// The snapshot state. public var state: EC2ClientTypes.SnapshotState? - /// Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot copy operation fails (for example, if the proper Key Management Service (KMS) permissions are not obtained) this field displays error state details to help you diagnose why the error occurred. This parameter is only returned by [DescribeSnapshots]. + /// Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot copy operation fails (for example, if the proper KMS permissions are not obtained) this field displays error state details to help you diagnose why the error occurred. This parameter is only returned by [DescribeSnapshots]. public var stateMessage: Swift.String? /// The storage tier in which the snapshot is stored. standard indicates that the snapshot is stored in the standard snapshot storage tier and that it is ready for use. archive indicates that the snapshot is currently archived and that it must be restored before it can be used. public var storageTier: EC2ClientTypes.StorageTier? @@ -23295,7 +23298,7 @@ public struct CreateStoreImageTaskOutput { } public struct CreateSubnetInput { - /// The Availability Zone or Local Zone for the subnet. Default: Amazon Web Services selects one for you. If you create more than one subnet in your VPC, we do not necessarily select a different zone for each subnet. To create a subnet in a Local Zone, set this value to the Local Zone ID, for example us-west-2-lax-1a. For information about the Regions that support Local Zones, see [Local Zones locations](http://aws.amazon.com/about-aws/global-infrastructure/localzones/locations/). To create a subnet in an Outpost, set this value to the Availability Zone for the Outpost and specify the Outpost ARN. + /// The Availability Zone or Local Zone for the subnet. Default: Amazon Web Services selects one for you. If you create more than one subnet in your VPC, we do not necessarily select a different zone for each subnet. To create a subnet in a Local Zone, set this value to the Local Zone ID, for example us-west-2-lax-1a. For information about the Regions that support Local Zones, see [Available Local Zones](https://docs.aws.amazon.com/local-zones/latest/ug/available-local-zones.html). To create a subnet in an Outpost, set this value to the Availability Zone for the Outpost and specify the Outpost ARN. public var availabilityZone: Swift.String? /// The AZ ID or the Local Zone ID of the subnet. public var availabilityZoneId: Swift.String? @@ -23510,7 +23513,7 @@ public struct CreateTagsInput { } public struct CreateTrafficMirrorFilterInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// The description of the Traffic Mirror filter. public var description: Swift.String? @@ -23630,6 +23633,8 @@ extension EC2ClientTypes { public var sourceCidrBlock: Swift.String? /// The source port range assigned to the Traffic Mirror rule. public var sourcePortRange: EC2ClientTypes.TrafficMirrorPortRange? + /// Tags on Traffic Mirroring filter rules. + public var tags: [EC2ClientTypes.Tag]? /// The traffic direction assigned to the Traffic Mirror rule. public var trafficDirection: EC2ClientTypes.TrafficDirection? /// The ID of the Traffic Mirror filter that the rule is associated with. @@ -23646,6 +23651,7 @@ extension EC2ClientTypes { ruleNumber: Swift.Int? = nil, sourceCidrBlock: Swift.String? = nil, sourcePortRange: EC2ClientTypes.TrafficMirrorPortRange? = nil, + tags: [EC2ClientTypes.Tag]? = nil, trafficDirection: EC2ClientTypes.TrafficDirection? = nil, trafficMirrorFilterId: Swift.String? = nil, trafficMirrorFilterRuleId: Swift.String? = nil @@ -23659,6 +23665,7 @@ extension EC2ClientTypes { self.ruleNumber = ruleNumber self.sourceCidrBlock = sourceCidrBlock self.sourcePortRange = sourcePortRange + self.tags = tags self.trafficDirection = trafficDirection self.trafficMirrorFilterId = trafficMirrorFilterId self.trafficMirrorFilterRuleId = trafficMirrorFilterRuleId @@ -23730,7 +23737,7 @@ extension EC2ClientTypes { } public struct CreateTrafficMirrorFilterOutput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Information about the Traffic Mirror filter. public var trafficMirrorFilter: EC2ClientTypes.TrafficMirrorFilter? @@ -23766,7 +23773,7 @@ extension EC2ClientTypes { } public struct CreateTrafficMirrorFilterRuleInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// The description of the Traffic Mirror rule. public var description: Swift.String? @@ -23790,6 +23797,8 @@ public struct CreateTrafficMirrorFilterRuleInput { public var sourceCidrBlock: Swift.String? /// The source port range. public var sourcePortRange: EC2ClientTypes.TrafficMirrorPortRangeRequest? + /// Traffic Mirroring tags specifications. + public var tagSpecifications: [EC2ClientTypes.TagSpecification]? /// The type of traffic. /// This member is required. public var trafficDirection: EC2ClientTypes.TrafficDirection? @@ -23808,6 +23817,7 @@ public struct CreateTrafficMirrorFilterRuleInput { ruleNumber: Swift.Int? = nil, sourceCidrBlock: Swift.String? = nil, sourcePortRange: EC2ClientTypes.TrafficMirrorPortRangeRequest? = nil, + tagSpecifications: [EC2ClientTypes.TagSpecification]? = nil, trafficDirection: EC2ClientTypes.TrafficDirection? = nil, trafficMirrorFilterId: Swift.String? = nil ) @@ -23822,13 +23832,14 @@ public struct CreateTrafficMirrorFilterRuleInput { self.ruleNumber = ruleNumber self.sourceCidrBlock = sourceCidrBlock self.sourcePortRange = sourcePortRange + self.tagSpecifications = tagSpecifications self.trafficDirection = trafficDirection self.trafficMirrorFilterId = trafficMirrorFilterId } } public struct CreateTrafficMirrorFilterRuleOutput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// The Traffic Mirror rule. public var trafficMirrorFilterRule: EC2ClientTypes.TrafficMirrorFilterRule? @@ -23844,7 +23855,7 @@ public struct CreateTrafficMirrorFilterRuleOutput { } public struct CreateTrafficMirrorSessionInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// The description of the Traffic Mirror session. public var description: Swift.String? @@ -23866,7 +23877,7 @@ public struct CreateTrafficMirrorSessionInput { /// The ID of the Traffic Mirror target. /// This member is required. public var trafficMirrorTargetId: Swift.String? - /// The VXLAN ID for the Traffic Mirror session. For more information about the VXLAN protocol, see [RFC 7348](https://tools.ietf.org/html/rfc7348). If you do not specify a VirtualNetworkId, an account-wide unique id is chosen at random. + /// The VXLAN ID for the Traffic Mirror session. For more information about the VXLAN protocol, see [RFC 7348](https://datatracker.ietf.org/doc/html/rfc7348). If you do not specify a VirtualNetworkId, an account-wide unique ID is chosen at random. public var virtualNetworkId: Swift.Int? public init( @@ -23948,7 +23959,7 @@ extension EC2ClientTypes { } public struct CreateTrafficMirrorSessionOutput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Information about the Traffic Mirror session. public var trafficMirrorSession: EC2ClientTypes.TrafficMirrorSession? @@ -23964,7 +23975,7 @@ public struct CreateTrafficMirrorSessionOutput { } public struct CreateTrafficMirrorTargetInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// The description of the Traffic Mirror target. public var description: Swift.String? @@ -24076,7 +24087,7 @@ extension EC2ClientTypes { } public struct CreateTrafficMirrorTargetOutput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Information about the Traffic Mirror target. public var trafficMirrorTarget: EC2ClientTypes.TrafficMirrorTarget? @@ -26061,7 +26072,7 @@ public struct CreateVerifiedAccessEndpointInput { /// The type of attachment. /// This member is required. public var attachmentType: EC2ClientTypes.VerifiedAccessEndpointAttachmentType? - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// A description for the Verified Access endpoint. public var description: Swift.String? @@ -26339,7 +26350,7 @@ public struct CreateVerifiedAccessEndpointOutput { } public struct CreateVerifiedAccessGroupInput { - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// A description for the Verified Access group. public var description: Swift.String? @@ -26440,7 +26451,7 @@ public struct CreateVerifiedAccessGroupOutput { } public struct CreateVerifiedAccessInstanceInput { - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// A description for the Verified Access instance. public var description: Swift.String? @@ -26545,7 +26556,7 @@ extension EC2ClientTypes.CreateVerifiedAccessTrustProviderOidcOptions: Swift.Cus } public struct CreateVerifiedAccessTrustProviderInput { - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// A description for the Verified Access trust provider. public var description: Swift.String? @@ -26614,7 +26625,7 @@ public struct CreateVolumeInput { /// The ID of the Availability Zone in which to create the volume. For example, us-east-1a. /// This member is required. public var availabilityZone: Swift.String? - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensure Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensure Idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -26629,9 +26640,9 @@ public struct CreateVolumeInput { /// * io2: 100 - 256,000 IOPS /// /// - /// For io2 volumes, you can achieve up to 256,000 IOPS on [instances built on the Nitro System](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances). On other instances, you can achieve performance up to 32,000 IOPS. This parameter is required for io1 and io2 volumes. The default for gp3 volumes is 3,000 IOPS. This parameter is not supported for gp2, st1, sc1, or standard volumes. + /// For io2 volumes, you can achieve up to 256,000 IOPS on [instances built on the Nitro System](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html). On other instances, you can achieve performance up to 32,000 IOPS. This parameter is required for io1 and io2 volumes. The default for gp3 volumes is 3,000 IOPS. This parameter is not supported for gp2, st1, sc1, or standard volumes. public var iops: Swift.Int? - /// The identifier of the Key Management Service (KMS) KMS key to use for Amazon EBS encryption. If this parameter is not specified, your KMS key for Amazon EBS is used. If KmsKeyId is specified, the encrypted state must be true. You can specify the KMS key using any of the following: + /// The identifier of the KMS key to use for Amazon EBS encryption. If this parameter is not specified, your KMS key for Amazon EBS is used. If KmsKeyId is specified, the encrypted state must be true. You can specify the KMS key using any of the following: /// /// * Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab. /// @@ -26644,7 +26655,7 @@ public struct CreateVolumeInput { /// /// Amazon Web Services authenticates the KMS key asynchronously. Therefore, if you specify an ID, alias, or ARN that is not valid, the action can appear to complete, but eventually fails. public var kmsKeyId: Swift.String? - /// Indicates whether to enable Amazon EBS Multi-Attach. If you enable Multi-Attach, you can attach the volume to up to 16 [Instances built on the Nitro System](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances) in the same Availability Zone. This parameter is supported with io1 and io2 volumes only. For more information, see [ Amazon EBS Multi-Attach](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volumes-multi.html) in the Amazon EBS User Guide. + /// Indicates whether to enable Amazon EBS Multi-Attach. If you enable Multi-Attach, you can attach the volume to up to 16 [Instances built on the Nitro System](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html) in the same Availability Zone. This parameter is supported with io1 and io2 volumes only. For more information, see [ Amazon EBS Multi-Attach](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volumes-multi.html) in the Amazon EBS User Guide. public var multiAttachEnabled: Swift.Bool? /// The Amazon Resource Name (ARN) of the Outpost. public var outpostArn: Swift.String? @@ -26813,7 +26824,7 @@ public struct CreateVolumeOutput { public var fastRestored: Swift.Bool? /// The number of I/O operations per second (IOPS). For gp3, io1, and io2 volumes, this represents the number of IOPS that are provisioned for the volume. For gp2 volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting. public var iops: Swift.Int? - /// The Amazon Resource Name (ARN) of the Key Management Service (KMS) KMS key that was used to protect the volume encryption key for the volume. + /// The Amazon Resource Name (ARN) of the KMS key that was used to protect the volume encryption key for the volume. public var kmsKeyId: Swift.String? /// Indicates whether Amazon EBS Multi-Attach is enabled. public var multiAttachEnabled: Swift.Bool? @@ -27088,7 +27099,7 @@ extension EC2ClientTypes { } public struct CreateVpcEndpointInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// The DNS options for the endpoint. public var dnsOptions: EC2ClientTypes.DnsOptionsSpecification? @@ -27385,7 +27396,7 @@ public struct CreateVpcEndpointOutput { } public struct CreateVpcEndpointConnectionNotificationInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// The endpoint events for which to receive notifications. Valid values are Accept, Connect, Delete, and Reject. /// This member is required. @@ -27532,7 +27543,7 @@ public struct CreateVpcEndpointConnectionNotificationOutput { public struct CreateVpcEndpointServiceConfigurationInput { /// Indicates whether requests from service consumers to create an endpoint to your service must be accepted manually. public var acceptanceRequired: Swift.Bool? - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -31056,7 +31067,7 @@ public struct DeleteTransitGatewayVpcAttachmentOutput { } public struct DeleteVerifiedAccessEndpointInput { - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -31089,7 +31100,7 @@ public struct DeleteVerifiedAccessEndpointOutput { } public struct DeleteVerifiedAccessGroupInput { - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -31122,7 +31133,7 @@ public struct DeleteVerifiedAccessGroupOutput { } public struct DeleteVerifiedAccessInstanceInput { - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -31155,7 +31166,7 @@ public struct DeleteVerifiedAccessInstanceOutput { } public struct DeleteVerifiedAccessTrustProviderInput { - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -32776,7 +32787,7 @@ public struct DescribeCapacityReservationFleetsInput { extension EC2ClientTypes { /// Information about a Capacity Reservation Fleet. public struct CapacityReservationFleet { - /// The strategy used by the Capacity Reservation Fleet to determine which of the specified instance types to use. For more information, see For more information, see [ Allocation strategy](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy) in the Amazon EC2 User Guide. + /// The strategy used by the Capacity Reservation Fleet to determine which of the specified instance types to use. For more information, see For more information, see [Allocation strategy](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy) in the Amazon EC2 User Guide. public var allocationStrategy: Swift.String? /// The ARN of the Capacity Reservation Fleet. public var capacityReservationFleetArn: Swift.String? @@ -34327,7 +34338,7 @@ public struct DescribeCustomerGatewaysOutput { } public struct DescribeDhcpOptionsInput { - /// The IDs of one or more DHCP options sets. Default: Describes all your DHCP options sets. + /// The IDs of DHCP option sets. public var dhcpOptionsIds: [Swift.String]? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -34367,7 +34378,7 @@ public struct DescribeDhcpOptionsInput { } public struct DescribeDhcpOptionsOutput { - /// Information about one or more DHCP options sets. + /// Information about the DHCP options sets. public var dhcpOptions: [EC2ClientTypes.DhcpOptions]? /// The token to include in another request to get the next page of items. This value is null when there are no more items to return. public var nextToken: Swift.String? @@ -34498,7 +34509,7 @@ extension EC2ClientTypes { } extension EC2ClientTypes { - /// Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads that require graphics acceleration, we recommend that you use Amazon EC2 G4ad, G4dn, or G5 instances. Describes the status of an Elastic Graphics accelerator. + /// Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads that require graphics acceleration, we recommend that you use Amazon EC2 G4, G5, or G6 instances. Describes the status of an Elastic Graphics accelerator. public struct ElasticGpuHealth { /// The health status. public var status: EC2ClientTypes.ElasticGpuStatus? @@ -34540,7 +34551,7 @@ extension EC2ClientTypes { } extension EC2ClientTypes { - /// Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads that require graphics acceleration, we recommend that you use Amazon EC2 G4ad, G4dn, or G5 instances. Describes an Elastic Graphics accelerator. + /// Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads that require graphics acceleration, we recommend that you use Amazon EC2 G4, G5, or G6 instances. Describes an Elastic Graphics accelerator. public struct ElasticGpus { /// The Availability Zone in the which the Elastic Graphics accelerator resides. public var availabilityZone: Swift.String? @@ -35504,9 +35515,9 @@ extension EC2ClientTypes { public var allocationStrategy: EC2ClientTypes.FleetOnDemandAllocationStrategy? /// The strategy for using unused Capacity Reservations for fulfilling On-Demand capacity. Supported only for fleets of type instant. public var capacityReservationOptions: EC2ClientTypes.CapacityReservationOptions? - /// The maximum amount per hour for On-Demand Instances that you're willing to pay. If your fleet includes T instances that are configured as unlimited, and if their average CPU usage exceeds the baseline utilization, you will incur a charge for surplus credits. The maxTotalPrice does not account for surplus credits, and, if you use surplus credits, your final cost might be higher than what you specified for maxTotalPrice. For more information, see [Surplus credits can incur charges](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits) in the EC2 User Guide. + /// The maximum amount per hour for On-Demand Instances that you're willing to pay. If your fleet includes T instances that are configured as unlimited, and if their average CPU usage exceeds the baseline utilization, you will incur a charge for surplus credits. The maxTotalPrice does not account for surplus credits, and, if you use surplus credits, your final cost might be higher than what you specified for maxTotalPrice. For more information, see [Surplus credits can incur charges](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits) in the Amazon EC2 User Guide. public var maxTotalPrice: Swift.String? - /// The minimum target capacity for On-Demand Instances in the fleet. If the minimum target capacity is not reached, the fleet launches no instances. Supported only for fleets of type instant. At least one of the following must be specified: SingleAvailabilityZone | SingleInstanceType + /// The minimum target capacity for On-Demand Instances in the fleet. If this minimum capacity isn't reached, no instances are launched. Constraints: Maximum value of 1000. Supported only for fleets of type instant. At least one of the following must be specified: SingleAvailabilityZone | SingleInstanceType public var minTargetCapacity: Swift.Int? /// Indicates that the fleet launches all On-Demand Instances into a single Availability Zone. Supported only for fleets of type instant. public var singleAvailabilityZone: Swift.Bool? @@ -35572,7 +35583,7 @@ extension EC2ClientTypes { extension EC2ClientTypes { /// Describes the configuration of Spot Instances in an EC2 Fleet. public struct SpotOptions { - /// The strategy that determines how to allocate the target Spot Instance capacity across the Spot Instance pools specified by the EC2 Fleet launch configuration. For more information, see [Allocation strategies for Spot Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html) in the Amazon EC2 User Guide. price-capacity-optimized (recommended) EC2 Fleet identifies the pools with the highest capacity availability for the number of instances that are launching. This means that we will request Spot Instances from the pools that we believe have the lowest chance of interruption in the near term. EC2 Fleet then requests Spot Instances from the lowest priced of these pools. capacity-optimized EC2 Fleet identifies the pools with the highest capacity availability for the number of instances that are launching. This means that we will request Spot Instances from the pools that we believe have the lowest chance of interruption in the near term. To give certain instance types a higher chance of launching first, use capacity-optimized-prioritized. Set a priority for each instance type by using the Priority parameter for LaunchTemplateOverrides. You can assign the same priority to different LaunchTemplateOverrides. EC2 implements the priorities on a best-effort basis, but optimizes for capacity first. capacity-optimized-prioritized is supported only if your EC2 Fleet uses a launch template. Note that if the On-Demand AllocationStrategy is set to prioritized, the same priority is applied when fulfilling On-Demand capacity. diversified EC2 Fleet requests instances from all of the Spot Instance pools that you specify. lowest-price EC2 Fleet requests instances from the lowest priced Spot Instance pool that has available capacity. If the lowest priced pool doesn't have available capacity, the Spot Instances come from the next lowest priced pool that has available capacity. If a pool runs out of capacity before fulfilling your desired capacity, EC2 Fleet will continue to fulfill your request by drawing from the next lowest priced pool. To ensure that your desired capacity is met, you might receive Spot Instances from several pools. Because this strategy only considers instance price and not capacity availability, it might lead to high interruption rates. Default: lowest-price + /// The strategy that determines how to allocate the target Spot Instance capacity across the Spot Instance pools specified by the EC2 Fleet launch configuration. For more information, see [Allocation strategies for Spot Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html) in the Amazon EC2 User Guide. price-capacity-optimized (recommended) EC2 Fleet identifies the pools with the highest capacity availability for the number of instances that are launching. This means that we will request Spot Instances from the pools that we believe have the lowest chance of interruption in the near term. EC2 Fleet then requests Spot Instances from the lowest priced of these pools. capacity-optimized EC2 Fleet identifies the pools with the highest capacity availability for the number of instances that are launching. This means that we will request Spot Instances from the pools that we believe have the lowest chance of interruption in the near term. To give certain instance types a higher chance of launching first, use capacity-optimized-prioritized. Set a priority for each instance type by using the Priority parameter for LaunchTemplateOverrides. You can assign the same priority to different LaunchTemplateOverrides. EC2 implements the priorities on a best-effort basis, but optimizes for capacity first. capacity-optimized-prioritized is supported only if your EC2 Fleet uses a launch template. Note that if the On-Demand AllocationStrategy is set to prioritized, the same priority is applied when fulfilling On-Demand capacity. diversified EC2 Fleet requests instances from all of the Spot Instance pools that you specify. lowest-price (not recommended) We don't recommend the lowest-price allocation strategy because it has the highest risk of interruption for your Spot Instances. EC2 Fleet requests instances from the lowest priced Spot Instance pool that has available capacity. If the lowest priced pool doesn't have available capacity, the Spot Instances come from the next lowest priced pool that has available capacity. If a pool runs out of capacity before fulfilling your desired capacity, EC2 Fleet will continue to fulfill your request by drawing from the next lowest priced pool. To ensure that your desired capacity is met, you might receive Spot Instances from several pools. Because this strategy only considers instance price and not capacity availability, it might lead to high interruption rates. Default: lowest-price public var allocationStrategy: EC2ClientTypes.SpotAllocationStrategy? /// The behavior when a Spot Instance is interrupted. Default: terminate public var instanceInterruptionBehavior: EC2ClientTypes.SpotInstanceInterruptionBehavior? @@ -35580,9 +35591,9 @@ extension EC2ClientTypes { public var instancePoolsToUseCount: Swift.Int? /// The strategies for managing your workloads on your Spot Instances that will be interrupted. Currently only the capacity rebalance strategy is available. public var maintenanceStrategies: EC2ClientTypes.FleetSpotMaintenanceStrategies? - /// The maximum amount per hour for Spot Instances that you're willing to pay. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price. If you specify a maximum price, your Spot Instances will be interrupted more frequently than if you do not specify this parameter. If your fleet includes T instances that are configured as unlimited, and if their average CPU usage exceeds the baseline utilization, you will incur a charge for surplus credits. The maxTotalPrice does not account for surplus credits, and, if you use surplus credits, your final cost might be higher than what you specified for maxTotalPrice. For more information, see [Surplus credits can incur charges](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits) in the EC2 User Guide. + /// The maximum amount per hour for Spot Instances that you're willing to pay. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price. If you specify a maximum price, your Spot Instances will be interrupted more frequently than if you do not specify this parameter. If your fleet includes T instances that are configured as unlimited, and if their average CPU usage exceeds the baseline utilization, you will incur a charge for surplus credits. The maxTotalPrice does not account for surplus credits, and, if you use surplus credits, your final cost might be higher than what you specified for maxTotalPrice. For more information, see [Surplus credits can incur charges](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits) in the Amazon EC2 User Guide. public var maxTotalPrice: Swift.String? - /// The minimum target capacity for Spot Instances in the fleet. If the minimum target capacity is not reached, the fleet launches no instances. Supported only for fleets of type instant. At least one of the following must be specified: SingleAvailabilityZone | SingleInstanceType + /// The minimum target capacity for Spot Instances in the fleet. If this minimum capacity isn't reached, no instances are launched. Constraints: Maximum value of 1000. Supported only for fleets of type instant. At least one of the following must be specified: SingleAvailabilityZone | SingleInstanceType public var minTargetCapacity: Swift.Int? /// Indicates that the fleet launches all Spot Instances into a single Availability Zone. Supported only for fleets of type instant. public var singleAvailabilityZone: Swift.Bool? @@ -35852,7 +35863,7 @@ extension EC2ClientTypes { public var logFormat: Swift.String? /// The name of the flow log group. public var logGroupName: Swift.String? - /// The maximum interval of time, in seconds, during which a flow of packets is captured and aggregated into a flow log record. When a network interface is attached to a [Nitro-based instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances), the aggregation interval is always 60 seconds (1 minute) or less, regardless of the specified value. Valid Values: 60 | 600 + /// The maximum interval of time, in seconds, during which a flow of packets is captured and aggregated into a flow log record. When a network interface is attached to a [Nitro-based instance](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html), the aggregation interval is always 60 seconds (1 minute) or less, regardless of the specified value. Valid Values: 60 | 600 public var maxAggregationInterval: Swift.Int? /// The ID of the resource being monitored. public var resourceId: Swift.String? @@ -38754,7 +38765,7 @@ public struct DescribeInstancesInput { /// /// * private-dns-name-options.hostname-type - The type of hostname (ip-name | resource-name). /// - /// * private-ip-address - The private IPv4 address of the instance. + /// * private-ip-address - The private IPv4 address of the instance. This can only be used to filter by the primary IP address of the network interface attached to the instance. To filter by additional IP addresses assigned to the network interface, use the filter network-interface.addresses.private-ip-address. /// /// * product-code - The product code associated with the AMI used to launch the instance. /// @@ -38899,7 +38910,7 @@ extension EC2ClientTypes { } extension EC2ClientTypes { - /// Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads that require graphics acceleration, we recommend that you use Amazon EC2 G4ad, G4dn, or G5 instances. Describes the association between an instance and an Elastic Graphics accelerator. + /// Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads that require graphics acceleration, we recommend that you use Amazon EC2 G4, G5, or G6 instances. Describes the association between an instance and an Elastic Graphics accelerator. public struct ElasticGpuAssociation { /// The ID of the association. public var elasticGpuAssociationId: Swift.String? @@ -38955,7 +38966,7 @@ extension EC2ClientTypes { } extension EC2ClientTypes { - /// Indicates whether your instance is configured for hibernation. This parameter is valid only if the instance meets the [hibernation prerequisites](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html). For more information, see [Hibernate your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) in the Amazon EC2 User Guide. + /// Indicates whether your instance is configured for hibernation. This parameter is valid only if the instance meets the [hibernation prerequisites](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html). For more information, see [Hibernate your Amazon EC2 instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) in the Amazon EC2 User Guide. public struct HibernationOptions { /// If true, your instance is enabled for hibernation; otherwise, it is not enabled for hibernation. public var configured: Swift.Bool? @@ -39408,7 +39419,7 @@ extension EC2ClientTypes { } extension EC2ClientTypes { - /// A security group connection tracking specification response that enables you to set the idle timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon Elastic Compute Cloud User Guide. + /// A security group connection tracking specification response that enables you to set the idle timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon EC2 User Guide. public struct ConnectionTrackingSpecificationResponse { /// Timeout (in seconds) for idle TCP connections in an established state. Min: 60 seconds. Max: 432000 seconds (5 days). Default: 432000 seconds. Recommended: Less than 432000 seconds. public var tcpEstablishedTimeout: Swift.Int? @@ -39498,7 +39509,7 @@ extension EC2ClientTypes { public var association: EC2ClientTypes.InstanceNetworkInterfaceAssociation? /// The network interface attachment. public var attachment: EC2ClientTypes.InstanceNetworkInterfaceAttachment? - /// A security group connection tracking configuration that enables you to set the timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon Elastic Compute Cloud User Guide. + /// A security group connection tracking configuration that enables you to set the timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon EC2 User Guide. public var connectionTrackingConfiguration: EC2ClientTypes.ConnectionTrackingSpecificationResponse? /// The description. public var description: Swift.String? @@ -42013,7 +42024,7 @@ public struct DescribeInternetGatewaysInput { } public struct DescribeInternetGatewaysOutput { - /// Information about one or more internet gateways. + /// Information about the internet gateways. public var internetGateways: [EC2ClientTypes.InternetGateway]? /// The token to include in another request to get the next page of items. This value is null when there are no more items to return. public var nextToken: Swift.String? @@ -42578,7 +42589,7 @@ public struct DescribeLaunchTemplateVersionsInput { public var minVersion: Swift.String? /// The token to request the next page of results. public var nextToken: Swift.String? - /// If true, and if a Systems Manager parameter is specified for ImageId, the AMI ID is displayed in the response for imageId. If false, and if a Systems Manager parameter is specified for ImageId, the parameter is displayed in the response for imageId. For more information, see [Use a Systems Manager parameter instead of an AMI ID](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#use-an-ssm-parameter-instead-of-an-ami-id) in the Amazon Elastic Compute Cloud User Guide. Default: false + /// If true, and if a Systems Manager parameter is specified for ImageId, the AMI ID is displayed in the response for imageId. If false, and if a Systems Manager parameter is specified for ImageId, the parameter is displayed in the response for imageId. For more information, see [Use a Systems Manager parameter instead of an AMI ID](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#use-an-ssm-parameter-instead-of-an-ami-id) in the Amazon EC2 User Guide. Default: false public var resolveAlias: Swift.Bool? /// One or more versions of the launch template. Valid values depend on whether you are describing a specified launch template (by ID or name) or all launch templates in your account. To describe one or more versions of a specified launch template, valid values are $Latest, $Default, and numbers. To describe all launch templates in your account that are defined as the latest version, the valid value is $Latest. To describe all launch templates in your account that are defined as the default version, the valid value is $Default. You can specify $Latest and $Default in the same request. You cannot specify numbers. public var versions: [Swift.String]? @@ -43520,7 +43531,7 @@ public struct DescribeNetworkAclsInput { public var filters: [EC2ClientTypes.Filter]? /// The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination). public var maxResults: Swift.Int? - /// The IDs of the network ACLs. Default: Describes all your network ACLs. + /// The IDs of the network ACLs. public var networkAclIds: [Swift.String]? /// The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request. public var nextToken: Swift.String? @@ -43542,7 +43553,7 @@ public struct DescribeNetworkAclsInput { } public struct DescribeNetworkAclsOutput { - /// Information about one or more network ACLs. + /// Information about the network ACLs. public var networkAcls: [EC2ClientTypes.NetworkAcl]? /// The token to include in another request to get the next page of items. This value is null when there are no more items to return. public var nextToken: Swift.String? @@ -45266,7 +45277,7 @@ public struct DescribeReservedInstancesOfferingsInput { public var includeMarketplace: Swift.Bool? /// The tenancy of the instances covered by the reservation. A Reserved Instance with a tenancy of dedicated is applied to instances that run in a VPC on single-tenant hardware (i.e., Dedicated Instances). Important: The host value cannot be used with this parameter. Use the default or dedicated values only. Default: default public var instanceTenancy: EC2ClientTypes.Tenancy? - /// The instance type that the reservation will cover (for example, m1.small). For more information, see [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the Amazon EC2 User Guide. + /// The instance type that the reservation will cover (for example, m1.small). For more information, see [Amazon EC2 instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the Amazon EC2 User Guide. public var instanceType: EC2ClientTypes.InstanceType? /// The maximum duration (in seconds) to filter when searching for offerings. Default: 94608000 (3 years) public var maxDuration: Swift.Int? @@ -45483,7 +45494,7 @@ public struct DescribeRouteTablesInput { public var maxResults: Swift.Int? /// The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request. public var nextToken: Swift.String? - /// The IDs of the route tables. Default: Describes all your route tables. + /// The IDs of the route tables. public var routeTableIds: [Swift.String]? public init( @@ -45506,7 +45517,7 @@ public struct DescribeRouteTablesInput { public struct DescribeRouteTablesOutput { /// The token to include in another request to get the next page of items. This value is null when there are no more items to return. public var nextToken: Swift.String? - /// Information about one or more route tables. + /// Information about the route tables. public var routeTables: [EC2ClientTypes.RouteTable]? public init( @@ -46254,7 +46265,7 @@ public struct DescribeSnapshotsInput { /// /// * volume-size - The size of the volume, in GiB. public var filters: [EC2ClientTypes.Filter]? - /// The maximum number of snapshots to return for this request. This value can be between 5 and 1,000; if this value is larger than 1,000, only 1,000 results are returned. If this parameter is not used, then the request returns all snapshots. You cannot specify this parameter and the snapshot IDs parameter in the same request. For more information, see [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination). + /// The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination). public var maxResults: Swift.Int? /// The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request. public var nextToken: Swift.String? @@ -46294,7 +46305,7 @@ extension EC2ClientTypes { public var description: Swift.String? /// Indicates whether the snapshot is encrypted. public var encrypted: Swift.Bool? - /// The Amazon Resource Name (ARN) of the Key Management Service (KMS) KMS key that was used to protect the volume encryption key for the parent volume. + /// The Amazon Resource Name (ARN) of the KMS key that was used to protect the volume encryption key for the parent volume. public var kmsKeyId: Swift.String? /// The ARN of the Outpost on which the snapshot is stored. For more information, see [Amazon EBS local snapshots on Outposts](https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html) in the Amazon EBS User Guide. public var outpostArn: Swift.String? @@ -46314,7 +46325,7 @@ extension EC2ClientTypes { public var startTime: Foundation.Date? /// The snapshot state. public var state: EC2ClientTypes.SnapshotState? - /// Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot copy operation fails (for example, if the proper Key Management Service (KMS) permissions are not obtained) this field displays error state details to help you diagnose why the error occurred. This parameter is only returned by [DescribeSnapshots]. + /// Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot copy operation fails (for example, if the proper KMS permissions are not obtained) this field displays error state details to help you diagnose why the error occurred. This parameter is only returned by [DescribeSnapshots]. public var stateMessage: Swift.String? /// The storage tier in which the snapshot is stored. standard indicates that the snapshot is stored in the standard snapshot storage tier and that it is ready for use. archive indicates that the snapshot is currently archived and that it must be restored before it can be used. public var storageTier: EC2ClientTypes.StorageTier? @@ -46370,7 +46381,7 @@ extension EC2ClientTypes { } public struct DescribeSnapshotsOutput { - /// The token to include in another request to return the next page of snapshots. This value is null when there are no more snapshots to return. + /// The token to include in another request to get the next page of items. This value is null when there are no more items to return. public var nextToken: Swift.String? /// Information about the snapshots. public var snapshots: [EC2ClientTypes.Snapshot]? @@ -46822,7 +46833,7 @@ extension EC2ClientTypes { public var associateCarrierIpAddress: Swift.Bool? /// Indicates whether to assign a public IPv4 address to an instance you launch in a VPC. The public IP address can only be assigned to a network interface for eth0, and can only be assigned to a new network interface, not an existing one. You cannot specify more than one network interface in the request. If launching into a default subnet, the default value is true. Amazon Web Services charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the Public IPv4 Address tab on the [Amazon VPC pricing page](http://aws.amazon.com/vpc/pricing/). public var associatePublicIpAddress: Swift.Bool? - /// A security group connection tracking specification that enables you to set the timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon Elastic Compute Cloud User Guide. + /// A security group connection tracking specification that enables you to set the timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the Amazon EC2 User Guide. public var connectionTrackingSpecification: EC2ClientTypes.ConnectionTrackingSpecificationRequest? /// If set to true, the interface is deleted when the instance is terminated. You can specify true only if creating a new network interface when launching an instance. public var deleteOnTermination: Swift.Bool? @@ -47255,7 +47266,7 @@ extension EC2ClientTypes { } extension EC2ClientTypes { - /// The Spot Instance replacement strategy to use when Amazon EC2 emits a signal that your Spot Instance is at an elevated risk of being interrupted. For more information, see [Capacity rebalancing](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-capacity-rebalance.html) in the Amazon EC2 User Guide for Linux Instances. + /// The Spot Instance replacement strategy to use when Amazon EC2 emits a signal that your Spot Instance is at an elevated risk of being interrupted. For more information, see [Capacity rebalancing](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-capacity-rebalance.html) in the Amazon EC2 User Guide. public struct SpotCapacityRebalance { /// The replacement strategy to use. Only available for fleets of type maintain. launch - Spot Fleet launches a new replacement Spot Instance when a rebalance notification is emitted for an existing Spot Instance in the fleet. Spot Fleet does not terminate the instances that receive a rebalance notification. You can terminate the old instances, or you can leave them running. You are charged for all instances while they are running. launch-before-terminate - Spot Fleet launches a new replacement Spot Instance when a rebalance notification is emitted for an existing Spot Instance in the fleet, and then, after a delay that you specify (in TerminationDelay), terminates the instances that received a rebalance notification. public var replacementStrategy: EC2ClientTypes.ReplacementStrategy? @@ -47277,7 +47288,7 @@ extension EC2ClientTypes { extension EC2ClientTypes { /// The strategies for managing your Spot Instances that are at an elevated risk of being interrupted. public struct SpotMaintenanceStrategies { - /// The Spot Instance replacement strategy to use when Amazon EC2 emits a signal that your Spot Instance is at an elevated risk of being interrupted. For more information, see [Capacity rebalancing](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-capacity-rebalance.html) in the Amazon EC2 User Guide for Linux Instances. + /// The Spot Instance replacement strategy to use when Amazon EC2 emits a signal that your Spot Instance is at an elevated risk of being interrupted. For more information, see [Capacity rebalancing](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-capacity-rebalance.html) in the Amazon EC2 User Guide. public var capacityRebalance: EC2ClientTypes.SpotCapacityRebalance? public init( @@ -47293,7 +47304,7 @@ extension EC2ClientTypes { extension EC2ClientTypes { /// Describes the configuration of a Spot Fleet request. public struct SpotFleetRequestConfigData { - /// The strategy that determines how to allocate the target Spot Instance capacity across the Spot Instance pools specified by the Spot Fleet launch configuration. For more information, see [Allocation strategies for Spot Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-allocation-strategy.html) in the Amazon EC2 User Guide. priceCapacityOptimized (recommended) Spot Fleet identifies the pools with the highest capacity availability for the number of instances that are launching. This means that we will request Spot Instances from the pools that we believe have the lowest chance of interruption in the near term. Spot Fleet then requests Spot Instances from the lowest priced of these pools. capacityOptimized Spot Fleet identifies the pools with the highest capacity availability for the number of instances that are launching. This means that we will request Spot Instances from the pools that we believe have the lowest chance of interruption in the near term. To give certain instance types a higher chance of launching first, use capacityOptimizedPrioritized. Set a priority for each instance type by using the Priority parameter for LaunchTemplateOverrides. You can assign the same priority to different LaunchTemplateOverrides. EC2 implements the priorities on a best-effort basis, but optimizes for capacity first. capacityOptimizedPrioritized is supported only if your Spot Fleet uses a launch template. Note that if the OnDemandAllocationStrategy is set to prioritized, the same priority is applied when fulfilling On-Demand capacity. diversified Spot Fleet requests instances from all of the Spot Instance pools that you specify. lowestPrice Spot Fleet requests instances from the lowest priced Spot Instance pool that has available capacity. If the lowest priced pool doesn't have available capacity, the Spot Instances come from the next lowest priced pool that has available capacity. If a pool runs out of capacity before fulfilling your desired capacity, Spot Fleet will continue to fulfill your request by drawing from the next lowest priced pool. To ensure that your desired capacity is met, you might receive Spot Instances from several pools. Because this strategy only considers instance price and not capacity availability, it might lead to high interruption rates. Default: lowestPrice + /// The strategy that determines how to allocate the target Spot Instance capacity across the Spot Instance pools specified by the Spot Fleet launch configuration. For more information, see [Allocation strategies for Spot Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-allocation-strategy.html) in the Amazon EC2 User Guide. priceCapacityOptimized (recommended) Spot Fleet identifies the pools with the highest capacity availability for the number of instances that are launching. This means that we will request Spot Instances from the pools that we believe have the lowest chance of interruption in the near term. Spot Fleet then requests Spot Instances from the lowest priced of these pools. capacityOptimized Spot Fleet identifies the pools with the highest capacity availability for the number of instances that are launching. This means that we will request Spot Instances from the pools that we believe have the lowest chance of interruption in the near term. To give certain instance types a higher chance of launching first, use capacityOptimizedPrioritized. Set a priority for each instance type by using the Priority parameter for LaunchTemplateOverrides. You can assign the same priority to different LaunchTemplateOverrides. EC2 implements the priorities on a best-effort basis, but optimizes for capacity first. capacityOptimizedPrioritized is supported only if your Spot Fleet uses a launch template. Note that if the OnDemandAllocationStrategy is set to prioritized, the same priority is applied when fulfilling On-Demand capacity. diversified Spot Fleet requests instances from all of the Spot Instance pools that you specify. lowestPrice (not recommended) We don't recommend the lowestPrice allocation strategy because it has the highest risk of interruption for your Spot Instances. Spot Fleet requests instances from the lowest priced Spot Instance pool that has available capacity. If the lowest priced pool doesn't have available capacity, the Spot Instances come from the next lowest priced pool that has available capacity. If a pool runs out of capacity before fulfilling your desired capacity, Spot Fleet will continue to fulfill your request by drawing from the next lowest priced pool. To ensure that your desired capacity is met, you might receive Spot Instances from several pools. Because this strategy only considers instance price and not capacity availability, it might lead to high interruption rates. Default: lowestPrice public var allocationStrategy: EC2ClientTypes.AllocationStrategy? /// A unique, case-sensitive identifier that you provide to ensure the idempotency of your listings. This helps to avoid duplicate listings. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). public var clientToken: Swift.String? @@ -47320,7 +47331,7 @@ extension EC2ClientTypes { public var onDemandAllocationStrategy: EC2ClientTypes.OnDemandAllocationStrategy? /// The number of On-Demand units fulfilled by this request compared to the set target On-Demand capacity. public var onDemandFulfilledCapacity: Swift.Double? - /// The maximum amount per hour for On-Demand Instances that you're willing to pay. You can use the onDemandMaxTotalPrice parameter, the spotMaxTotalPrice parameter, or both parameters to ensure that your fleet cost does not exceed your budget. If you set a maximum price per hour for the On-Demand Instances and Spot Instances in your request, Spot Fleet will launch instances until it reaches the maximum amount you're willing to pay. When the maximum amount you're willing to pay is reached, the fleet stops launching instances even if it hasn’t met the target capacity. If your fleet includes T instances that are configured as unlimited, and if their average CPU usage exceeds the baseline utilization, you will incur a charge for surplus credits. The onDemandMaxTotalPrice does not account for surplus credits, and, if you use surplus credits, your final cost might be higher than what you specified for onDemandMaxTotalPrice. For more information, see [Surplus credits can incur charges](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits) in the EC2 User Guide. + /// The maximum amount per hour for On-Demand Instances that you're willing to pay. You can use the onDemandMaxTotalPrice parameter, the spotMaxTotalPrice parameter, or both parameters to ensure that your fleet cost does not exceed your budget. If you set a maximum price per hour for the On-Demand Instances and Spot Instances in your request, Spot Fleet will launch instances until it reaches the maximum amount you're willing to pay. When the maximum amount you're willing to pay is reached, the fleet stops launching instances even if it hasn’t met the target capacity. If your fleet includes T instances that are configured as unlimited, and if their average CPU usage exceeds the baseline utilization, you will incur a charge for surplus credits. The onDemandMaxTotalPrice does not account for surplus credits, and, if you use surplus credits, your final cost might be higher than what you specified for onDemandMaxTotalPrice. For more information, see [Surplus credits can incur charges](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits) in the Amazon EC2 User Guide. public var onDemandMaxTotalPrice: Swift.String? /// The number of On-Demand units to request. You can choose to set the target capacity in terms of instances or a performance characteristic that is important to your application workload, such as vCPUs, memory, or I/O. If the request type is maintain, you can specify a target capacity of 0 and add capacity later. public var onDemandTargetCapacity: Swift.Int? @@ -47328,7 +47339,7 @@ extension EC2ClientTypes { public var replaceUnhealthyInstances: Swift.Bool? /// The strategies for managing your Spot Instances that are at an elevated risk of being interrupted. public var spotMaintenanceStrategies: EC2ClientTypes.SpotMaintenanceStrategies? - /// The maximum amount per hour for Spot Instances that you're willing to pay. You can use the spotMaxTotalPrice parameter, the onDemandMaxTotalPrice parameter, or both parameters to ensure that your fleet cost does not exceed your budget. If you set a maximum price per hour for the On-Demand Instances and Spot Instances in your request, Spot Fleet will launch instances until it reaches the maximum amount you're willing to pay. When the maximum amount you're willing to pay is reached, the fleet stops launching instances even if it hasn’t met the target capacity. If your fleet includes T instances that are configured as unlimited, and if their average CPU usage exceeds the baseline utilization, you will incur a charge for surplus credits. The spotMaxTotalPrice does not account for surplus credits, and, if you use surplus credits, your final cost might be higher than what you specified for spotMaxTotalPrice. For more information, see [Surplus credits can incur charges](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits) in the EC2 User Guide. + /// The maximum amount per hour for Spot Instances that you're willing to pay. You can use the spotMaxTotalPrice parameter, the onDemandMaxTotalPrice parameter, or both parameters to ensure that your fleet cost does not exceed your budget. If you set a maximum price per hour for the On-Demand Instances and Spot Instances in your request, Spot Fleet will launch instances until it reaches the maximum amount you're willing to pay. When the maximum amount you're willing to pay is reached, the fleet stops launching instances even if it hasn’t met the target capacity. If your fleet includes T instances that are configured as unlimited, and if their average CPU usage exceeds the baseline utilization, you will incur a charge for surplus credits. The spotMaxTotalPrice does not account for surplus credits, and, if you use surplus credits, your final cost might be higher than what you specified for spotMaxTotalPrice. For more information, see [Surplus credits can incur charges](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits) in the Amazon EC2 User Guide. public var spotMaxTotalPrice: Swift.String? /// The maximum price per unit hour that you are willing to pay for a Spot Instance. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price. If you specify a maximum price, your instances will be interrupted more frequently than if you do not specify this parameter. public var spotPrice: Swift.String? @@ -47529,7 +47540,7 @@ public struct DescribeSpotInstanceRequestsInput { /// /// * spot-price - The maximum hourly price for any Spot Instance launched to fulfill the request. /// - /// * state - The state of the Spot Instance request (open | active | closed | cancelled | failed). Spot request status information can help you track your Amazon EC2 Spot Instance requests. For more information, see [Spot request status](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html) in the Amazon EC2 User Guide for Linux Instances. + /// * state - The state of the Spot Instance request (open | active | closed | cancelled | failed). Spot request status information can help you track your Amazon EC2 Spot Instance requests. For more information, see [Spot request status](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html) in the Amazon EC2 User Guide. /// /// * status-code - The short code describing the most recent evaluation of your Spot Instance request. /// @@ -47706,7 +47717,7 @@ extension EC2ClientTypes { extension EC2ClientTypes { /// Describes the status of a Spot Instance request. public struct SpotInstanceStatus { - /// The status code. For a list of status codes, see [Spot request status codes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html#spot-instance-request-status-understand) in the Amazon EC2 User Guide for Linux Instances. + /// The status code. For a list of status codes, see [Spot request status codes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html#spot-instance-request-status-understand) in the Amazon EC2 User Guide. public var code: Swift.String? /// The description for the status code. public var message: Swift.String? @@ -47756,7 +47767,7 @@ extension EC2ClientTypes { public var spotInstanceRequestId: Swift.String? /// The maximum price per unit hour that you are willing to pay for a Spot Instance. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price. If you specify a maximum price, your instances will be interrupted more frequently than if you do not specify this parameter. public var spotPrice: Swift.String? - /// The state of the Spot Instance request. Spot request status information helps track your Spot Instance requests. For more information, see [Spot request status](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html) in the Amazon EC2 User Guide for Linux Instances. + /// The state of the Spot Instance request. Spot request status information helps track your Spot Instance requests. For more information, see [Spot request status](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html) in the Amazon EC2 User Guide. public var state: EC2ClientTypes.SpotInstanceState? /// The status code and status message describing the Spot Instance request. public var status: EC2ClientTypes.SpotInstanceStatus? @@ -48225,7 +48236,7 @@ public struct DescribeSubnetsInput { public struct DescribeSubnetsOutput { /// The token to include in another request to get the next page of items. This value is null when there are no more items to return. public var nextToken: Swift.String? - /// Information about one or more subnets. + /// Information about the subnets. public var subnets: [EC2ClientTypes.Subnet]? public init( @@ -48316,6 +48327,72 @@ public struct DescribeTagsOutput { } } +public struct DescribeTrafficMirrorFilterRulesInput { + /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. + public var dryRun: Swift.Bool? + /// Traffic mirror filters. + /// + /// * traffic-mirror-filter-rule-id: The ID of the Traffic Mirror rule. + /// + /// * traffic-mirror-filter-id: The ID of the filter that this rule is associated with. + /// + /// * rule-number: The number of the Traffic Mirror rule. + /// + /// * rule-action: The action taken on the filtered traffic. Possible actions are accept and reject. + /// + /// * traffic-direction: The traffic direction. Possible directions are ingress and egress. + /// + /// * protocol: The protocol, for example UDP, assigned to the Traffic Mirror rule. + /// + /// * source-cidr-block: The source CIDR block assigned to the Traffic Mirror rule. + /// + /// * destination-cidr-block: The destination CIDR block assigned to the Traffic Mirror rule. + /// + /// * description: The description of the Traffic Mirror rule. + public var filters: [EC2ClientTypes.Filter]? + /// The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned nextToken value. + public var maxResults: Swift.Int? + /// The token for the next page of results. + public var nextToken: Swift.String? + /// Traffic filter ID. + public var trafficMirrorFilterId: Swift.String? + /// Traffic filter rule IDs. + public var trafficMirrorFilterRuleIds: [Swift.String]? + + public init( + dryRun: Swift.Bool? = nil, + filters: [EC2ClientTypes.Filter]? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + trafficMirrorFilterId: Swift.String? = nil, + trafficMirrorFilterRuleIds: [Swift.String]? = nil + ) + { + self.dryRun = dryRun + self.filters = filters + self.maxResults = maxResults + self.nextToken = nextToken + self.trafficMirrorFilterId = trafficMirrorFilterId + self.trafficMirrorFilterRuleIds = trafficMirrorFilterRuleIds + } +} + +public struct DescribeTrafficMirrorFilterRulesOutput { + /// The token to use to retrieve the next page of results. The value is null when there are no more results to return. + public var nextToken: Swift.String? + /// Traffic mirror rules. + public var trafficMirrorFilterRules: [EC2ClientTypes.TrafficMirrorFilterRule]? + + public init( + nextToken: Swift.String? = nil, + trafficMirrorFilterRules: [EC2ClientTypes.TrafficMirrorFilterRule]? = nil + ) + { + self.nextToken = nextToken + self.trafficMirrorFilterRules = trafficMirrorFilterRules + } +} + public struct DescribeTrafficMirrorFiltersInput { /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -49659,9 +49736,9 @@ public struct DescribeVolumesInput { /// /// * volume-type - The Amazon EBS volume type (gp2 | gp3 | io1 | io2 | st1 | sc1| standard) public var filters: [EC2ClientTypes.Filter]? - /// The maximum number of volumes to return for this request. This value can be between 5 and 500; if you specify a value larger than 500, only 500 items are returned. If this parameter is not used, then all items are returned. You cannot specify this parameter and the volume IDs parameter in the same request. For more information, see [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination). + /// The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination). public var maxResults: Swift.Int? - /// The token returned from a previous paginated request. Pagination continues from the end of the items returned from the previous request. + /// The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request. public var nextToken: Swift.String? /// The volume IDs. public var volumeIds: [Swift.String]? @@ -49697,7 +49774,7 @@ extension EC2ClientTypes { public var fastRestored: Swift.Bool? /// The number of I/O operations per second (IOPS). For gp3, io1, and io2 volumes, this represents the number of IOPS that are provisioned for the volume. For gp2 volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting. public var iops: Swift.Int? - /// The Amazon Resource Name (ARN) of the Key Management Service (KMS) KMS key that was used to protect the volume encryption key for the volume. + /// The Amazon Resource Name (ARN) of the KMS key that was used to protect the volume encryption key for the volume. public var kmsKeyId: Swift.String? /// Indicates whether Amazon EBS Multi-Attach is enabled. public var multiAttachEnabled: Swift.Bool? @@ -49807,7 +49884,7 @@ public struct DescribeVolumesModificationsInput { public var filters: [EC2ClientTypes.Filter]? /// The maximum number of results (up to a limit of 500) to be returned in a paginated request. For more information, see [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination). public var maxResults: Swift.Int? - /// The token returned by a previous paginated request. Pagination continues from the end of the items returned by the previous request. + /// The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request. public var nextToken: Swift.String? /// The IDs of the volumes. public var volumeIds: [Swift.String]? @@ -49940,7 +50017,7 @@ extension EC2ClientTypes { } public struct DescribeVolumesModificationsOutput { - /// The token to include in another request to get the next page of items. This value is null if there are no more items to return. + /// The token to include in another request to get the next page of items. This value is null when there are no more items to return. public var nextToken: Swift.String? /// Information about the volume modifications. public var volumesModifications: [EC2ClientTypes.VolumeModification]? @@ -49984,7 +50061,7 @@ public struct DescribeVolumeStatusInput { /// /// * volume-status.status - The status of the volume (ok | impaired | warning | insufficient-data). public var filters: [EC2ClientTypes.Filter]? - /// The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. This value can be between 5 and 1,000; if the value is larger than 1,000, only 1,000 results are returned. If this parameter is not used, then all items are returned. You cannot specify this parameter and the volume IDs parameter in the same request. For more information, see [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination). + /// The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination). public var maxResults: Swift.Int? /// The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request. public var nextToken: Swift.String? @@ -50653,7 +50730,7 @@ public struct DescribeVpcEndpointsInput { public struct DescribeVpcEndpointsOutput { /// The token to use when requesting the next set of items. If there are no additional items to return, the string is empty. public var nextToken: Swift.String? - /// Information about the endpoints. + /// Information about the VPC endpoints. public var vpcEndpoints: [EC2ClientTypes.VpcEndpoint]? public init( @@ -51026,7 +51103,7 @@ public struct DescribeVpcsInput { public var maxResults: Swift.Int? /// The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request. public var nextToken: Swift.String? - /// The IDs of the VPCs. Default: Describes all your VPCs. + /// The IDs of the VPCs. public var vpcIds: [Swift.String]? public init( @@ -51048,7 +51125,7 @@ public struct DescribeVpcsInput { public struct DescribeVpcsOutput { /// The token to include in another request to get the next page of items. This value is null when there are no more items to return. public var nextToken: Swift.String? - /// Information about one or more VPCs. + /// Information about the VPCs. public var vpcs: [EC2ClientTypes.Vpc]? public init( @@ -51256,7 +51333,7 @@ public struct DetachNetworkInterfaceInput { } public struct DetachVerifiedAccessTrustProviderInput { - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -52573,7 +52650,7 @@ public struct DisassociateTrunkInterfaceInput { /// The ID of the association /// This member is required. public var associationId: Swift.String? - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to Ensure Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -52591,7 +52668,7 @@ public struct DisassociateTrunkInterfaceInput { } public struct DisassociateTrunkInterfaceOutput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to Ensure Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Returns true if the request succeeds; otherwise, it returns an error. public var `return`: Swift.Bool? @@ -58576,7 +58653,7 @@ public struct ModifyAvailabilityZoneGroupInput { /// The name of the Availability Zone group, Local Zone group, or Wavelength Zone group. /// This member is required. public var groupName: Swift.String? - /// Indicates whether you are opted in to the Local Zone group or Wavelength Zone group. The only valid value is opted-in. You must contact [Amazon Web Services Support](https://console.aws.amazon.com/support/home#/case/create%3FissueType=customer-service%26serviceCode=general-info%26getting-started%26categoryCode=using-aws%26services) to opt out of a Local Zone or Wavelength Zone group. + /// Indicates whether to opt in to the zone group. The only valid value is opted-in. You must contact Amazon Web Services Support to opt out of a Local Zone or Wavelength Zone group. /// This member is required. public var optInStatus: EC2ClientTypes.ModifyAvailabilityZoneOptInStatus? @@ -58840,7 +58917,7 @@ public struct ModifyDefaultCreditSpecificationOutput { public struct ModifyEbsDefaultKmsKeyIdInput { /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// The identifier of the Key Management Service (KMS) KMS key to use for Amazon EBS encryption. If this parameter is not specified, your KMS key for Amazon EBS is used. If KmsKeyId is specified, the encrypted state must be true. You can specify the KMS key using any of the following: + /// The identifier of the KMS key to use for Amazon EBS encryption. If this parameter is not specified, your KMS key for Amazon EBS is used. If KmsKeyId is specified, the encrypted state must be true. You can specify the KMS key using any of the following: /// /// * Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab. /// @@ -59058,9 +59135,9 @@ public struct ModifyHostsInput { /// The IDs of the Dedicated Hosts to modify. /// This member is required. public var hostIds: [Swift.String]? - /// Indicates whether to enable or disable host maintenance for the Dedicated Host. For more information, see [ Host maintenance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-maintenance.html) in the Amazon EC2 User Guide. + /// Indicates whether to enable or disable host maintenance for the Dedicated Host. For more information, see [Host maintenance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-maintenance.html) in the Amazon EC2 User Guide. public var hostMaintenance: EC2ClientTypes.HostMaintenance? - /// Indicates whether to enable or disable host recovery for the Dedicated Host. For more information, see [ Host recovery](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html) in the Amazon EC2 User Guide. + /// Indicates whether to enable or disable host recovery for the Dedicated Host. For more information, see [Host recovery](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html) in the Amazon EC2 User Guide. public var hostRecovery: EC2ClientTypes.HostRecovery? /// Specifies the instance family to be supported by the Dedicated Host. Specify this parameter to modify a Dedicated Host to support multiple instance types within its current instance family. If you want to modify a Dedicated Host to support a specific instance type only, omit this parameter and specify InstanceType instead. You cannot specify InstanceFamily and InstanceType in the same request. public var instanceFamily: Swift.String? @@ -59291,7 +59368,7 @@ public struct ModifyInstanceAttributeInput { public var attribute: EC2ClientTypes.InstanceAttributeName? /// Modifies the DeleteOnTermination attribute for volumes that are currently attached. The volume must be owned by the caller. If no value is specified for DeleteOnTermination, the default is true and the volume is deleted when the instance is terminated. You can't modify the DeleteOnTermination attribute for volumes that are attached to Fargate tasks. To add instance store volumes to an Amazon EBS-backed instance, you must add them when you launch the instance. For more information, see [Update the block device mapping when launching an instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#Using_OverridingAMIBDM) in the Amazon EC2 User Guide. public var blockDeviceMappings: [EC2ClientTypes.InstanceBlockDeviceMappingSpecification]? - /// Indicates whether an instance is enabled for stop protection. For more information, see [Stop Protection](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection). + /// Indicates whether an instance is enabled for stop protection. For more information, see [Enable stop protection for your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-stop-protection.html). public var disableApiStop: EC2ClientTypes.AttributeBooleanValue? /// If the value is true, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. You cannot use this parameter for Spot Instances. public var disableApiTermination: EC2ClientTypes.AttributeBooleanValue? @@ -60998,7 +61075,7 @@ public struct ModifyTrafficMirrorFilterRuleInput { } public struct ModifyTrafficMirrorFilterRuleOutput { - /// Modifies a Traffic Mirror rule. + /// Tags are not returned for ModifyTrafficMirrorFilterRule. A Traffic Mirror rule. public var trafficMirrorFilterRule: EC2ClientTypes.TrafficMirrorFilterRule? public init( @@ -61347,7 +61424,7 @@ extension EC2ClientTypes { } public struct ModifyVerifiedAccessEndpointInput { - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// A description for the Verified Access endpoint. public var description: Swift.String? @@ -61396,7 +61473,7 @@ public struct ModifyVerifiedAccessEndpointOutput { } public struct ModifyVerifiedAccessEndpointPolicyInput { - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -61449,7 +61526,7 @@ public struct ModifyVerifiedAccessEndpointPolicyOutput { } public struct ModifyVerifiedAccessGroupInput { - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// A description for the Verified Access group. public var description: Swift.String? @@ -61490,7 +61567,7 @@ public struct ModifyVerifiedAccessGroupOutput { } public struct ModifyVerifiedAccessGroupPolicyInput { - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -61543,7 +61620,7 @@ public struct ModifyVerifiedAccessGroupPolicyOutput { } public struct ModifyVerifiedAccessInstanceInput { - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// A description for the Verified Access instance. public var description: Swift.String? @@ -61686,7 +61763,7 @@ public struct ModifyVerifiedAccessInstanceLoggingConfigurationInput { /// The configuration options for Verified Access instances. /// This member is required. public var accessLogs: EC2ClientTypes.VerifiedAccessLogOptions? - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -61782,7 +61859,7 @@ extension EC2ClientTypes.ModifyVerifiedAccessTrustProviderOidcOptions: Swift.Cus } public struct ModifyVerifiedAccessTrustProviderInput { - /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive token that you provide to ensure idempotency of your modification request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// A description for the Verified Access trust provider. public var description: Swift.String? @@ -61842,9 +61919,9 @@ public struct ModifyVolumeInput { /// * io2: 100 - 256,000 IOPS /// /// - /// For io2 volumes, you can achieve up to 256,000 IOPS on [instances built on the Nitro System](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances). On other instances, you can achieve performance up to 32,000 IOPS. Default: The existing value is retained if you keep the same volume type. If you change the volume type to io1, io2, or gp3, the default is 3,000. + /// For io2 volumes, you can achieve up to 256,000 IOPS on [instances built on the Nitro System](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html). On other instances, you can achieve performance up to 32,000 IOPS. Default: The existing value is retained if you keep the same volume type. If you change the volume type to io1, io2, or gp3, the default is 3,000. public var iops: Swift.Int? - /// Specifies whether to enable Amazon EBS Multi-Attach. If you enable Multi-Attach, you can attach the volume to up to 16 [ Nitro-based instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances) in the same Availability Zone. This parameter is supported with io1 and io2 volumes only. For more information, see [ Amazon EBS Multi-Attach](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volumes-multi.html) in the Amazon EBS User Guide. + /// Specifies whether to enable Amazon EBS Multi-Attach. If you enable Multi-Attach, you can attach the volume to up to 16 [ Nitro-based instances](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html) in the same Availability Zone. This parameter is supported with io1 and io2 volumes only. For more information, see [ Amazon EBS Multi-Attach](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volumes-multi.html) in the Amazon EBS User Guide. public var multiAttachEnabled: Swift.Bool? /// The target size of the volume, in GiB. The target volume size must be greater than or equal to the existing size of the volume. The following are the supported volumes sizes for each volume type: /// @@ -62784,7 +62861,7 @@ public struct MoveByoipCidrToIpamOutput { } extension EC2ClientTypes { - /// Provides authorization for Amazon to bring a specific IP address range to a specific Amazon Web Services account using bring your own IP addresses (BYOIP). For more information, see [Configuring your BYOIP address range](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html#prepare-for-byoip) in the Amazon Elastic Compute Cloud User Guide. + /// Provides authorization for Amazon to bring a specific IP address range to a specific Amazon Web Services account using bring your own IP addresses (BYOIP). For more information, see [Configuring your BYOIP address range](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html#prepare-for-byoip) in the Amazon EC2 User Guide. public struct CidrAuthorizationContext { /// The plain-text authorization message for the prefix and account. /// This member is required. @@ -62953,7 +63030,7 @@ public struct ProvisionIpamPoolCidrInput { public var cidr: Swift.String? /// A signed document that proves that you are authorized to bring a specified IP address range to Amazon using BYOIP. This option applies to public pools only. public var cidrAuthorizationContext: EC2ClientTypes.IpamCidrAuthorizationContext? - /// A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). public var clientToken: Swift.String? /// A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -63189,7 +63266,7 @@ public struct PurchaseReservedInstancesOfferingInput { /// Contains the output of PurchaseReservedInstancesOffering. public struct PurchaseReservedInstancesOfferingOutput { - /// The IDs of the purchased Reserved Instances. If your purchase crosses into a discounted pricing tier, the final Reserved Instances IDs might change. For more information, see [Crossing pricing tiers](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-reserved-instances-application.html#crossing-pricing-tiers) in the Amazon Elastic Compute Cloud User Guide. + /// The IDs of the purchased Reserved Instances. If your purchase crosses into a discounted pricing tier, the final Reserved Instances IDs might change. For more information, see [Crossing pricing tiers](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-reserved-instances-application.html#crossing-pricing-tiers) in the Amazon EC2 User Guide. public var reservedInstancesId: Swift.String? public init( @@ -64357,7 +64434,7 @@ public struct RequestSpotInstancesInput { public var availabilityZoneGroup: Swift.String? /// Deprecated. public var blockDurationMinutes: Swift.Int? - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to Ensure Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html) in the Amazon EC2 User Guide for Linux Instances. + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensuring idempotency in Amazon EC2 API requests](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html) in the Amazon EC2 User Guide. public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? @@ -65117,7 +65194,7 @@ extension EC2ClientTypes { } extension EC2ClientTypes { - /// Indicates whether your instance is configured for hibernation. This parameter is valid only if the instance meets the [hibernation prerequisites](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html). For more information, see [Hibernate your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) in the Amazon EC2 User Guide. + /// Indicates whether your instance is configured for hibernation. This parameter is valid only if the instance meets the [hibernation prerequisites](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html). For more information, see [Hibernate your Amazon EC2 instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) in the Amazon EC2 User Guide. public struct HibernationOptionsRequest { /// Set to true to enable your instance for hibernation. For Spot Instances, if you set Configured to true, either omit the InstanceInterruptionBehavior parameter (for [SpotMarketOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotMarketOptions.html)), or set it to hibernate. When Configured is true: /// @@ -65350,7 +65427,7 @@ public struct RunInstancesInput { public var enablePrimaryIpv6: Swift.Bool? /// Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. For more information, see [What is Amazon Web Services Nitro Enclaves?](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html) in the Amazon Web Services Nitro Enclaves User Guide. You can't enable Amazon Web Services Nitro Enclaves and hibernation on the same instance. public var enclaveOptions: EC2ClientTypes.EnclaveOptionsRequest? - /// Indicates whether an instance is enabled for hibernation. This parameter is valid only if the instance meets the [hibernation prerequisites](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html). For more information, see [Hibernate your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) in the Amazon EC2 User Guide. You can't enable hibernation and Amazon Web Services Nitro Enclaves on the same instance. + /// Indicates whether an instance is enabled for hibernation. This parameter is valid only if the instance meets the [hibernation prerequisites](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html). For more information, see [Hibernate your Amazon EC2 instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) in the Amazon EC2 User Guide. You can't enable hibernation and Amazon Web Services Nitro Enclaves on the same instance. public var hibernationOptions: EC2ClientTypes.HibernationOptionsRequest? /// The name or Amazon Resource Name (ARN) of an IAM instance profile. public var iamInstanceProfile: EC2ClientTypes.IamInstanceProfileSpecification? @@ -65360,7 +65437,7 @@ public struct RunInstancesInput { public var instanceInitiatedShutdownBehavior: EC2ClientTypes.ShutdownBehavior? /// The market (purchasing) option for the instances. For [RunInstances], persistent Spot Instance requests are only supported when InstanceInterruptionBehavior is set to either hibernate or stop. public var instanceMarketOptions: EC2ClientTypes.InstanceMarketOptionsRequest? - /// The instance type. For more information, see [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the Amazon EC2 User Guide. + /// The instance type. For more information, see [Amazon EC2 instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the Amazon EC2 User Guide. public var instanceType: EC2ClientTypes.InstanceType? /// The number of IPv6 addresses to associate with the primary network interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet. You cannot specify this option and the option to assign specific IPv6 addresses in the same request. You can specify this option if you've specified a minimum number of instances to launch. You cannot specify this option and the network interfaces option in the same request. public var ipv6AddressCount: Swift.Int? @@ -65376,12 +65453,12 @@ public struct RunInstancesInput { public var licenseSpecifications: [EC2ClientTypes.LicenseConfigurationRequest]? /// The maintenance and recovery options for the instance. public var maintenanceOptions: EC2ClientTypes.InstanceMaintenanceOptionsRequest? - /// The maximum number of instances to launch. If you specify more instances than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 launches the largest possible number of instances above MinCount. Constraints: Between 1 and the maximum number you're allowed for the specified instance type. For more information about the default limits, and how to request an increase, see [How many instances can I run in Amazon EC2](http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2) in the Amazon EC2 FAQ. + /// The maximum number of instances to launch. If you specify a value that is more capacity than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 launches the largest possible number of instances above the specified minimum count. Constraints: Between 1 and the quota for the specified instance type for your account for this Region. For more information, see [Amazon EC2 instance type quotas](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-instance-quotas.html). /// This member is required. public var maxCount: Swift.Int? /// The metadata options for the instance. For more information, see [Instance metadata and user data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html). public var metadataOptions: EC2ClientTypes.InstanceMetadataOptionsRequest? - /// The minimum number of instances to launch. If you specify a minimum that is more instances than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 launches no instances. Constraints: Between 1 and the maximum number you're allowed for the specified instance type. For more information about the default limits, and how to request an increase, see [How many instances can I run in Amazon EC2](http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2) in the Amazon EC2 General FAQ. + /// The minimum number of instances to launch. If you specify a value that is more capacity than Amazon EC2 can provide in the target Availability Zone, Amazon EC2 does not launch any instances. Constraints: Between 1 and the quota for the specified instance type for your account for this Region. For more information, see [Amazon EC2 instance type quotas](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-instance-quotas.html). /// This member is required. public var minCount: Swift.Int? /// Specifies whether detailed monitoring is enabled for the instance. @@ -65415,7 +65492,7 @@ public struct RunInstancesInput { /// /// To tag a resource after it has been created, see [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html). public var tagSpecifications: [EC2ClientTypes.TagSpecification]? - /// The user data script to make available to the instance. For more information, see [Run commands on your Linux instance at launch](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) and [Run commands on your Windows instance at launch](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-user-data.html). If you are using a command line tool, base64-encoding is performed for you, and you can load the text from a file. Otherwise, you must provide base64-encoded text. User data is limited to 16 KB. + /// The user data script to make available to the instance. For more information, see [Run commands on your Amazon EC2 instance at launch](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) in the Amazon EC2 User Guide. If you are using a command line tool, base64-encoding is performed for you, and you can load the text from a file. Otherwise, you must provide base64-encoded text. User data is limited to 16 KB. public var userData: Swift.String? public init( @@ -66224,7 +66301,7 @@ public struct StartInstancesOutput { } public struct StartNetworkInsightsAccessScopeAnalysisInput { - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). /// This member is required. public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. @@ -66264,7 +66341,7 @@ public struct StartNetworkInsightsAccessScopeAnalysisOutput { public struct StartNetworkInsightsAnalysisInput { /// The member accounts that contain resources that the path can traverse. public var additionalAccounts: [Swift.String]? - /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [How to ensure idempotency](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html). /// This member is required. public var clientToken: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. @@ -69094,6 +69171,13 @@ extension DescribeTagsInput { } } +extension DescribeTrafficMirrorFilterRulesInput { + + static func urlPathProvider(_ value: DescribeTrafficMirrorFilterRulesInput) -> Swift.String? { + return "/" + } +} + extension DescribeTrafficMirrorFiltersInput { static func urlPathProvider(_ value: DescribeTrafficMirrorFiltersInput) -> Swift.String? { @@ -72729,6 +72813,7 @@ extension CreateTrafficMirrorFilterRuleInput { try writer["RuleNumber"].write(value.ruleNumber) try writer["SourceCidrBlock"].write(value.sourceCidrBlock) try writer["SourcePortRange"].write(value.sourcePortRange, with: EC2ClientTypes.TrafficMirrorPortRangeRequest.write(value:to:)) + try writer["TagSpecification"].writeList(value.tagSpecifications, memberWritingClosure: EC2ClientTypes.TagSpecification.write(value:to:), memberNodeInfo: "Item", isFlattened: true) try writer["TrafficDirection"].write(value.trafficDirection) try writer["TrafficMirrorFilterId"].write(value.trafficMirrorFilterId) try writer["Action"].write("CreateTrafficMirrorFilterRule") @@ -75657,6 +75742,21 @@ extension DescribeTagsInput { } } +extension DescribeTrafficMirrorFilterRulesInput { + + static func write(value: DescribeTrafficMirrorFilterRulesInput?, to writer: SmithyFormURL.Writer) throws { + guard let value else { return } + try writer["DryRun"].write(value.dryRun) + try writer["Filter"].writeList(value.filters, memberWritingClosure: EC2ClientTypes.Filter.write(value:to:), memberNodeInfo: "Filter", isFlattened: true) + try writer["MaxResults"].write(value.maxResults) + try writer["NextToken"].write(value.nextToken) + try writer["TrafficMirrorFilterId"].write(value.trafficMirrorFilterId) + try writer["TrafficMirrorFilterRuleId"].writeList(value.trafficMirrorFilterRuleIds, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "Item", isFlattened: true) + try writer["Action"].write("DescribeTrafficMirrorFilterRules") + try writer["Version"].write("2016-11-15") + } +} + extension DescribeTrafficMirrorFiltersInput { static func write(value: DescribeTrafficMirrorFiltersInput?, to writer: SmithyFormURL.Writer) throws { @@ -83659,6 +83759,19 @@ extension DescribeTagsOutput { } } +extension DescribeTrafficMirrorFilterRulesOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DescribeTrafficMirrorFilterRulesOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyXML.Reader.from(data: data) + let reader = responseReader + var value = DescribeTrafficMirrorFilterRulesOutput() + value.nextToken = try reader["nextToken"].readIfPresent() + value.trafficMirrorFilterRules = try reader["trafficMirrorFilterRuleSet"].readListIfPresent(memberReadingClosure: EC2ClientTypes.TrafficMirrorFilterRule.read(from:), memberNodeInfo: "item", isFlattened: false) + return value + } +} + extension DescribeTrafficMirrorFiltersOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DescribeTrafficMirrorFiltersOutput { @@ -91525,6 +91638,19 @@ enum DescribeTagsOutputError { } } +enum DescribeTrafficMirrorFilterRulesOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyXML.Reader.from(data: data) + let baseError = try AWSClientRuntime.EC2QueryError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum DescribeTrafficMirrorFiltersOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -98079,6 +98205,7 @@ extension EC2ClientTypes.TrafficMirrorFilterRule { value.destinationCidrBlock = try reader["destinationCidrBlock"].readIfPresent() value.sourceCidrBlock = try reader["sourceCidrBlock"].readIfPresent() value.description = try reader["description"].readIfPresent() + value.tags = try reader["tagSet"].readListIfPresent(memberReadingClosure: EC2ClientTypes.Tag.read(from:), memberNodeInfo: "item", isFlattened: false) return value } } diff --git a/Sources/Services/AWSECS/Sources/AWSECS/ECSClient.swift b/Sources/Services/AWSECS/Sources/AWSECS/ECSClient.swift index 2b32daa73de..2a1d14f1923 100644 --- a/Sources/Services/AWSECS/Sources/AWSECS/ECSClient.swift +++ b/Sources/Services/AWSECS/Sources/AWSECS/ECSClient.swift @@ -2463,7 +2463,7 @@ extension ECSClient { /// Performs the `StopTask` operation on the `AmazonEC2ContainerServiceV20141113` service. /// - /// Stops a running task. Any tags associated with the task will be deleted. When [StopTask] is called on a task, the equivalent of docker stop is issued to the containers running in the task. This results in a SIGTERM value and a default 30-second timeout, after which the SIGKILL value is sent and the containers are forcibly stopped. If the container handles the SIGTERM value gracefully and exits within 30 seconds from receiving it, no SIGKILL value is sent. The default 30-second timeout can be configured on the Amazon ECS container agent with the ECS_CONTAINER_STOP_TIMEOUT variable. For more information, see [Amazon ECS Container Agent Configuration](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html) in the Amazon Elastic Container Service Developer Guide. + /// Stops a running task. Any tags associated with the task will be deleted. When [StopTask] is called on a task, the equivalent of docker stop is issued to the containers running in the task. This results in a SIGTERM value and a default 30-second timeout, after which the SIGKILL value is sent and the containers are forcibly stopped. If the container handles the SIGTERM value gracefully and exits within 30 seconds from receiving it, no SIGKILL value is sent. For Windows containers, POSIX signals do not work and runtime stops the container by sending a CTRL_SHUTDOWN_EVENT. For more information, see [Unable to react to graceful shutdown of (Windows) container #25982](https://github.com/moby/moby/issues/25982) on GitHub. The default 30-second timeout can be configured on the Amazon ECS container agent with the ECS_CONTAINER_STOP_TIMEOUT variable. For more information, see [Amazon ECS Container Agent Configuration](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html) in the Amazon Elastic Container Service Developer Guide. /// /// - Parameter StopTaskInput : [no documentation found] /// diff --git a/Sources/Services/AWSECS/Sources/AWSECS/Models.swift b/Sources/Services/AWSECS/Sources/AWSECS/Models.swift index a7162ab8161..fb5a4b49d7c 100644 --- a/Sources/Services/AWSECS/Sources/AWSECS/Models.swift +++ b/Sources/Services/AWSECS/Sources/AWSECS/Models.swift @@ -681,23 +681,47 @@ extension ECSClientTypes { } extension ECSClientTypes { - /// The execute command configuration for the cluster. + /// The managed storage configuration for the cluster. + public struct ManagedStorageConfiguration { + /// Specify the Key Management Service key ID for the Fargate ephemeral storage. + public var fargateEphemeralStorageKmsKeyId: Swift.String? + /// Specify a Key Management Service key ID to encrypt the managed storage. + public var kmsKeyId: Swift.String? + + public init( + fargateEphemeralStorageKmsKeyId: Swift.String? = nil, + kmsKeyId: Swift.String? = nil + ) + { + self.fargateEphemeralStorageKmsKeyId = fargateEphemeralStorageKmsKeyId + self.kmsKeyId = kmsKeyId + } + } + +} + +extension ECSClientTypes { + /// The execute command and managed storage configuration for the cluster. public struct ClusterConfiguration { /// The details of the execute command configuration. public var executeCommandConfiguration: ECSClientTypes.ExecuteCommandConfiguration? + /// The details of the managed storage configuration. + public var managedStorageConfiguration: ECSClientTypes.ManagedStorageConfiguration? public init( - executeCommandConfiguration: ECSClientTypes.ExecuteCommandConfiguration? = nil + executeCommandConfiguration: ECSClientTypes.ExecuteCommandConfiguration? = nil, + managedStorageConfiguration: ECSClientTypes.ManagedStorageConfiguration? = nil ) { self.executeCommandConfiguration = executeCommandConfiguration + self.managedStorageConfiguration = managedStorageConfiguration } } } extension ECSClientTypes { - /// The details of a capacity provider strategy. A capacity provider strategy can be set when using the [RunTask] or [CreateCluster] APIs or as the default capacity provider strategy for a cluster with the [CreateCluster] API. Only capacity providers that are already associated with a cluster and have an ACTIVE or UPDATING status can be used in a capacity provider strategy. The [PutClusterCapacityProviders] API is used to associate a capacity provider with a cluster. If specifying a capacity provider that uses an Auto Scaling group, the capacity provider must already be created. New Auto Scaling group capacity providers can be created with the [CreateCapacityProvider] API operation. To use a Fargate capacity provider, specify either the FARGATE or FARGATE_SPOT capacity providers. The Fargate capacity providers are available to all accounts and only need to be associated with a cluster to be used in a capacity provider strategy. A capacity provider strategy may contain a maximum of 6 capacity providers. + /// The details of a capacity provider strategy. A capacity provider strategy can be set when using the [RunTask] or [CreateCluster] APIs or as the default capacity provider strategy for a cluster with the [CreateCluster] API. Only capacity providers that are already associated with a cluster and have an ACTIVE or UPDATING status can be used in a capacity provider strategy. The [PutClusterCapacityProviders] API is used to associate a capacity provider with a cluster. If specifying a capacity provider that uses an Auto Scaling group, the capacity provider must already be created. New Auto Scaling group capacity providers can be created with the [CreateCapacityProvider] API operation. To use a Fargate capacity provider, specify either the FARGATE or FARGATE_SPOT capacity providers. The Fargate capacity providers are available to all accounts and only need to be associated with a cluster to be used in a capacity provider strategy. With FARGATE_SPOT, you can run interruption tolerant tasks at a rate that's discounted compared to the FARGATE price. FARGATE_SPOT runs tasks on spare compute capacity. When Amazon Web Services needs the capacity back, your tasks are interrupted with a two-minute warning. FARGATE_SPOT only supports Linux tasks with the X86_64 architecture on platform version 1.3.0 or later. A capacity provider strategy may contain a maximum of 6 capacity providers. public struct CapacityProviderStrategyItem { /// The base value designates how many tasks, at a minimum, to run on the specified capacity provider. Only one capacity provider in a capacity provider strategy can have a base defined. If no value is specified, the default value of 0 is used. public var base: Swift.Int @@ -1701,7 +1725,7 @@ extension ECSClientTypes { } extension ECSClientTypes { - /// An object that represents the Amazon Web Services Private Certificate Authority certificate. + /// The certificate root authority that secures your service. public struct ServiceConnectTlsCertificateAuthority { /// The ARN of the Amazon Web Services Private Certificate Authority certificate. public var awsPcaAuthorityArn: Swift.String? @@ -1717,7 +1741,7 @@ extension ECSClientTypes { } extension ECSClientTypes { - /// An object that represents the configuration for Service Connect TLS. + /// The key that encrypts and decrypts your resources for Service Connect TLS. public struct ServiceConnectTlsConfiguration { /// The signer certificate authority. /// This member is required. @@ -2150,6 +2174,22 @@ public struct CreateServiceInput { } } +extension ECSClientTypes { + /// The amount of ephemeral storage to allocate for the deployment. + public struct DeploymentEphemeralStorage { + /// Specify an Key Management Service key ID to encrypt the ephemeral storage for deployment. + public var kmsKeyId: Swift.String? + + public init( + kmsKeyId: Swift.String? = nil + ) + { + self.kmsKeyId = kmsKeyId + } + } + +} + extension ECSClientTypes { public enum DeploymentRolloutState: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { @@ -2213,6 +2253,8 @@ extension ECSClientTypes { public var desiredCount: Swift.Int /// The number of consecutively failed tasks in the deployment. A task is considered a failure if the service scheduler can't launch the task, the task doesn't transition to a RUNNING state, or if it fails any of its defined health checks and is stopped. Once a service deployment has one or more successfully running tasks, the failed task count resets to zero and stops being evaluated. public var failedTasks: Swift.Int + /// The Fargate ephemeral storage settings for the deployment. + public var fargateEphemeralStorage: ECSClientTypes.DeploymentEphemeralStorage? /// The ID of the deployment. public var id: Swift.String? /// The launch type the tasks in the service are using. For more information, see [Amazon ECS Launch Types](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) in the Amazon Elastic Container Service Developer Guide. @@ -2249,6 +2291,7 @@ extension ECSClientTypes { createdAt: Foundation.Date? = nil, desiredCount: Swift.Int = 0, failedTasks: Swift.Int = 0, + fargateEphemeralStorage: ECSClientTypes.DeploymentEphemeralStorage? = nil, id: Swift.String? = nil, launchType: ECSClientTypes.LaunchType? = nil, networkConfiguration: ECSClientTypes.NetworkConfiguration? = nil, @@ -2270,6 +2313,7 @@ extension ECSClientTypes { self.createdAt = createdAt self.desiredCount = desiredCount self.failedTasks = failedTasks + self.fargateEphemeralStorage = fargateEphemeralStorage self.id = id self.launchType = launchType self.networkConfiguration = networkConfiguration @@ -2402,6 +2446,8 @@ extension ECSClientTypes { public var createdAt: Foundation.Date? /// The external ID associated with the task set. If an CodeDeploy deployment created a task set, the externalId parameter contains the CodeDeploy deployment ID. If a task set is created for an external deployment and is associated with a service discovery registry, the externalId parameter contains the ECS_TASK_SET_EXTERNAL_ID Cloud Map attribute. public var externalId: Swift.String? + /// The Fargate ephemeral storage settings for the task set. + public var fargateEphemeralStorage: ECSClientTypes.DeploymentEphemeralStorage? /// The ID of the task set. public var id: Swift.String? /// The launch type the tasks in the task set are using. For more information, see [Amazon ECS launch types](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) in the Amazon Elastic Container Service Developer Guide. @@ -2472,6 +2518,7 @@ extension ECSClientTypes { computedDesiredCount: Swift.Int = 0, createdAt: Foundation.Date? = nil, externalId: Swift.String? = nil, + fargateEphemeralStorage: ECSClientTypes.DeploymentEphemeralStorage? = nil, id: Swift.String? = nil, launchType: ECSClientTypes.LaunchType? = nil, loadBalancers: [ECSClientTypes.LoadBalancer]? = nil, @@ -2498,6 +2545,7 @@ extension ECSClientTypes { self.computedDesiredCount = computedDesiredCount self.createdAt = createdAt self.externalId = externalId + self.fargateEphemeralStorage = fargateEphemeralStorage self.id = id self.launchType = launchType self.loadBalancers = loadBalancers @@ -3551,9 +3599,7 @@ extension ECSClientTypes { /// /// If a task is run manually, and not as part of a service, the task will continue its lifecycle regardless of its health status. For tasks that are part of a service, if the task reports as unhealthy then the task will be stopped and the service scheduler will replace it. The following are notes about container health check support: /// - /// * When the Amazon ECS agent cannot connect to the Amazon ECS service, the service reports the container as UNHEALTHY. - /// - /// * The health check statuses are the "last heard from" response from the Amazon ECS agent. There are no assumptions made about the status of the container health checks. + /// * If the Amazon ECS container agent becomes disconnected from the Amazon ECS service, this won't cause a container to transition to an UNHEALTHY status. This is by design, to ensure that containers remain running during agent restarts or temporary unavailability. The health check status is the "last heard from" response from the Amazon ECS agent, so if the container was considered HEALTHY prior to the disconnect, that status will remain until the agent reconnects and another health check occurs. There are no assumptions made about the status of the container health checks. /// /// * Container health checks require version 1.17.0 or greater of the Amazon ECS container agent. For more information, see [Updating the Amazon ECS container agent](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html). /// @@ -3943,10 +3989,10 @@ extension ECSClientTypes { extension ECSClientTypes { /// The type and amount of a resource to assign to a container. The supported resource types are GPUs and Elastic Inference accelerators. For more information, see [Working with GPUs on Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-gpu.html) or [Working with Amazon Elastic Inference on Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-inference.html) in the Amazon Elastic Container Service Developer Guide public struct ResourceRequirement { - /// The type of resource to assign to a container. The supported values are GPU or InferenceAccelerator. + /// The type of resource to assign to a container. /// This member is required. public var type: ECSClientTypes.ResourceType? - /// The value for the specified resource type. If the GPU type is used, the value is the number of physical GPUs the Amazon ECS container agent reserves for the container. The number of GPUs that's reserved for all containers in a task can't exceed the number of available GPUs on the container instance that the task is launched on. If the InferenceAccelerator type is used, the value matches the deviceName for an [InferenceAccelerator](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_InferenceAccelerator.html) specified in a task definition. + /// The value for the specified resource type. When the type is GPU, the value is the number of physical GPUs the Amazon ECS container agent reserves for the container. The number of GPUs that's reserved for all containers in a task can't exceed the number of available GPUs on the container instance that the task is launched on. When the type is InferenceAccelerator, the value matches the deviceName for an [InferenceAccelerator](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_InferenceAccelerator.html) specified in a task definition. /// This member is required. public var value: Swift.String? @@ -6208,6 +6254,26 @@ extension ECSClientTypes { } +extension ECSClientTypes { + /// The amount of ephemeral storage to allocate for the task. + public struct TaskEphemeralStorage { + /// Specify an Key Management Service key ID to encrypt the ephemeral storage for the task. + public var kmsKeyId: Swift.String? + /// The total amount, in GiB, of the ephemeral storage to set for the task. The minimum supported value is 20 GiB and the maximum supported value is
 200 GiB. + public var sizeInGiB: Swift.Int + + public init( + kmsKeyId: Swift.String? = nil, + sizeInGiB: Swift.Int = 0 + ) + { + self.kmsKeyId = kmsKeyId + self.sizeInGiB = sizeInGiB + } + } + +} + extension ECSClientTypes { /// The overrides that are sent to a container. An empty container override can be passed in. An example of an empty container override is {"containerOverrides": [ ] }. If a non-empty container override is specified, the name parameter must be included. You can use Secrets Manager or Amazon Web Services Systems Manager Parameter Store to store the sensitive data. For more information, see [Retrieve secrets through environment variables](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/secrets-envvar.html) in the Amazon ECS Developer Guide. public struct ContainerOverride { @@ -6404,6 +6470,8 @@ extension ECSClientTypes { public var ephemeralStorage: ECSClientTypes.EphemeralStorage? /// The Unix timestamp for the time when the task execution stopped. public var executionStoppedAt: Foundation.Date? + /// The Fargate ephemeral storage settings for the task. + public var fargateEphemeralStorage: ECSClientTypes.TaskEphemeralStorage? /// The name of the task group that's associated with the task. public var group: Swift.String? /// The health status for the task. It's determined by the health of the essential containers in the task. If all essential containers in the task are reporting as HEALTHY, the task status also reports as HEALTHY. If any essential containers in the task are reporting as UNHEALTHY or UNKNOWN, the task status also reports as UNHEALTHY or UNKNOWN. The Amazon ECS container agent doesn't monitor or report on Docker health checks that are embedded in a container image and not specified in the container definition. For example, this includes those specified in a parent image or from the image's Dockerfile. Health check parameters that are specified in a container definition override any Docker health checks that are found in the container image. @@ -6491,6 +6559,7 @@ extension ECSClientTypes { enableExecuteCommand: Swift.Bool = false, ephemeralStorage: ECSClientTypes.EphemeralStorage? = nil, executionStoppedAt: Foundation.Date? = nil, + fargateEphemeralStorage: ECSClientTypes.TaskEphemeralStorage? = nil, group: Swift.String? = nil, healthStatus: ECSClientTypes.HealthStatus? = nil, inferenceAccelerators: [ECSClientTypes.InferenceAccelerator]? = nil, @@ -6529,6 +6598,7 @@ extension ECSClientTypes { self.enableExecuteCommand = enableExecuteCommand self.ephemeralStorage = ephemeralStorage self.executionStoppedAt = executionStoppedAt + self.fargateEphemeralStorage = fargateEphemeralStorage self.group = group self.healthStatus = healthStatus self.inferenceAccelerators = inferenceAccelerators @@ -7859,7 +7929,7 @@ public struct RegisterTaskDefinitionInput { public var proxyConfiguration: ECSClientTypes.ProxyConfiguration? /// The task launch type that Amazon ECS validates the task definition against. A client exception is returned if the task definition doesn't validate against the compatibilities specified. If no value is specified, the parameter is omitted from the response. public var requiresCompatibilities: [ECSClientTypes.Compatibility]? - /// The operating system that your tasks definitions run on. A platform family is specified only for tasks using the Fargate launch type. When you specify a task definition in a service, this value must match the runtimePlatform value of the service. + /// The operating system that your tasks definitions run on. A platform family is specified only for tasks using the Fargate launch type. public var runtimePlatform: ECSClientTypes.RuntimePlatform? /// The metadata that you apply to the task definition to help you categorize and organize them. Each tag consists of a key and an optional value. You define both of them. The following basic restrictions apply to tags: /// @@ -12388,12 +12458,31 @@ extension ECSClientTypes.ClusterConfiguration { static func write(value: ECSClientTypes.ClusterConfiguration?, to writer: SmithyJSON.Writer) throws { guard let value else { return } try writer["executeCommandConfiguration"].write(value.executeCommandConfiguration, with: ECSClientTypes.ExecuteCommandConfiguration.write(value:to:)) + try writer["managedStorageConfiguration"].write(value.managedStorageConfiguration, with: ECSClientTypes.ManagedStorageConfiguration.write(value:to:)) } static func read(from reader: SmithyJSON.Reader) throws -> ECSClientTypes.ClusterConfiguration { guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } var value = ECSClientTypes.ClusterConfiguration() value.executeCommandConfiguration = try reader["executeCommandConfiguration"].readIfPresent(with: ECSClientTypes.ExecuteCommandConfiguration.read(from:)) + value.managedStorageConfiguration = try reader["managedStorageConfiguration"].readIfPresent(with: ECSClientTypes.ManagedStorageConfiguration.read(from:)) + return value + } +} + +extension ECSClientTypes.ManagedStorageConfiguration { + + static func write(value: ECSClientTypes.ManagedStorageConfiguration?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["fargateEphemeralStorageKmsKeyId"].write(value.fargateEphemeralStorageKmsKeyId) + try writer["kmsKeyId"].write(value.kmsKeyId) + } + + static func read(from reader: SmithyJSON.Reader) throws -> ECSClientTypes.ManagedStorageConfiguration { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ECSClientTypes.ManagedStorageConfiguration() + value.kmsKeyId = try reader["kmsKeyId"].readIfPresent() + value.fargateEphemeralStorageKmsKeyId = try reader["fargateEphemeralStorageKmsKeyId"].readIfPresent() return value } } @@ -12599,6 +12688,17 @@ extension ECSClientTypes.Deployment { value.serviceConnectConfiguration = try reader["serviceConnectConfiguration"].readIfPresent(with: ECSClientTypes.ServiceConnectConfiguration.read(from:)) value.serviceConnectResources = try reader["serviceConnectResources"].readListIfPresent(memberReadingClosure: ECSClientTypes.ServiceConnectServiceResource.read(from:), memberNodeInfo: "member", isFlattened: false) value.volumeConfigurations = try reader["volumeConfigurations"].readListIfPresent(memberReadingClosure: ECSClientTypes.ServiceVolumeConfiguration.read(from:), memberNodeInfo: "member", isFlattened: false) + value.fargateEphemeralStorage = try reader["fargateEphemeralStorage"].readIfPresent(with: ECSClientTypes.DeploymentEphemeralStorage.read(from:)) + return value + } +} + +extension ECSClientTypes.DeploymentEphemeralStorage { + + static func read(from reader: SmithyJSON.Reader) throws -> ECSClientTypes.DeploymentEphemeralStorage { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ECSClientTypes.DeploymentEphemeralStorage() + value.kmsKeyId = try reader["kmsKeyId"].readIfPresent() return value } } @@ -12862,6 +12962,7 @@ extension ECSClientTypes.TaskSet { value.stabilityStatus = try reader["stabilityStatus"].readIfPresent() value.stabilityStatusAt = try reader["stabilityStatusAt"].readTimestampIfPresent(format: .epochSeconds) value.tags = try reader["tags"].readListIfPresent(memberReadingClosure: ECSClientTypes.Tag.read(from:), memberNodeInfo: "member", isFlattened: false) + value.fargateEphemeralStorage = try reader["fargateEphemeralStorage"].readIfPresent(with: ECSClientTypes.DeploymentEphemeralStorage.read(from:)) return value } } @@ -13816,6 +13917,18 @@ extension ECSClientTypes.Task { value.taskDefinitionArn = try reader["taskDefinitionArn"].readIfPresent() value.version = try reader["version"].readIfPresent() ?? 0 value.ephemeralStorage = try reader["ephemeralStorage"].readIfPresent(with: ECSClientTypes.EphemeralStorage.read(from:)) + value.fargateEphemeralStorage = try reader["fargateEphemeralStorage"].readIfPresent(with: ECSClientTypes.TaskEphemeralStorage.read(from:)) + return value + } +} + +extension ECSClientTypes.TaskEphemeralStorage { + + static func read(from reader: SmithyJSON.Reader) throws -> ECSClientTypes.TaskEphemeralStorage { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ECSClientTypes.TaskEphemeralStorage() + value.sizeInGiB = try reader["sizeInGiB"].readIfPresent() ?? 0 + value.kmsKeyId = try reader["kmsKeyId"].readIfPresent() return value } } diff --git a/Sources/Services/AWSFSx/Sources/AWSFSx/FSxClient.swift b/Sources/Services/AWSFSx/Sources/AWSFSx/FSxClient.swift index 7f67dfe8f8c..d01cd427907 100644 --- a/Sources/Services/AWSFSx/Sources/AWSFSx/FSxClient.swift +++ b/Sources/Services/AWSFSx/Sources/AWSFSx/FSxClient.swift @@ -1180,7 +1180,7 @@ extension FSxClient { /// Performs the `DeleteFileSystem` operation on the `AWSSimbaAPIService_v20180301` service. /// - /// Deletes a file system. After deletion, the file system no longer exists, and its data is gone. Any existing automatic backups and snapshots are also deleted. To delete an Amazon FSx for NetApp ONTAP file system, first delete all the volumes and storage virtual machines (SVMs) on the file system. Then provide a FileSystemId value to the DeleFileSystem operation. By default, when you delete an Amazon FSx for Windows File Server file system, a final backup is created upon deletion. This final backup isn't subject to the file system's retention policy, and must be manually deleted. To delete an Amazon FSx for Lustre file system, first [unmount](https://docs.aws.amazon.com/fsx/latest/LustreGuide/unmounting-fs.html) it from every connected Amazon EC2 instance, then provide a FileSystemId value to the DeleFileSystem operation. By default, Amazon FSx will not take a final backup when the DeleteFileSystem operation is invoked. On file systems not linked to an Amazon S3 bucket, set SkipFinalBackup to false to take a final backup of the file system you are deleting. Backups cannot be enabled on S3-linked file systems. To ensure all of your data is written back to S3 before deleting your file system, you can either monitor for the [AgeOfOldestQueuedMessage](https://docs.aws.amazon.com/fsx/latest/LustreGuide/monitoring-cloudwatch.html#auto-import-export-metrics) metric to be zero (if using automatic export) or you can run an [export data repository task](https://docs.aws.amazon.com/fsx/latest/LustreGuide/export-data-repo-task-dra.html). If you have automatic export enabled and want to use an export data repository task, you have to disable automatic export before executing the export data repository task. The DeleteFileSystem operation returns while the file system has the DELETING status. You can check the file system deletion status by calling the [DescribeFileSystems](https://docs.aws.amazon.com/fsx/latest/APIReference/API_DescribeFileSystems.html) operation, which returns a list of file systems in your account. If you pass the file system ID for a deleted file system, the DescribeFileSystems operation returns a FileSystemNotFound error. If a data repository task is in a PENDING or EXECUTING state, deleting an Amazon FSx for Lustre file system will fail with an HTTP status code 400 (Bad Request). The data in a deleted file system is also deleted and can't be recovered by any means. + /// Deletes a file system. After deletion, the file system no longer exists, and its data is gone. Any existing automatic backups and snapshots are also deleted. To delete an Amazon FSx for NetApp ONTAP file system, first delete all the volumes and storage virtual machines (SVMs) on the file system. Then provide a FileSystemId value to the DeleteFileSystem operation. By default, when you delete an Amazon FSx for Windows File Server file system, a final backup is created upon deletion. This final backup isn't subject to the file system's retention policy, and must be manually deleted. To delete an Amazon FSx for Lustre file system, first [unmount](https://docs.aws.amazon.com/fsx/latest/LustreGuide/unmounting-fs.html) it from every connected Amazon EC2 instance, then provide a FileSystemId value to the DeleteFileSystem operation. By default, Amazon FSx will not take a final backup when the DeleteFileSystem operation is invoked. On file systems not linked to an Amazon S3 bucket, set SkipFinalBackup to false to take a final backup of the file system you are deleting. Backups cannot be enabled on S3-linked file systems. To ensure all of your data is written back to S3 before deleting your file system, you can either monitor for the [AgeOfOldestQueuedMessage](https://docs.aws.amazon.com/fsx/latest/LustreGuide/monitoring-cloudwatch.html#auto-import-export-metrics) metric to be zero (if using automatic export) or you can run an [export data repository task](https://docs.aws.amazon.com/fsx/latest/LustreGuide/export-data-repo-task-dra.html). If you have automatic export enabled and want to use an export data repository task, you have to disable automatic export before executing the export data repository task. The DeleteFileSystem operation returns while the file system has the DELETING status. You can check the file system deletion status by calling the [DescribeFileSystems](https://docs.aws.amazon.com/fsx/latest/APIReference/API_DescribeFileSystems.html) operation, which returns a list of file systems in your account. If you pass the file system ID for a deleted file system, the DescribeFileSystems operation returns a FileSystemNotFound error. If a data repository task is in a PENDING or EXECUTING state, deleting an Amazon FSx for Lustre file system will fail with an HTTP status code 400 (Bad Request). The data in a deleted file system is also deleted and can't be recovered by any means. /// /// - Parameter DeleteFileSystemInput : The request object for DeleteFileSystem operation. /// @@ -2442,6 +2442,8 @@ extension FSxClient { /// /// * LustreRootSquashConfiguration /// + /// * MetadataConfiguration + /// /// * PerUnitStorageThroughput /// /// * StorageCapacity diff --git a/Sources/Services/AWSFSx/Sources/AWSFSx/Models.swift b/Sources/Services/AWSFSx/Sources/AWSFSx/Models.swift index 88d869ee6f8..1f8ba584609 100644 --- a/Sources/Services/AWSFSx/Sources/AWSFSx/Models.swift +++ b/Sources/Services/AWSFSx/Sources/AWSFSx/Models.swift @@ -666,6 +666,60 @@ extension FSxClientTypes { } +extension FSxClientTypes { + + public enum MetadataConfigurationMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case automatic + case userProvisioned + case sdkUnknown(Swift.String) + + public static var allCases: [MetadataConfigurationMode] { + return [ + .automatic, + .userProvisioned + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .automatic: return "AUTOMATIC" + case .userProvisioned: return "USER_PROVISIONED" + case let .sdkUnknown(s): return s + } + } + } +} + +extension FSxClientTypes { + /// The Lustre metadata performance configuration of an Amazon FSx for Lustre file system using a PERSISTENT_2 deployment type. The configuration enables the file system to support increasing metadata performance. + public struct FileSystemLustreMetadataConfiguration { + /// The number of Metadata IOPS provisioned for the file system. Valid values are 1500, 3000, 6000, 12000, and multiples of 12000 up to a maximum of 192000. + public var iops: Swift.Int? + /// The metadata configuration mode for provisioning Metadata IOPS for the file system. + /// + /// * In AUTOMATIC mode, FSx for Lustre automatically provisions and scales the number of Metadata IOPS on your file system based on your file system storage capacity. + /// + /// * In USER_PROVISIONED mode, you can choose to specify the number of Metadata IOPS to provision for your file system. + /// This member is required. + public var mode: FSxClientTypes.MetadataConfigurationMode? + + public init( + iops: Swift.Int? = nil, + mode: FSxClientTypes.MetadataConfigurationMode? = nil + ) + { + self.iops = iops + self.mode = mode + } + } + +} + extension FSxClientTypes { /// The configuration for Lustre root squash used to restrict root-level access from clients that try to access your FSx for Lustre file system as root. Use the RootSquash parameter to enable root squash. To learn more about Lustre root squash, see [Lustre root squash](https://docs.aws.amazon.com/fsx/latest/LustreGuide/root-squash.html). You can also use the NoSquashNids parameter to provide an array of clients who are not affected by the root squash setting. These clients will access the file system as root, with unrestricted privileges. public struct LustreRootSquashConfiguration { @@ -723,6 +777,8 @@ extension FSxClientTypes { public var driveCacheType: FSxClientTypes.DriveCacheType? /// The Lustre logging configuration. Lustre logging writes the enabled log events for your file system to Amazon CloudWatch Logs. public var logConfiguration: FSxClientTypes.LustreLogConfiguration? + /// The Lustre metadata performance configuration for an Amazon FSx for Lustre file system using a PERSISTENT_2 deployment type. + public var metadataConfiguration: FSxClientTypes.FileSystemLustreMetadataConfiguration? /// You use the MountName value when mounting the file system. For the SCRATCH_1 deployment type, this value is always "fsx". For SCRATCH_2, PERSISTENT_1, and PERSISTENT_2 deployment types, this value is a string that is unique within an Amazon Web Services Region. public var mountName: Swift.String? /// Per unit storage throughput represents the megabytes per second of read or write throughput per 1 tebibyte of storage provisioned. File system throughput capacity is equal to Storage capacity (TiB) * PerUnitStorageThroughput (MB/s/TiB). This option is only valid for PERSISTENT_1 and PERSISTENT_2 deployment types. Valid values: @@ -747,6 +803,7 @@ extension FSxClientTypes { deploymentType: FSxClientTypes.LustreDeploymentType? = nil, driveCacheType: FSxClientTypes.DriveCacheType? = nil, logConfiguration: FSxClientTypes.LustreLogConfiguration? = nil, + metadataConfiguration: FSxClientTypes.FileSystemLustreMetadataConfiguration? = nil, mountName: Swift.String? = nil, perUnitStorageThroughput: Swift.Int? = nil, rootSquashConfiguration: FSxClientTypes.LustreRootSquashConfiguration? = nil, @@ -761,6 +818,7 @@ extension FSxClientTypes { self.deploymentType = deploymentType self.driveCacheType = driveCacheType self.logConfiguration = logConfiguration + self.metadataConfiguration = metadataConfiguration self.mountName = mountName self.perUnitStorageThroughput = perUnitStorageThroughput self.rootSquashConfiguration = rootSquashConfiguration @@ -4227,7 +4285,7 @@ extension FSxClientTypes { /// /// * The path can be an NFS data repository that links to the cache. The path can be in one of two formats: /// - /// * If you are not using the DataRepositorySubdirectories parameter, the path is to an NFS Export directory (or one of its subdirectories) in the format nsf://nfs-domain-name/exportpath. You can therefore link a single NFS Export to a single data repository association. + /// * If you are not using the DataRepositorySubdirectories parameter, the path is to an NFS Export directory (or one of its subdirectories) in the format nfs://nfs-domain-name/exportpath. You can therefore link a single NFS Export to a single data repository association. /// /// * If you are using the DataRepositorySubdirectories parameter, the path is the domain name of the NFS file system in the format nfs://filer-domain-name, which indicates the root of the subdirectories specified with the DataRepositorySubdirectories parameter. /// @@ -4734,6 +4792,31 @@ extension FSxClientTypes { } +extension FSxClientTypes { + /// The Lustre metadata performance configuration for the creation of an Amazon FSx for Lustre file system using a PERSISTENT_2 deployment type. The configuration uses a Metadata IOPS value to set the maximum rate of metadata disk IOPS supported by the file system. After creation, the file system supports increasing metadata performance. For more information on Metadata IOPS, see [Lustre metadata performance configuration](https://docs.aws.amazon.com/fsx/latest/LustreGuide/managing-metadata-performance.html#metadata-configuration) in the Amazon FSx for Lustre User Guide. + public struct CreateFileSystemLustreMetadataConfiguration { + /// (USER_PROVISIONED mode only) Specifies the number of Metadata IOPS to provision for the file system. This parameter sets the maximum rate of metadata disk IOPS supported by the file system. Valid values are 1500, 3000, 6000, 12000, and multiples of 12000 up to a maximum of 192000. Iops doesn’t have a default value. If you're using USER_PROVISIONED mode, you can choose to specify a valid value. If you're using AUTOMATIC mode, you cannot specify a value because FSx for Lustre automatically sets the value based on your file system storage capacity. + public var iops: Swift.Int? + /// The metadata configuration mode for provisioning Metadata IOPS for an FSx for Lustre file system using a PERSISTENT_2 deployment type. + /// + /// * In AUTOMATIC mode, FSx for Lustre automatically provisions and scales the number of Metadata IOPS for your file system based on your file system storage capacity. + /// + /// * In USER_PROVISIONED mode, you specify the number of Metadata IOPS to provision for your file system. + /// This member is required. + public var mode: FSxClientTypes.MetadataConfigurationMode? + + public init( + iops: Swift.Int? = nil, + mode: FSxClientTypes.MetadataConfigurationMode? = nil + ) + { + self.iops = iops + self.mode = mode + } + } + +} + extension FSxClientTypes { /// The Lustre configuration for the file system being created. The following parameters are not supported for file systems with a data repository association created with . /// @@ -4773,7 +4856,7 @@ extension FSxClientTypes { /// /// For more information, see [Lustre data compression](https://docs.aws.amazon.com/fsx/latest/LustreGuide/data-compression.html) in the Amazon FSx for Lustre User Guide. public var dataCompressionType: FSxClientTypes.DataCompressionType? - /// (Optional) Choose SCRATCH_1 and SCRATCH_2 deployment types when you need temporary storage and shorter-term processing of data. The SCRATCH_2 deployment type provides in-transit encryption of data and higher burst throughput capacity than SCRATCH_1. Choose PERSISTENT_1 for longer-term storage and for throughput-focused workloads that aren’t latency-sensitive. PERSISTENT_1 supports encryption of data in transit, and is available in all Amazon Web Services Regions in which FSx for Lustre is available. Choose PERSISTENT_2 for longer-term storage and for latency-sensitive workloads that require the highest levels of IOPS/throughput. PERSISTENT_2 supports SSD storage, and offers higher PerUnitStorageThroughput (up to 1000 MB/s/TiB). PERSISTENT_2 is available in a limited number of Amazon Web Services Regions. For more information, and an up-to-date list of Amazon Web Services Regions in which PERSISTENT_2 is available, see [File system deployment options for FSx for Lustre](https://docs.aws.amazon.com/fsx/latest/LustreGuide/using-fsx-lustre.html#lustre-deployment-types) in the Amazon FSx for Lustre User Guide. If you choose PERSISTENT_2, and you set FileSystemTypeVersion to 2.10, the CreateFileSystem operation fails. Encryption of data in transit is automatically turned on when you access SCRATCH_2, PERSISTENT_1 and PERSISTENT_2 file systems from Amazon EC2 instances that support automatic encryption in the Amazon Web Services Regions where they are available. For more information about encryption in transit for FSx for Lustre file systems, see [Encrypting data in transit](https://docs.aws.amazon.com/fsx/latest/LustreGuide/encryption-in-transit-fsxl.html) in the Amazon FSx for Lustre User Guide. (Default = SCRATCH_1) + /// (Optional) Choose SCRATCH_1 and SCRATCH_2 deployment types when you need temporary storage and shorter-term processing of data. The SCRATCH_2 deployment type provides in-transit encryption of data and higher burst throughput capacity than SCRATCH_1. Choose PERSISTENT_1 for longer-term storage and for throughput-focused workloads that aren’t latency-sensitive. PERSISTENT_1 supports encryption of data in transit, and is available in all Amazon Web Services Regions in which FSx for Lustre is available. Choose PERSISTENT_2 for longer-term storage and for latency-sensitive workloads that require the highest levels of IOPS/throughput. PERSISTENT_2 supports SSD storage, and offers higher PerUnitStorageThroughput (up to 1000 MB/s/TiB). You can optionally specify a metadata configuration mode for PERSISTENT_2 which supports increasing metadata performance. PERSISTENT_2 is available in a limited number of Amazon Web Services Regions. For more information, and an up-to-date list of Amazon Web Services Regions in which PERSISTENT_2 is available, see [File system deployment options for FSx for Lustre](https://docs.aws.amazon.com/fsx/latest/LustreGuide/using-fsx-lustre.html#lustre-deployment-types) in the Amazon FSx for Lustre User Guide. If you choose PERSISTENT_2, and you set FileSystemTypeVersion to 2.10, the CreateFileSystem operation fails. Encryption of data in transit is automatically turned on when you access SCRATCH_2, PERSISTENT_1, and PERSISTENT_2 file systems from Amazon EC2 instances that support automatic encryption in the Amazon Web Services Regions where they are available. For more information about encryption in transit for FSx for Lustre file systems, see [Encrypting data in transit](https://docs.aws.amazon.com/fsx/latest/LustreGuide/encryption-in-transit-fsxl.html) in the Amazon FSx for Lustre User Guide. (Default = SCRATCH_1) public var deploymentType: FSxClientTypes.LustreDeploymentType? /// The type of drive cache used by PERSISTENT_1 file systems that are provisioned with HDD storage devices. This parameter is required when storage type is HDD. Set this property to READ to improve the performance for frequently accessed files by caching up to 20% of the total storage capacity of the file system. This parameter is required when StorageType is set to HDD. public var driveCacheType: FSxClientTypes.DriveCacheType? @@ -4785,6 +4868,8 @@ extension FSxClientTypes { public var importedFileChunkSize: Swift.Int? /// The Lustre logging configuration used when creating an Amazon FSx for Lustre file system. When logging is enabled, Lustre logs error and warning events for data repositories associated with your file system to Amazon CloudWatch Logs. public var logConfiguration: FSxClientTypes.LustreLogCreateConfiguration? + /// The Lustre metadata performance configuration for the creation of an FSx for Lustre file system using a PERSISTENT_2 deployment type. + public var metadataConfiguration: FSxClientTypes.CreateFileSystemLustreMetadataConfiguration? /// Required with PERSISTENT_1 and PERSISTENT_2 deployment types, provisions the amount of read and write throughput for each 1 tebibyte (TiB) of file system storage capacity, in MB/s/TiB. File system throughput capacity is calculated by multiplying file system storage capacity (TiB) by the PerUnitStorageThroughput (MB/s/TiB). For a 2.4-TiB file system, provisioning 50 MB/s/TiB of PerUnitStorageThroughput yields 120 MB/s of file system throughput. You pay for the amount of throughput that you provision. Valid values: /// /// * For PERSISTENT_1 SSD storage: 50, 100, 200 MB/s/TiB. @@ -4810,6 +4895,7 @@ extension FSxClientTypes { importPath: Swift.String? = nil, importedFileChunkSize: Swift.Int? = nil, logConfiguration: FSxClientTypes.LustreLogCreateConfiguration? = nil, + metadataConfiguration: FSxClientTypes.CreateFileSystemLustreMetadataConfiguration? = nil, perUnitStorageThroughput: Swift.Int? = nil, rootSquashConfiguration: FSxClientTypes.LustreRootSquashConfiguration? = nil, weeklyMaintenanceStartTime: Swift.String? = nil @@ -4826,6 +4912,7 @@ extension FSxClientTypes { self.importPath = importPath self.importedFileChunkSize = importedFileChunkSize self.logConfiguration = logConfiguration + self.metadataConfiguration = metadataConfiguration self.perUnitStorageThroughput = perUnitStorageThroughput self.rootSquashConfiguration = rootSquashConfiguration self.weeklyMaintenanceStartTime = weeklyMaintenanceStartTime @@ -4859,7 +4946,7 @@ extension FSxClientTypes { public var endpointIpAddressRange: Swift.String? /// The ONTAP administrative password for the fsxadmin user with which you administer your file system using the NetApp ONTAP CLI and REST API. public var fsxAdminPassword: Swift.String? - /// Specifies how many high-availability (HA) pairs of file servers will power your file system. Scale-up file systems are powered by 1 HA pair. The default value is 1. FSx for ONTAP scale-out file systems are powered by up to 12 HA pairs. The value of this property affects the values of StorageCapacity, Iops, and ThroughputCapacity. For more information, see [High-availability (HA) pairs](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/HA-pairs.html) in the FSx for ONTAP user guide. Amazon FSx responds with an HTTP status code 400 (Bad Request) for the following conditions: + /// Specifies how many high-availability (HA) pairs of file servers will power your file system. Scale-up file systems are powered by 1 HA pair. The default value is 1. FSx for ONTAP scale-out file systems are powered by up to 12 HA pairs. The value of this property affects the values of StorageCapacity, Iops, and ThroughputCapacity. For more information, see [High-availability (HA) pairs](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/administering-file-systems.html#HA-pairs) in the FSx for ONTAP user guide. Amazon FSx responds with an HTTP status code 400 (Bad Request) for the following conditions: /// /// * The value of HAPairs is less than 1 or greater than 12. /// @@ -5235,14 +5322,20 @@ public struct CreateFileSystemInput { /// The type of Amazon FSx file system to create. Valid values are WINDOWS, LUSTRE, ONTAP, and OPENZFS. /// This member is required. public var fileSystemType: FSxClientTypes.FileSystemType? - /// (Optional) For FSx for Lustre file systems, sets the Lustre version for the file system that you're creating. Valid values are 2.10, 2.12, and 2.15: + /// For FSx for Lustre file systems, sets the Lustre version for the file system that you're creating. Valid values are 2.10, 2.12, and 2.15: /// /// * 2.10 is supported by the Scratch and Persistent_1 Lustre deployment types. /// - /// * 2.12 and 2.15 are supported by all Lustre deployment types. 2.12 or 2.15 is required when setting FSx for Lustre DeploymentType to PERSISTENT_2. + /// * 2.12 is supported by all Lustre deployment types, except for PERSISTENT_2 with a metadata configuration mode. + /// + /// * 2.15 is supported by all Lustre deployment types and is recommended for all new file systems. + /// + /// + /// Default value is 2.10, except for the following deployments: /// + /// * Default value is 2.12 when DeploymentType is set to PERSISTENT_2 without a metadata configuration mode. /// - /// Default value = 2.10, except when DeploymentType is set to PERSISTENT_2, then the default is 2.12. If you set FileSystemTypeVersion to 2.10 for a PERSISTENT_2 Lustre deployment type, the CreateFileSystem operation fails. + /// * Default value is 2.15 when DeploymentType is set to PERSISTENT_2 with a metadata configuration mode. public var fileSystemTypeVersion: Swift.String? /// Specifies the ID of the Key Management Service (KMS) key to use for encrypting data on Amazon FSx file systems, as follows: /// @@ -5275,7 +5368,7 @@ public struct CreateFileSystemInput { public var securityGroupIds: [Swift.String]? /// Sets the storage capacity of the file system that you're creating, in gibibytes (GiB). FSx for Lustre file systems - The amount of storage capacity that you can configure depends on the value that you set for StorageType and the Lustre DeploymentType, as follows: /// - /// * For SCRATCH_2, PERSISTENT_2 and PERSISTENT_1 deployment types using SSD storage type, the valid values are 1200 GiB, 2400 GiB, and increments of 2400 GiB. + /// * For SCRATCH_2, PERSISTENT_2, and PERSISTENT_1 deployment types using SSD storage type, the valid values are 1200 GiB, 2400 GiB, and increments of 2400 GiB. /// /// * For PERSISTENT_1 HDD file systems, valid values are increments of 6000 GiB for 12 MB/s/TiB file systems and increments of 1800 GiB for 40 MB/s/TiB file systems. /// @@ -5519,7 +5612,7 @@ public struct CreateStorageVirtualMachineInput { /// /// * NTFS if the file system is managed by a Microsoft Windows administrator, the majority of users are SMB clients, and an application accessing the data uses a Microsoft Windows user as the service account. /// - /// * MIXED This is an advanced setting. For more information, see [Volume security style] in the Amazon FSx for NetApp ONTAP User Guide. + /// * MIXED This is an advanced setting. For more information, see [Volume security style](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/volume-security-style.html) in the Amazon FSx for NetApp ONTAP User Guide. public var rootVolumeSecurityStyle: FSxClientTypes.StorageVirtualMachineRootVolumeSecurityStyle? /// The password to use when managing the SVM using the NetApp ONTAP CLI or REST API. If you do not specify a password, you can still use the file system's fsxadmin user to manage the SVM. public var svmAdminPassword: Swift.String? @@ -5939,9 +6032,9 @@ extension FSxClientTypes { /// * DP specifies a data-protection volume. A DP volume is read-only and can be used as the destination of a NetApp SnapMirror relationship. /// /// - /// For more information, see [Volume types](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/volume-types) in the Amazon FSx for NetApp ONTAP User Guide. + /// For more information, see [Volume types](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/managing-volumes.html#volume-types) in the Amazon FSx for NetApp ONTAP User Guide. public var ontapVolumeType: FSxClientTypes.InputOntapVolumeType? - /// Specifies the security style for the volume. If a volume's security style is not specified, it is automatically set to the root volume's security style. The security style determines the type of permissions that FSx for ONTAP uses to control data access. For more information, see [Volume security style](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/volume-security-style) in the Amazon FSx for NetApp ONTAP User Guide. Specify one of the following values: + /// Specifies the security style for the volume. If a volume's security style is not specified, it is automatically set to the root volume's security style. The security style determines the type of permissions that FSx for ONTAP uses to control data access. Specify one of the following values: /// /// * UNIX if the file system is managed by a UNIX administrator, the majority of users are NFS clients, and an application accessing the data uses a UNIX user as the service account. /// @@ -5950,7 +6043,7 @@ extension FSxClientTypes { /// * MIXED This is an advanced setting. For more information, see the topic [What the security styles and their effects are](https://docs.netapp.com/us-en/ontap/nfs-admin/security-styles-their-effects-concept.html) in the NetApp Documentation Center. /// /// - /// For more information, see [Volume security style](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/volume-security-style.html) in the FSx for ONTAP User Guide. + /// For more information, see [Volume security style](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/managing-volumes.html#volume-security-style) in the FSx for ONTAP User Guide. public var securityStyle: FSxClientTypes.SecurityStyle? /// Specifies the configured size of the volume, in bytes. public var sizeInBytes: Swift.Int? @@ -5994,7 +6087,7 @@ extension FSxClientTypes { /// /// * NONE - keeps a volume's data in the primary storage tier, preventing it from being moved to the capacity pool tier. public var tieringPolicy: FSxClientTypes.TieringPolicy? - /// Use to specify the style of an ONTAP volume. FSx for ONTAP offers two styles of volumes that you can use for different purposes, FlexVol and FlexGroup volumes. For more information, see [Volume styles](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/volume-styles.html) in the Amazon FSx for NetApp ONTAP User Guide. + /// Use to specify the style of an ONTAP volume. FSx for ONTAP offers two styles of volumes that you can use for different purposes, FlexVol and FlexGroup volumes. For more information, see [Volume styles](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/managing-volumes.html#volume-styles) in the Amazon FSx for NetApp ONTAP User Guide. public var volumeStyle: FSxClientTypes.VolumeStyle? public init( @@ -7921,6 +8014,30 @@ public struct UpdateFileCacheOutput { } } +extension FSxClientTypes { + /// The Lustre metadata performance configuration update for an Amazon FSx for Lustre file system using a PERSISTENT_2 deployment type. You can request an increase in your file system's Metadata IOPS and/or switch your file system's metadata configuration mode. For more information, see [Managing metadata performance](https://docs.aws.amazon.com/fsx/latest/LustreGuide/managing-metadata-performance.html) in the Amazon FSx for Lustre User Guide. + public struct UpdateFileSystemLustreMetadataConfiguration { + /// (USER_PROVISIONED mode only) Specifies the number of Metadata IOPS to provision for your file system. Valid values are 1500, 3000, 6000, 12000, and multiples of 12000 up to a maximum of 192000. The value you provide must be greater than or equal to the current number of Metadata IOPS provisioned for the file system. + public var iops: Swift.Int? + /// The metadata configuration mode for provisioning Metadata IOPS for an FSx for Lustre file system using a PERSISTENT_2 deployment type. + /// + /// * To increase the Metadata IOPS or to switch from AUTOMATIC mode, specify USER_PROVISIONED as the value for this parameter. Then use the Iops parameter to provide a Metadata IOPS value that is greater than or equal to the current number of Metadata IOPS provisioned for the file system. + /// + /// * To switch from USER_PROVISIONED mode, specify AUTOMATIC as the value for this parameter, but do not input a value for Iops. If you request to switch from USER_PROVISIONED to AUTOMATIC mode and the current Metadata IOPS value is greater than the automated default, FSx for Lustre rejects the request because downscaling Metadata IOPS is not supported. + public var mode: FSxClientTypes.MetadataConfigurationMode? + + public init( + iops: Swift.Int? = nil, + mode: FSxClientTypes.MetadataConfigurationMode? = nil + ) + { + self.iops = iops + self.mode = mode + } + } + +} + extension FSxClientTypes { /// The configuration object for Amazon FSx for Lustre file systems used in the UpdateFileSystem operation. public struct UpdateFileSystemLustreConfiguration { @@ -7952,6 +8069,8 @@ extension FSxClientTypes { public var dataCompressionType: FSxClientTypes.DataCompressionType? /// The Lustre logging configuration used when updating an Amazon FSx for Lustre file system. When logging is enabled, Lustre logs error and warning events for data repositories associated with your file system to Amazon CloudWatch Logs. public var logConfiguration: FSxClientTypes.LustreLogCreateConfiguration? + /// The Lustre metadata performance configuration for an Amazon FSx for Lustre file system using a PERSISTENT_2 deployment type. When this configuration is enabled, the file system supports increasing metadata performance. + public var metadataConfiguration: FSxClientTypes.UpdateFileSystemLustreMetadataConfiguration? /// The throughput of an Amazon FSx for Lustre Persistent SSD-based file system, measured in megabytes per second per tebibyte (MB/s/TiB). You can increase or decrease your file system's throughput. Valid values depend on the deployment type of the file system, as follows: /// /// * For PERSISTENT_1 SSD-based deployment types, valid values are 50, 100, and 200 MB/s/TiB. @@ -7972,6 +8091,7 @@ extension FSxClientTypes { dailyAutomaticBackupStartTime: Swift.String? = nil, dataCompressionType: FSxClientTypes.DataCompressionType? = nil, logConfiguration: FSxClientTypes.LustreLogCreateConfiguration? = nil, + metadataConfiguration: FSxClientTypes.UpdateFileSystemLustreMetadataConfiguration? = nil, perUnitStorageThroughput: Swift.Int? = nil, rootSquashConfiguration: FSxClientTypes.LustreRootSquashConfiguration? = nil, weeklyMaintenanceStartTime: Swift.String? = nil @@ -7982,6 +8102,7 @@ extension FSxClientTypes { self.dailyAutomaticBackupStartTime = dailyAutomaticBackupStartTime self.dataCompressionType = dataCompressionType self.logConfiguration = logConfiguration + self.metadataConfiguration = metadataConfiguration self.perUnitStorageThroughput = perUnitStorageThroughput self.rootSquashConfiguration = rootSquashConfiguration self.weeklyMaintenanceStartTime = weeklyMaintenanceStartTime @@ -8113,19 +8234,19 @@ extension FSxClientTypes { } extension FSxClientTypes { - /// Specifies changes you are making to the self-managed Microsoft Active Directory (AD) configuration to which an FSx for Windows File Server file system or an FSx for ONTAP SVM is joined. + /// Specifies changes you are making to the self-managed Microsoft Active Directory configuration to which an FSx for Windows File Server file system or an FSx for ONTAP SVM is joined. public struct SelfManagedActiveDirectoryConfigurationUpdates { - /// A list of up to three DNS server or domain controller IP addresses in your self-managed AD domain. + /// A list of up to three DNS server or domain controller IP addresses in your self-managed Active Directory domain. public var dnsIps: [Swift.String]? - /// Specifies an updated fully qualified domain name of your self-managed AD configuration. + /// Specifies an updated fully qualified domain name of your self-managed Active Directory configuration. public var domainName: Swift.String? - /// Specifies the updated name of the self-managed AD domain group whose members are granted administrative privileges for the Amazon FSx resource. + /// For FSx for ONTAP file systems only - Specifies the updated name of the self-managed Active Directory domain group whose members are granted administrative privileges for the Amazon FSx resource. public var fileSystemAdministratorsGroup: Swift.String? - /// Specifies an updated fully qualified distinguished name of the organization unit within your self-managed AD. + /// Specifies an updated fully qualified distinguished name of the organization unit within your self-managed Active Directory. public var organizationalUnitDistinguishedName: Swift.String? - /// Specifies the updated password for the service account on your self-managed AD domain. Amazon FSx uses this account to join to your self-managed AD domain. + /// Specifies the updated password for the service account on your self-managed Active Directory domain. Amazon FSx uses this account to join to your self-managed Active Directory domain. public var password: Swift.String? - /// Specifies the updated user name for the service account on your self-managed AD domain. Amazon FSx uses this account to join to your self-managed AD domain. This account must have the permissions required to join computers to the domain in the organizational unit provided in OrganizationalUnitDistinguishedName. + /// Specifies the updated user name for the service account on your self-managed Active Directory domain. Amazon FSx uses this account to join to your self-managed Active Directory domain. This account must have the permissions required to join computers to the domain in the organizational unit provided in OrganizationalUnitDistinguishedName. public var userName: Swift.String? public init( @@ -8299,7 +8420,7 @@ extension FSxClientTypes { public struct UpdateSvmActiveDirectoryConfiguration { /// Specifies an updated NetBIOS name of the AD computer object NetBiosName to which an SVM is joined. public var netBiosName: Swift.String? - /// Specifies changes you are making to the self-managed Microsoft Active Directory (AD) configuration to which an FSx for Windows File Server file system or an FSx for ONTAP SVM is joined. + /// Specifies changes you are making to the self-managed Microsoft Active Directory configuration to which an FSx for Windows File Server file system or an FSx for ONTAP SVM is joined. public var selfManagedActiveDirectoryConfiguration: FSxClientTypes.SelfManagedActiveDirectoryConfigurationUpdates? public init( @@ -12228,6 +12349,18 @@ extension FSxClientTypes.LustreFileSystemConfiguration { value.dataCompressionType = try reader["DataCompressionType"].readIfPresent() value.logConfiguration = try reader["LogConfiguration"].readIfPresent(with: FSxClientTypes.LustreLogConfiguration.read(from:)) value.rootSquashConfiguration = try reader["RootSquashConfiguration"].readIfPresent(with: FSxClientTypes.LustreRootSquashConfiguration.read(from:)) + value.metadataConfiguration = try reader["MetadataConfiguration"].readIfPresent(with: FSxClientTypes.FileSystemLustreMetadataConfiguration.read(from:)) + return value + } +} + +extension FSxClientTypes.FileSystemLustreMetadataConfiguration { + + static func read(from reader: SmithyJSON.Reader) throws -> FSxClientTypes.FileSystemLustreMetadataConfiguration { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = FSxClientTypes.FileSystemLustreMetadataConfiguration() + value.iops = try reader["Iops"].readIfPresent() + value.mode = try reader["Mode"].readIfPresent() return value } } @@ -12955,12 +13088,22 @@ extension FSxClientTypes.CreateFileSystemLustreConfiguration { try writer["ImportPath"].write(value.importPath) try writer["ImportedFileChunkSize"].write(value.importedFileChunkSize) try writer["LogConfiguration"].write(value.logConfiguration, with: FSxClientTypes.LustreLogCreateConfiguration.write(value:to:)) + try writer["MetadataConfiguration"].write(value.metadataConfiguration, with: FSxClientTypes.CreateFileSystemLustreMetadataConfiguration.write(value:to:)) try writer["PerUnitStorageThroughput"].write(value.perUnitStorageThroughput) try writer["RootSquashConfiguration"].write(value.rootSquashConfiguration, with: FSxClientTypes.LustreRootSquashConfiguration.write(value:to:)) try writer["WeeklyMaintenanceStartTime"].write(value.weeklyMaintenanceStartTime) } } +extension FSxClientTypes.CreateFileSystemLustreMetadataConfiguration { + + static func write(value: FSxClientTypes.CreateFileSystemLustreMetadataConfiguration?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Iops"].write(value.iops) + try writer["Mode"].write(value.mode) + } +} + extension FSxClientTypes.LustreLogCreateConfiguration { static func write(value: FSxClientTypes.LustreLogCreateConfiguration?, to writer: SmithyJSON.Writer) throws { @@ -13233,12 +13376,22 @@ extension FSxClientTypes.UpdateFileSystemLustreConfiguration { try writer["DailyAutomaticBackupStartTime"].write(value.dailyAutomaticBackupStartTime) try writer["DataCompressionType"].write(value.dataCompressionType) try writer["LogConfiguration"].write(value.logConfiguration, with: FSxClientTypes.LustreLogCreateConfiguration.write(value:to:)) + try writer["MetadataConfiguration"].write(value.metadataConfiguration, with: FSxClientTypes.UpdateFileSystemLustreMetadataConfiguration.write(value:to:)) try writer["PerUnitStorageThroughput"].write(value.perUnitStorageThroughput) try writer["RootSquashConfiguration"].write(value.rootSquashConfiguration, with: FSxClientTypes.LustreRootSquashConfiguration.write(value:to:)) try writer["WeeklyMaintenanceStartTime"].write(value.weeklyMaintenanceStartTime) } } +extension FSxClientTypes.UpdateFileSystemLustreMetadataConfiguration { + + static func write(value: FSxClientTypes.UpdateFileSystemLustreMetadataConfiguration?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Iops"].write(value.iops) + try writer["Mode"].write(value.mode) + } +} + extension FSxClientTypes.UpdateFileSystemOntapConfiguration { static func write(value: FSxClientTypes.UpdateFileSystemOntapConfiguration?, to writer: SmithyJSON.Writer) throws { diff --git a/Sources/Services/AWSFirehose/Sources/AWSFirehose/FirehoseClient.swift b/Sources/Services/AWSFirehose/Sources/AWSFirehose/FirehoseClient.swift index f2723ec5197..4e43bf317b5 100644 --- a/Sources/Services/AWSFirehose/Sources/AWSFirehose/FirehoseClient.swift +++ b/Sources/Services/AWSFirehose/Sources/AWSFirehose/FirehoseClient.swift @@ -518,7 +518,7 @@ extension FirehoseClient { /// Performs the `StartDeliveryStreamEncryption` operation on the `Firehose_20150804` service. /// - /// Enables server-side encryption (SSE) for the delivery stream. This operation is asynchronous. It returns immediately. When you invoke it, Firehose first sets the encryption status of the stream to ENABLING, and then to ENABLED. The encryption status of a delivery stream is the Status property in [DeliveryStreamEncryptionConfiguration]. If the operation fails, the encryption status changes to ENABLING_FAILED. You can continue to read and write data to your delivery stream while the encryption status is ENABLING, but the data is not encrypted. It can take up to 5 seconds after the encryption status changes to ENABLED before all records written to the delivery stream are encrypted. To find out whether a record or a batch of records was encrypted, check the response elements [PutRecordOutput$Encrypted] and [PutRecordBatchOutput$Encrypted], respectively. To check the encryption status of a delivery stream, use [DescribeDeliveryStream]. Even if encryption is currently enabled for a delivery stream, you can still invoke this operation on it to change the ARN of the CMK or both its type and ARN. If you invoke this method to change the CMK, and the old CMK is of type CUSTOMER_MANAGED_CMK, Firehose schedules the grant it had on the old CMK for retirement. If the new CMK is of type CUSTOMER_MANAGED_CMK, Firehose creates a grant that enables it to use the new CMK to encrypt and decrypt data and to manage the grant. For the KMS grant creation to be successful, Firehose APIs StartDeliveryStreamEncryption and CreateDeliveryStream should not be called with session credentials that are more than 6 hours old. If a delivery stream already has encryption enabled and then you invoke this operation to change the ARN of the CMK or both its type and ARN and you get ENABLING_FAILED, this only means that the attempt to change the CMK failed. In this case, encryption remains enabled with the old CMK. If the encryption status of your delivery stream is ENABLING_FAILED, you can invoke this operation again with a valid CMK. The CMK must be enabled and the key policy mustn't explicitly deny the permission for Firehose to invoke KMS encrypt and decrypt operations. You can enable SSE for a delivery stream only if it's a delivery stream that uses DirectPut as its source. The StartDeliveryStreamEncryption and StopDeliveryStreamEncryption operations have a combined limit of 25 calls per delivery stream per 24 hours. For example, you reach the limit if you call StartDeliveryStreamEncryption 13 times and StopDeliveryStreamEncryption 12 times for the same delivery stream in a 24-hour period. + /// Enables server-side encryption (SSE) for the delivery stream. This operation is asynchronous. It returns immediately. When you invoke it, Firehose first sets the encryption status of the stream to ENABLING, and then to ENABLED. The encryption status of a delivery stream is the Status property in [DeliveryStreamEncryptionConfiguration]. If the operation fails, the encryption status changes to ENABLING_FAILED. You can continue to read and write data to your delivery stream while the encryption status is ENABLING, but the data is not encrypted. It can take up to 5 seconds after the encryption status changes to ENABLED before all records written to the delivery stream are encrypted. To find out whether a record or a batch of records was encrypted, check the response elements [PutRecordOutput$Encrypted] and [PutRecordBatchOutput$Encrypted], respectively. To check the encryption status of a delivery stream, use [DescribeDeliveryStream]. Even if encryption is currently enabled for a delivery stream, you can still invoke this operation on it to change the ARN of the CMK or both its type and ARN. If you invoke this method to change the CMK, and the old CMK is of type CUSTOMER_MANAGED_CMK, Firehose schedules the grant it had on the old CMK for retirement. If the new CMK is of type CUSTOMER_MANAGED_CMK, Firehose creates a grant that enables it to use the new CMK to encrypt and decrypt data and to manage the grant. For the KMS grant creation to be successful, the Firehose API operations StartDeliveryStreamEncryption and CreateDeliveryStream should not be called with session credentials that are more than 6 hours old. If a delivery stream already has encryption enabled and then you invoke this operation to change the ARN of the CMK or both its type and ARN and you get ENABLING_FAILED, this only means that the attempt to change the CMK failed. In this case, encryption remains enabled with the old CMK. If the encryption status of your delivery stream is ENABLING_FAILED, you can invoke this operation again with a valid CMK. The CMK must be enabled and the key policy mustn't explicitly deny the permission for Firehose to invoke KMS encrypt and decrypt operations. You can enable SSE for a delivery stream only if it's a delivery stream that uses DirectPut as its source. The StartDeliveryStreamEncryption and StopDeliveryStreamEncryption operations have a combined limit of 25 calls per delivery stream per 24 hours. For example, you reach the limit if you call StartDeliveryStreamEncryption 13 times and StopDeliveryStreamEncryption 12 times for the same delivery stream in a 24-hour period. /// /// - Parameter StartDeliveryStreamEncryptionInput : [no documentation found] /// diff --git a/Sources/Services/AWSFirehose/Sources/AWSFirehose/Models.swift b/Sources/Services/AWSFirehose/Sources/AWSFirehose/Models.swift index c1b9a87823b..05d0e8126ec 100644 --- a/Sources/Services/AWSFirehose/Sources/AWSFirehose/Models.swift +++ b/Sources/Services/AWSFirehose/Sources/AWSFirehose/Models.swift @@ -1858,7 +1858,7 @@ extension FirehoseClientTypes { } extension FirehoseClientTypes { - /// A serializer to use for converting data to the Parquet format before storing it in Amazon S3. For more information, see [Apache Parquet](https://parquet.apache.org/documentation/latest/). + /// A serializer to use for converting data to the Parquet format before storing it in Amazon S3. For more information, see [Apache Parquet](https://parquet.apache.org/docs/). public struct ParquetSerDe { /// The Hadoop Distributed File System (HDFS) block size. This is useful if you intend to copy the data from Amazon S3 to HDFS before querying. The default is 256 MiB and the minimum is 64 MiB. Firehose uses this value for padding calculations. public var blockSizeBytes: Swift.Int? @@ -2274,6 +2274,31 @@ extension FirehoseClientTypes { } } +extension FirehoseClientTypes { + /// The structure that defines how Firehose accesses the secret. + public struct SecretsManagerConfiguration { + /// Specifies whether you want to use the the secrets manager feature. When set as True the secrets manager configuration overwrites the existing secrets in the destination configuration. When it's set to False Firehose falls back to the credentials in the destination configuration. + /// This member is required. + public var enabled: Swift.Bool? + /// Specifies the role that Firehose assumes when calling the Secrets Manager API operation. When you provide the role, it overrides any destination specific role defined in the destination configuration. If you do not provide the then we use the destination specific role. This parameter is required for Splunk. + public var roleARN: Swift.String? + /// The ARN of the secret that stores your credentials. It must be in the same region as the Firehose stream and the role. The secret ARN can reside in a different account than the delivery stream and role as Firehose supports cross-account secret access. This parameter is required when Enabled is set to True. + public var secretARN: Swift.String? + + public init( + enabled: Swift.Bool? = nil, + roleARN: Swift.String? = nil, + secretARN: Swift.String? = nil + ) + { + self.enabled = enabled + self.roleARN = roleARN + self.secretARN = secretARN + } + } + +} + extension FirehoseClientTypes { /// Describes the configuration of the HTTP endpoint destination. public struct HttpEndpointDestinationConfiguration { @@ -2286,7 +2311,7 @@ extension FirehoseClientTypes { public var endpointConfiguration: FirehoseClientTypes.HttpEndpointConfiguration? /// Describes a data processing configuration. public var processingConfiguration: FirehoseClientTypes.ProcessingConfiguration? - /// The configuration of the requeste sent to the HTTP endpoint specified as the destination. + /// The configuration of the request sent to the HTTP endpoint that is specified as the destination. public var requestConfiguration: FirehoseClientTypes.HttpEndpointRequestConfiguration? /// Describes the retry behavior in case Firehose is unable to deliver data to the specified HTTP endpoint destination, or if it doesn't receive a valid acknowledgment of receipt from the specified HTTP endpoint destination. public var retryOptions: FirehoseClientTypes.HttpEndpointRetryOptions? @@ -2297,6 +2322,8 @@ extension FirehoseClientTypes { /// Describes the configuration of a destination in Amazon S3. /// This member is required. public var s3Configuration: FirehoseClientTypes.S3DestinationConfiguration? + /// The configuration that defines how you access secrets for HTTP Endpoint destination. + public var secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? public init( bufferingHints: FirehoseClientTypes.HttpEndpointBufferingHints? = nil, @@ -2307,7 +2334,8 @@ extension FirehoseClientTypes { retryOptions: FirehoseClientTypes.HttpEndpointRetryOptions? = nil, roleARN: Swift.String? = nil, s3BackupMode: FirehoseClientTypes.HttpEndpointS3BackupMode? = nil, - s3Configuration: FirehoseClientTypes.S3DestinationConfiguration? = nil + s3Configuration: FirehoseClientTypes.S3DestinationConfiguration? = nil, + secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? = nil ) { self.bufferingHints = bufferingHints @@ -2319,6 +2347,7 @@ extension FirehoseClientTypes { self.roleARN = roleARN self.s3BackupMode = s3BackupMode self.s3Configuration = s3Configuration + self.secretsManagerConfiguration = secretsManagerConfiguration } } @@ -2430,7 +2459,6 @@ extension FirehoseClientTypes { /// This member is required. public var copyCommand: FirehoseClientTypes.CopyCommand? /// The user password. - /// This member is required. public var password: Swift.String? /// The data processing configuration. public var processingConfiguration: FirehoseClientTypes.ProcessingConfiguration? @@ -2446,8 +2474,9 @@ extension FirehoseClientTypes { /// The configuration for the intermediate Amazon S3 location from which Amazon Redshift obtains data. Restrictions are described in the topic for [CreateDeliveryStream]. The compression formats SNAPPY or ZIP cannot be specified in RedshiftDestinationConfiguration.S3Configuration because the Amazon Redshift COPY operation that reads from the S3 bucket doesn't support these compression formats. /// This member is required. public var s3Configuration: FirehoseClientTypes.S3DestinationConfiguration? + /// The configuration that defines how you access secrets for Amazon Redshift. + public var secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? /// The name of the user. - /// This member is required. public var username: Swift.String? public init( @@ -2461,6 +2490,7 @@ extension FirehoseClientTypes { s3BackupConfiguration: FirehoseClientTypes.S3DestinationConfiguration? = nil, s3BackupMode: FirehoseClientTypes.RedshiftS3BackupMode? = nil, s3Configuration: FirehoseClientTypes.S3DestinationConfiguration? = nil, + secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? = nil, username: Swift.String? = nil ) { @@ -2474,6 +2504,7 @@ extension FirehoseClientTypes { self.s3BackupConfiguration = s3BackupConfiguration self.s3BackupMode = s3BackupMode self.s3Configuration = s3Configuration + self.secretsManagerConfiguration = secretsManagerConfiguration self.username = username } } @@ -2482,7 +2513,7 @@ extension FirehoseClientTypes { extension FirehoseClientTypes.RedshiftDestinationConfiguration: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "RedshiftDestinationConfiguration(cloudWatchLoggingOptions: \(Swift.String(describing: cloudWatchLoggingOptions)), clusterJDBCURL: \(Swift.String(describing: clusterJDBCURL)), copyCommand: \(Swift.String(describing: copyCommand)), processingConfiguration: \(Swift.String(describing: processingConfiguration)), retryOptions: \(Swift.String(describing: retryOptions)), roleARN: \(Swift.String(describing: roleARN)), s3BackupConfiguration: \(Swift.String(describing: s3BackupConfiguration)), s3BackupMode: \(Swift.String(describing: s3BackupMode)), s3Configuration: \(Swift.String(describing: s3Configuration)), password: \"CONTENT_REDACTED\", username: \"CONTENT_REDACTED\")"} + "RedshiftDestinationConfiguration(cloudWatchLoggingOptions: \(Swift.String(describing: cloudWatchLoggingOptions)), clusterJDBCURL: \(Swift.String(describing: clusterJDBCURL)), copyCommand: \(Swift.String(describing: copyCommand)), processingConfiguration: \(Swift.String(describing: processingConfiguration)), retryOptions: \(Swift.String(describing: retryOptions)), roleARN: \(Swift.String(describing: roleARN)), s3BackupConfiguration: \(Swift.String(describing: s3BackupConfiguration)), s3BackupMode: \(Swift.String(describing: s3BackupMode)), s3Configuration: \(Swift.String(describing: s3Configuration)), secretsManagerConfiguration: \(Swift.String(describing: secretsManagerConfiguration)), password: \"CONTENT_REDACTED\", username: \"CONTENT_REDACTED\")"} } extension FirehoseClientTypes { @@ -2629,7 +2660,6 @@ extension FirehoseClientTypes { /// The name of the record metadata column public var metaDataColumnName: Swift.String? /// The private key used to encrypt your Snowflake client. For information, see [Using Key Pair Authentication & Key Rotation](https://docs.snowflake.com/en/user-guide/data-load-snowpipe-streaming-configuration#using-key-pair-authentication-key-rotation). - /// This member is required. public var privateKey: Swift.String? /// Describes a data processing configuration. public var processingConfiguration: FirehoseClientTypes.ProcessingConfiguration? @@ -2646,6 +2676,8 @@ extension FirehoseClientTypes { /// Each database consists of one or more schemas, which are logical groupings of database objects, such as tables and views /// This member is required. public var schema: Swift.String? + /// The configuration that defines how you access secrets for Snowflake. + public var secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? /// Optionally configure a Snowflake role. Otherwise the default user role will be used. public var snowflakeRoleConfiguration: FirehoseClientTypes.SnowflakeRoleConfiguration? /// The VPCE ID for Firehose to privately connect with Snowflake. The ID format is com.amazonaws.vpce.[region].vpce-svc-<[id]>. For more information, see [Amazon PrivateLink & Snowflake](https://docs.snowflake.com/en/user-guide/admin-security-privatelink) @@ -2654,7 +2686,6 @@ extension FirehoseClientTypes { /// This member is required. public var table: Swift.String? /// User login name for the Snowflake account. - /// This member is required. public var user: Swift.String? public init( @@ -2672,6 +2703,7 @@ extension FirehoseClientTypes { s3BackupMode: FirehoseClientTypes.SnowflakeS3BackupMode? = nil, s3Configuration: FirehoseClientTypes.S3DestinationConfiguration? = nil, schema: Swift.String? = nil, + secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? = nil, snowflakeRoleConfiguration: FirehoseClientTypes.SnowflakeRoleConfiguration? = nil, snowflakeVpcConfiguration: FirehoseClientTypes.SnowflakeVpcConfiguration? = nil, table: Swift.String? = nil, @@ -2692,6 +2724,7 @@ extension FirehoseClientTypes { self.s3BackupMode = s3BackupMode self.s3Configuration = s3Configuration self.schema = schema + self.secretsManagerConfiguration = secretsManagerConfiguration self.snowflakeRoleConfiguration = snowflakeRoleConfiguration self.snowflakeVpcConfiguration = snowflakeVpcConfiguration self.table = table @@ -2703,7 +2736,7 @@ extension FirehoseClientTypes { extension FirehoseClientTypes.SnowflakeDestinationConfiguration: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "SnowflakeDestinationConfiguration(cloudWatchLoggingOptions: \(Swift.String(describing: cloudWatchLoggingOptions)), dataLoadingOption: \(Swift.String(describing: dataLoadingOption)), processingConfiguration: \(Swift.String(describing: processingConfiguration)), retryOptions: \(Swift.String(describing: retryOptions)), roleARN: \(Swift.String(describing: roleARN)), s3BackupMode: \(Swift.String(describing: s3BackupMode)), s3Configuration: \(Swift.String(describing: s3Configuration)), snowflakeRoleConfiguration: \(Swift.String(describing: snowflakeRoleConfiguration)), snowflakeVpcConfiguration: \(Swift.String(describing: snowflakeVpcConfiguration)), accountUrl: \"CONTENT_REDACTED\", contentColumnName: \"CONTENT_REDACTED\", database: \"CONTENT_REDACTED\", keyPassphrase: \"CONTENT_REDACTED\", metaDataColumnName: \"CONTENT_REDACTED\", privateKey: \"CONTENT_REDACTED\", schema: \"CONTENT_REDACTED\", table: \"CONTENT_REDACTED\", user: \"CONTENT_REDACTED\")"} + "SnowflakeDestinationConfiguration(cloudWatchLoggingOptions: \(Swift.String(describing: cloudWatchLoggingOptions)), dataLoadingOption: \(Swift.String(describing: dataLoadingOption)), processingConfiguration: \(Swift.String(describing: processingConfiguration)), retryOptions: \(Swift.String(describing: retryOptions)), roleARN: \(Swift.String(describing: roleARN)), s3BackupMode: \(Swift.String(describing: s3BackupMode)), s3Configuration: \(Swift.String(describing: s3Configuration)), secretsManagerConfiguration: \(Swift.String(describing: secretsManagerConfiguration)), snowflakeRoleConfiguration: \(Swift.String(describing: snowflakeRoleConfiguration)), snowflakeVpcConfiguration: \(Swift.String(describing: snowflakeVpcConfiguration)), accountUrl: \"CONTENT_REDACTED\", contentColumnName: \"CONTENT_REDACTED\", database: \"CONTENT_REDACTED\", keyPassphrase: \"CONTENT_REDACTED\", metaDataColumnName: \"CONTENT_REDACTED\", privateKey: \"CONTENT_REDACTED\", schema: \"CONTENT_REDACTED\", table: \"CONTENT_REDACTED\", user: \"CONTENT_REDACTED\")"} } extension FirehoseClientTypes { @@ -2816,7 +2849,6 @@ extension FirehoseClientTypes { /// This member is required. public var hecEndpointType: FirehoseClientTypes.HECEndpointType? /// This is a GUID that you obtain from your Splunk cluster when you create a new HEC endpoint. - /// This member is required. public var hecToken: Swift.String? /// The data processing configuration. public var processingConfiguration: FirehoseClientTypes.ProcessingConfiguration? @@ -2827,6 +2859,8 @@ extension FirehoseClientTypes { /// The configuration for the backup Amazon S3 location. /// This member is required. public var s3Configuration: FirehoseClientTypes.S3DestinationConfiguration? + /// The configuration that defines how you access secrets for Splunk. + public var secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? public init( bufferingHints: FirehoseClientTypes.SplunkBufferingHints? = nil, @@ -2838,7 +2872,8 @@ extension FirehoseClientTypes { processingConfiguration: FirehoseClientTypes.ProcessingConfiguration? = nil, retryOptions: FirehoseClientTypes.SplunkRetryOptions? = nil, s3BackupMode: FirehoseClientTypes.SplunkS3BackupMode? = nil, - s3Configuration: FirehoseClientTypes.S3DestinationConfiguration? = nil + s3Configuration: FirehoseClientTypes.S3DestinationConfiguration? = nil, + secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? = nil ) { self.bufferingHints = bufferingHints @@ -2851,6 +2886,7 @@ extension FirehoseClientTypes { self.retryOptions = retryOptions self.s3BackupMode = s3BackupMode self.s3Configuration = s3Configuration + self.secretsManagerConfiguration = secretsManagerConfiguration } } @@ -3398,6 +3434,8 @@ extension FirehoseClientTypes { public var s3BackupMode: FirehoseClientTypes.HttpEndpointS3BackupMode? /// Describes a destination in Amazon S3. public var s3DestinationDescription: FirehoseClientTypes.S3DestinationDescription? + /// The configuration that defines how you access secrets for HTTP Endpoint destination. + public var secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? public init( bufferingHints: FirehoseClientTypes.HttpEndpointBufferingHints? = nil, @@ -3408,7 +3446,8 @@ extension FirehoseClientTypes { retryOptions: FirehoseClientTypes.HttpEndpointRetryOptions? = nil, roleARN: Swift.String? = nil, s3BackupMode: FirehoseClientTypes.HttpEndpointS3BackupMode? = nil, - s3DestinationDescription: FirehoseClientTypes.S3DestinationDescription? = nil + s3DestinationDescription: FirehoseClientTypes.S3DestinationDescription? = nil, + secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? = nil ) { self.bufferingHints = bufferingHints @@ -3420,6 +3459,7 @@ extension FirehoseClientTypes { self.roleARN = roleARN self.s3BackupMode = s3BackupMode self.s3DestinationDescription = s3DestinationDescription + self.secretsManagerConfiguration = secretsManagerConfiguration } } @@ -3450,8 +3490,9 @@ extension FirehoseClientTypes { /// The Amazon S3 destination. /// This member is required. public var s3DestinationDescription: FirehoseClientTypes.S3DestinationDescription? + /// The configuration that defines how you access secrets for Amazon Redshift. + public var secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? /// The name of the user. - /// This member is required. public var username: Swift.String? public init( @@ -3464,6 +3505,7 @@ extension FirehoseClientTypes { s3BackupDescription: FirehoseClientTypes.S3DestinationDescription? = nil, s3BackupMode: FirehoseClientTypes.RedshiftS3BackupMode? = nil, s3DestinationDescription: FirehoseClientTypes.S3DestinationDescription? = nil, + secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? = nil, username: Swift.String? = nil ) { @@ -3476,6 +3518,7 @@ extension FirehoseClientTypes { self.s3BackupDescription = s3BackupDescription self.s3BackupMode = s3BackupMode self.s3DestinationDescription = s3DestinationDescription + self.secretsManagerConfiguration = secretsManagerConfiguration self.username = username } } @@ -3484,7 +3527,7 @@ extension FirehoseClientTypes { extension FirehoseClientTypes.RedshiftDestinationDescription: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "RedshiftDestinationDescription(cloudWatchLoggingOptions: \(Swift.String(describing: cloudWatchLoggingOptions)), clusterJDBCURL: \(Swift.String(describing: clusterJDBCURL)), copyCommand: \(Swift.String(describing: copyCommand)), processingConfiguration: \(Swift.String(describing: processingConfiguration)), retryOptions: \(Swift.String(describing: retryOptions)), roleARN: \(Swift.String(describing: roleARN)), s3BackupDescription: \(Swift.String(describing: s3BackupDescription)), s3BackupMode: \(Swift.String(describing: s3BackupMode)), s3DestinationDescription: \(Swift.String(describing: s3DestinationDescription)), username: \"CONTENT_REDACTED\")"} + "RedshiftDestinationDescription(cloudWatchLoggingOptions: \(Swift.String(describing: cloudWatchLoggingOptions)), clusterJDBCURL: \(Swift.String(describing: clusterJDBCURL)), copyCommand: \(Swift.String(describing: copyCommand)), processingConfiguration: \(Swift.String(describing: processingConfiguration)), retryOptions: \(Swift.String(describing: retryOptions)), roleARN: \(Swift.String(describing: roleARN)), s3BackupDescription: \(Swift.String(describing: s3BackupDescription)), s3BackupMode: \(Swift.String(describing: s3BackupMode)), s3DestinationDescription: \(Swift.String(describing: s3DestinationDescription)), secretsManagerConfiguration: \(Swift.String(describing: secretsManagerConfiguration)), username: \"CONTENT_REDACTED\")"} } extension FirehoseClientTypes { @@ -3514,6 +3557,8 @@ extension FirehoseClientTypes { public var s3DestinationDescription: FirehoseClientTypes.S3DestinationDescription? /// Each database consists of one or more schemas, which are logical groupings of database objects, such as tables and views public var schema: Swift.String? + /// The configuration that defines how you access secrets for Snowflake. + public var secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? /// Optionally configure a Snowflake role. Otherwise the default user role will be used. public var snowflakeRoleConfiguration: FirehoseClientTypes.SnowflakeRoleConfiguration? /// The VPCE ID for Firehose to privately connect with Snowflake. The ID format is com.amazonaws.vpce.[region].vpce-svc-<[id]>. For more information, see [Amazon PrivateLink & Snowflake](https://docs.snowflake.com/en/user-guide/admin-security-privatelink) @@ -3536,6 +3581,7 @@ extension FirehoseClientTypes { s3BackupMode: FirehoseClientTypes.SnowflakeS3BackupMode? = nil, s3DestinationDescription: FirehoseClientTypes.S3DestinationDescription? = nil, schema: Swift.String? = nil, + secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? = nil, snowflakeRoleConfiguration: FirehoseClientTypes.SnowflakeRoleConfiguration? = nil, snowflakeVpcConfiguration: FirehoseClientTypes.SnowflakeVpcConfiguration? = nil, table: Swift.String? = nil, @@ -3554,6 +3600,7 @@ extension FirehoseClientTypes { self.s3BackupMode = s3BackupMode self.s3DestinationDescription = s3DestinationDescription self.schema = schema + self.secretsManagerConfiguration = secretsManagerConfiguration self.snowflakeRoleConfiguration = snowflakeRoleConfiguration self.snowflakeVpcConfiguration = snowflakeVpcConfiguration self.table = table @@ -3565,7 +3612,7 @@ extension FirehoseClientTypes { extension FirehoseClientTypes.SnowflakeDestinationDescription: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "SnowflakeDestinationDescription(cloudWatchLoggingOptions: \(Swift.String(describing: cloudWatchLoggingOptions)), dataLoadingOption: \(Swift.String(describing: dataLoadingOption)), processingConfiguration: \(Swift.String(describing: processingConfiguration)), retryOptions: \(Swift.String(describing: retryOptions)), roleARN: \(Swift.String(describing: roleARN)), s3BackupMode: \(Swift.String(describing: s3BackupMode)), s3DestinationDescription: \(Swift.String(describing: s3DestinationDescription)), snowflakeRoleConfiguration: \(Swift.String(describing: snowflakeRoleConfiguration)), snowflakeVpcConfiguration: \(Swift.String(describing: snowflakeVpcConfiguration)), accountUrl: \"CONTENT_REDACTED\", contentColumnName: \"CONTENT_REDACTED\", database: \"CONTENT_REDACTED\", metaDataColumnName: \"CONTENT_REDACTED\", schema: \"CONTENT_REDACTED\", table: \"CONTENT_REDACTED\", user: \"CONTENT_REDACTED\")"} + "SnowflakeDestinationDescription(cloudWatchLoggingOptions: \(Swift.String(describing: cloudWatchLoggingOptions)), dataLoadingOption: \(Swift.String(describing: dataLoadingOption)), processingConfiguration: \(Swift.String(describing: processingConfiguration)), retryOptions: \(Swift.String(describing: retryOptions)), roleARN: \(Swift.String(describing: roleARN)), s3BackupMode: \(Swift.String(describing: s3BackupMode)), s3DestinationDescription: \(Swift.String(describing: s3DestinationDescription)), secretsManagerConfiguration: \(Swift.String(describing: secretsManagerConfiguration)), snowflakeRoleConfiguration: \(Swift.String(describing: snowflakeRoleConfiguration)), snowflakeVpcConfiguration: \(Swift.String(describing: snowflakeVpcConfiguration)), accountUrl: \"CONTENT_REDACTED\", contentColumnName: \"CONTENT_REDACTED\", database: \"CONTENT_REDACTED\", metaDataColumnName: \"CONTENT_REDACTED\", schema: \"CONTENT_REDACTED\", table: \"CONTENT_REDACTED\", user: \"CONTENT_REDACTED\")"} } extension FirehoseClientTypes { @@ -3591,6 +3638,8 @@ extension FirehoseClientTypes { public var s3BackupMode: FirehoseClientTypes.SplunkS3BackupMode? /// The Amazon S3 destination.> public var s3DestinationDescription: FirehoseClientTypes.S3DestinationDescription? + /// The configuration that defines how you access secrets for Splunk. + public var secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? public init( bufferingHints: FirehoseClientTypes.SplunkBufferingHints? = nil, @@ -3602,7 +3651,8 @@ extension FirehoseClientTypes { processingConfiguration: FirehoseClientTypes.ProcessingConfiguration? = nil, retryOptions: FirehoseClientTypes.SplunkRetryOptions? = nil, s3BackupMode: FirehoseClientTypes.SplunkS3BackupMode? = nil, - s3DestinationDescription: FirehoseClientTypes.S3DestinationDescription? = nil + s3DestinationDescription: FirehoseClientTypes.S3DestinationDescription? = nil, + secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? = nil ) { self.bufferingHints = bufferingHints @@ -3615,6 +3665,7 @@ extension FirehoseClientTypes { self.retryOptions = retryOptions self.s3BackupMode = s3BackupMode self.s3DestinationDescription = s3DestinationDescription + self.secretsManagerConfiguration = secretsManagerConfiguration } } @@ -4341,6 +4392,8 @@ extension FirehoseClientTypes { public var s3BackupMode: FirehoseClientTypes.HttpEndpointS3BackupMode? /// Describes an update for a destination in Amazon S3. public var s3Update: FirehoseClientTypes.S3DestinationUpdate? + /// The configuration that defines how you access secrets for HTTP Endpoint destination. + public var secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? public init( bufferingHints: FirehoseClientTypes.HttpEndpointBufferingHints? = nil, @@ -4351,7 +4404,8 @@ extension FirehoseClientTypes { retryOptions: FirehoseClientTypes.HttpEndpointRetryOptions? = nil, roleARN: Swift.String? = nil, s3BackupMode: FirehoseClientTypes.HttpEndpointS3BackupMode? = nil, - s3Update: FirehoseClientTypes.S3DestinationUpdate? = nil + s3Update: FirehoseClientTypes.S3DestinationUpdate? = nil, + secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? = nil ) { self.bufferingHints = bufferingHints @@ -4363,6 +4417,7 @@ extension FirehoseClientTypes { self.roleARN = roleARN self.s3BackupMode = s3BackupMode self.s3Update = s3Update + self.secretsManagerConfiguration = secretsManagerConfiguration } } @@ -4391,6 +4446,8 @@ extension FirehoseClientTypes { public var s3BackupUpdate: FirehoseClientTypes.S3DestinationUpdate? /// The Amazon S3 destination. The compression formats SNAPPY or ZIP cannot be specified in RedshiftDestinationUpdate.S3Update because the Amazon Redshift COPY operation that reads from the S3 bucket doesn't support these compression formats. public var s3Update: FirehoseClientTypes.S3DestinationUpdate? + /// The configuration that defines how you access secrets for Amazon Redshift. + public var secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? /// The name of the user. public var username: Swift.String? @@ -4405,6 +4462,7 @@ extension FirehoseClientTypes { s3BackupMode: FirehoseClientTypes.RedshiftS3BackupMode? = nil, s3BackupUpdate: FirehoseClientTypes.S3DestinationUpdate? = nil, s3Update: FirehoseClientTypes.S3DestinationUpdate? = nil, + secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? = nil, username: Swift.String? = nil ) { @@ -4418,6 +4476,7 @@ extension FirehoseClientTypes { self.s3BackupMode = s3BackupMode self.s3BackupUpdate = s3BackupUpdate self.s3Update = s3Update + self.secretsManagerConfiguration = secretsManagerConfiguration self.username = username } } @@ -4426,7 +4485,7 @@ extension FirehoseClientTypes { extension FirehoseClientTypes.RedshiftDestinationUpdate: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "RedshiftDestinationUpdate(cloudWatchLoggingOptions: \(Swift.String(describing: cloudWatchLoggingOptions)), clusterJDBCURL: \(Swift.String(describing: clusterJDBCURL)), copyCommand: \(Swift.String(describing: copyCommand)), processingConfiguration: \(Swift.String(describing: processingConfiguration)), retryOptions: \(Swift.String(describing: retryOptions)), roleARN: \(Swift.String(describing: roleARN)), s3BackupMode: \(Swift.String(describing: s3BackupMode)), s3BackupUpdate: \(Swift.String(describing: s3BackupUpdate)), s3Update: \(Swift.String(describing: s3Update)), password: \"CONTENT_REDACTED\", username: \"CONTENT_REDACTED\")"} + "RedshiftDestinationUpdate(cloudWatchLoggingOptions: \(Swift.String(describing: cloudWatchLoggingOptions)), clusterJDBCURL: \(Swift.String(describing: clusterJDBCURL)), copyCommand: \(Swift.String(describing: copyCommand)), processingConfiguration: \(Swift.String(describing: processingConfiguration)), retryOptions: \(Swift.String(describing: retryOptions)), roleARN: \(Swift.String(describing: roleARN)), s3BackupMode: \(Swift.String(describing: s3BackupMode)), s3BackupUpdate: \(Swift.String(describing: s3BackupUpdate)), s3Update: \(Swift.String(describing: s3Update)), secretsManagerConfiguration: \(Swift.String(describing: secretsManagerConfiguration)), password: \"CONTENT_REDACTED\", username: \"CONTENT_REDACTED\")"} } extension FirehoseClientTypes { @@ -4460,6 +4519,8 @@ extension FirehoseClientTypes { public var s3Update: FirehoseClientTypes.S3DestinationUpdate? /// Each database consists of one or more schemas, which are logical groupings of database objects, such as tables and views public var schema: Swift.String? + /// Describes the Secrets Manager configuration in Snowflake. + public var secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? /// Optionally configure a Snowflake role. Otherwise the default user role will be used. public var snowflakeRoleConfiguration: FirehoseClientTypes.SnowflakeRoleConfiguration? /// All data in Snowflake is stored in database tables, logically structured as collections of columns and rows. @@ -4482,6 +4543,7 @@ extension FirehoseClientTypes { s3BackupMode: FirehoseClientTypes.SnowflakeS3BackupMode? = nil, s3Update: FirehoseClientTypes.S3DestinationUpdate? = nil, schema: Swift.String? = nil, + secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? = nil, snowflakeRoleConfiguration: FirehoseClientTypes.SnowflakeRoleConfiguration? = nil, table: Swift.String? = nil, user: Swift.String? = nil @@ -4501,6 +4563,7 @@ extension FirehoseClientTypes { self.s3BackupMode = s3BackupMode self.s3Update = s3Update self.schema = schema + self.secretsManagerConfiguration = secretsManagerConfiguration self.snowflakeRoleConfiguration = snowflakeRoleConfiguration self.table = table self.user = user @@ -4511,7 +4574,7 @@ extension FirehoseClientTypes { extension FirehoseClientTypes.SnowflakeDestinationUpdate: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "SnowflakeDestinationUpdate(cloudWatchLoggingOptions: \(Swift.String(describing: cloudWatchLoggingOptions)), dataLoadingOption: \(Swift.String(describing: dataLoadingOption)), processingConfiguration: \(Swift.String(describing: processingConfiguration)), retryOptions: \(Swift.String(describing: retryOptions)), roleARN: \(Swift.String(describing: roleARN)), s3BackupMode: \(Swift.String(describing: s3BackupMode)), s3Update: \(Swift.String(describing: s3Update)), snowflakeRoleConfiguration: \(Swift.String(describing: snowflakeRoleConfiguration)), accountUrl: \"CONTENT_REDACTED\", contentColumnName: \"CONTENT_REDACTED\", database: \"CONTENT_REDACTED\", keyPassphrase: \"CONTENT_REDACTED\", metaDataColumnName: \"CONTENT_REDACTED\", privateKey: \"CONTENT_REDACTED\", schema: \"CONTENT_REDACTED\", table: \"CONTENT_REDACTED\", user: \"CONTENT_REDACTED\")"} + "SnowflakeDestinationUpdate(cloudWatchLoggingOptions: \(Swift.String(describing: cloudWatchLoggingOptions)), dataLoadingOption: \(Swift.String(describing: dataLoadingOption)), processingConfiguration: \(Swift.String(describing: processingConfiguration)), retryOptions: \(Swift.String(describing: retryOptions)), roleARN: \(Swift.String(describing: roleARN)), s3BackupMode: \(Swift.String(describing: s3BackupMode)), s3Update: \(Swift.String(describing: s3Update)), secretsManagerConfiguration: \(Swift.String(describing: secretsManagerConfiguration)), snowflakeRoleConfiguration: \(Swift.String(describing: snowflakeRoleConfiguration)), accountUrl: \"CONTENT_REDACTED\", contentColumnName: \"CONTENT_REDACTED\", database: \"CONTENT_REDACTED\", keyPassphrase: \"CONTENT_REDACTED\", metaDataColumnName: \"CONTENT_REDACTED\", privateKey: \"CONTENT_REDACTED\", schema: \"CONTENT_REDACTED\", table: \"CONTENT_REDACTED\", user: \"CONTENT_REDACTED\")"} } extension FirehoseClientTypes { @@ -4537,6 +4600,8 @@ extension FirehoseClientTypes { public var s3BackupMode: FirehoseClientTypes.SplunkS3BackupMode? /// Your update to the configuration of the backup Amazon S3 location. public var s3Update: FirehoseClientTypes.S3DestinationUpdate? + /// The configuration that defines how you access secrets for Splunk. + public var secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? public init( bufferingHints: FirehoseClientTypes.SplunkBufferingHints? = nil, @@ -4548,7 +4613,8 @@ extension FirehoseClientTypes { processingConfiguration: FirehoseClientTypes.ProcessingConfiguration? = nil, retryOptions: FirehoseClientTypes.SplunkRetryOptions? = nil, s3BackupMode: FirehoseClientTypes.SplunkS3BackupMode? = nil, - s3Update: FirehoseClientTypes.S3DestinationUpdate? = nil + s3Update: FirehoseClientTypes.S3DestinationUpdate? = nil, + secretsManagerConfiguration: FirehoseClientTypes.SecretsManagerConfiguration? = nil ) { self.bufferingHints = bufferingHints @@ -4561,6 +4627,7 @@ extension FirehoseClientTypes { self.retryOptions = retryOptions self.s3BackupMode = s3BackupMode self.s3Update = s3Update + self.secretsManagerConfiguration = secretsManagerConfiguration } } @@ -4591,7 +4658,7 @@ public struct UpdateDestinationInput { /// [Deprecated] Describes an update for a destination in Amazon S3. @available(*, deprecated) public var s3DestinationUpdate: FirehoseClientTypes.S3DestinationUpdate? - /// Update to the Snowflake destination condiguration settings + /// Update to the Snowflake destination configuration settings. public var snowflakeDestinationUpdate: FirehoseClientTypes.SnowflakeDestinationUpdate? /// Describes an update for a destination in Splunk. public var splunkDestinationUpdate: FirehoseClientTypes.SplunkDestinationUpdate? @@ -5531,6 +5598,26 @@ extension FirehoseClientTypes.SnowflakeDestinationDescription { value.retryOptions = try reader["RetryOptions"].readIfPresent(with: FirehoseClientTypes.SnowflakeRetryOptions.read(from:)) value.s3BackupMode = try reader["S3BackupMode"].readIfPresent() value.s3DestinationDescription = try reader["S3DestinationDescription"].readIfPresent(with: FirehoseClientTypes.S3DestinationDescription.read(from:)) + value.secretsManagerConfiguration = try reader["SecretsManagerConfiguration"].readIfPresent(with: FirehoseClientTypes.SecretsManagerConfiguration.read(from:)) + return value + } +} + +extension FirehoseClientTypes.SecretsManagerConfiguration { + + static func write(value: FirehoseClientTypes.SecretsManagerConfiguration?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Enabled"].write(value.enabled) + try writer["RoleARN"].write(value.roleARN) + try writer["SecretARN"].write(value.secretARN) + } + + static func read(from reader: SmithyJSON.Reader) throws -> FirehoseClientTypes.SecretsManagerConfiguration { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = FirehoseClientTypes.SecretsManagerConfiguration() + value.secretARN = try reader["SecretARN"].readIfPresent() + value.roleARN = try reader["RoleARN"].readIfPresent() + value.enabled = try reader["Enabled"].readIfPresent() return value } } @@ -5596,6 +5683,7 @@ extension FirehoseClientTypes.HttpEndpointDestinationDescription { value.retryOptions = try reader["RetryOptions"].readIfPresent(with: FirehoseClientTypes.HttpEndpointRetryOptions.read(from:)) value.s3BackupMode = try reader["S3BackupMode"].readIfPresent() value.s3DestinationDescription = try reader["S3DestinationDescription"].readIfPresent(with: FirehoseClientTypes.S3DestinationDescription.read(from:)) + value.secretsManagerConfiguration = try reader["SecretsManagerConfiguration"].readIfPresent(with: FirehoseClientTypes.SecretsManagerConfiguration.read(from:)) return value } } @@ -5692,6 +5780,7 @@ extension FirehoseClientTypes.SplunkDestinationDescription { value.processingConfiguration = try reader["ProcessingConfiguration"].readIfPresent(with: FirehoseClientTypes.ProcessingConfiguration.read(from:)) value.cloudWatchLoggingOptions = try reader["CloudWatchLoggingOptions"].readIfPresent(with: FirehoseClientTypes.CloudWatchLoggingOptions.read(from:)) value.bufferingHints = try reader["BufferingHints"].readIfPresent(with: FirehoseClientTypes.SplunkBufferingHints.read(from:)) + value.secretsManagerConfiguration = try reader["SecretsManagerConfiguration"].readIfPresent(with: FirehoseClientTypes.SecretsManagerConfiguration.read(from:)) return value } } @@ -5868,6 +5957,7 @@ extension FirehoseClientTypes.RedshiftDestinationDescription { value.s3BackupMode = try reader["S3BackupMode"].readIfPresent() value.s3BackupDescription = try reader["S3BackupDescription"].readIfPresent(with: FirehoseClientTypes.S3DestinationDescription.read(from:)) value.cloudWatchLoggingOptions = try reader["CloudWatchLoggingOptions"].readIfPresent(with: FirehoseClientTypes.CloudWatchLoggingOptions.read(from:)) + value.secretsManagerConfiguration = try reader["SecretsManagerConfiguration"].readIfPresent(with: FirehoseClientTypes.SecretsManagerConfiguration.read(from:)) return value } } @@ -6339,6 +6429,7 @@ extension FirehoseClientTypes.RedshiftDestinationConfiguration { try writer["S3BackupConfiguration"].write(value.s3BackupConfiguration, with: FirehoseClientTypes.S3DestinationConfiguration.write(value:to:)) try writer["S3BackupMode"].write(value.s3BackupMode) try writer["S3Configuration"].write(value.s3Configuration, with: FirehoseClientTypes.S3DestinationConfiguration.write(value:to:)) + try writer["SecretsManagerConfiguration"].write(value.secretsManagerConfiguration, with: FirehoseClientTypes.SecretsManagerConfiguration.write(value:to:)) try writer["Username"].write(value.username) } } @@ -6409,6 +6500,7 @@ extension FirehoseClientTypes.SplunkDestinationConfiguration { try writer["RetryOptions"].write(value.retryOptions, with: FirehoseClientTypes.SplunkRetryOptions.write(value:to:)) try writer["S3BackupMode"].write(value.s3BackupMode) try writer["S3Configuration"].write(value.s3Configuration, with: FirehoseClientTypes.S3DestinationConfiguration.write(value:to:)) + try writer["SecretsManagerConfiguration"].write(value.secretsManagerConfiguration, with: FirehoseClientTypes.SecretsManagerConfiguration.write(value:to:)) } } @@ -6425,6 +6517,7 @@ extension FirehoseClientTypes.HttpEndpointDestinationConfiguration { try writer["RoleARN"].write(value.roleARN) try writer["S3BackupMode"].write(value.s3BackupMode) try writer["S3Configuration"].write(value.s3Configuration, with: FirehoseClientTypes.S3DestinationConfiguration.write(value:to:)) + try writer["SecretsManagerConfiguration"].write(value.secretsManagerConfiguration, with: FirehoseClientTypes.SecretsManagerConfiguration.write(value:to:)) } } @@ -6483,6 +6576,7 @@ extension FirehoseClientTypes.SnowflakeDestinationConfiguration { try writer["S3BackupMode"].write(value.s3BackupMode) try writer["S3Configuration"].write(value.s3Configuration, with: FirehoseClientTypes.S3DestinationConfiguration.write(value:to:)) try writer["Schema"].write(value.schema) + try writer["SecretsManagerConfiguration"].write(value.secretsManagerConfiguration, with: FirehoseClientTypes.SecretsManagerConfiguration.write(value:to:)) try writer["SnowflakeRoleConfiguration"].write(value.snowflakeRoleConfiguration, with: FirehoseClientTypes.SnowflakeRoleConfiguration.write(value:to:)) try writer["SnowflakeVpcConfiguration"].write(value.snowflakeVpcConfiguration, with: FirehoseClientTypes.SnowflakeVpcConfiguration.write(value:to:)) try writer["Table"].write(value.table) @@ -6549,6 +6643,7 @@ extension FirehoseClientTypes.RedshiftDestinationUpdate { try writer["S3BackupMode"].write(value.s3BackupMode) try writer["S3BackupUpdate"].write(value.s3BackupUpdate, with: FirehoseClientTypes.S3DestinationUpdate.write(value:to:)) try writer["S3Update"].write(value.s3Update, with: FirehoseClientTypes.S3DestinationUpdate.write(value:to:)) + try writer["SecretsManagerConfiguration"].write(value.secretsManagerConfiguration, with: FirehoseClientTypes.SecretsManagerConfiguration.write(value:to:)) try writer["Username"].write(value.username) } } @@ -6605,6 +6700,7 @@ extension FirehoseClientTypes.SplunkDestinationUpdate { try writer["RetryOptions"].write(value.retryOptions, with: FirehoseClientTypes.SplunkRetryOptions.write(value:to:)) try writer["S3BackupMode"].write(value.s3BackupMode) try writer["S3Update"].write(value.s3Update, with: FirehoseClientTypes.S3DestinationUpdate.write(value:to:)) + try writer["SecretsManagerConfiguration"].write(value.secretsManagerConfiguration, with: FirehoseClientTypes.SecretsManagerConfiguration.write(value:to:)) } } @@ -6621,6 +6717,7 @@ extension FirehoseClientTypes.HttpEndpointDestinationUpdate { try writer["RoleARN"].write(value.roleARN) try writer["S3BackupMode"].write(value.s3BackupMode) try writer["S3Update"].write(value.s3Update, with: FirehoseClientTypes.S3DestinationUpdate.write(value:to:)) + try writer["SecretsManagerConfiguration"].write(value.secretsManagerConfiguration, with: FirehoseClientTypes.SecretsManagerConfiguration.write(value:to:)) } } @@ -6657,6 +6754,7 @@ extension FirehoseClientTypes.SnowflakeDestinationUpdate { try writer["S3BackupMode"].write(value.s3BackupMode) try writer["S3Update"].write(value.s3Update, with: FirehoseClientTypes.S3DestinationUpdate.write(value:to:)) try writer["Schema"].write(value.schema) + try writer["SecretsManagerConfiguration"].write(value.secretsManagerConfiguration, with: FirehoseClientTypes.SecretsManagerConfiguration.write(value:to:)) try writer["SnowflakeRoleConfiguration"].write(value.snowflakeRoleConfiguration, with: FirehoseClientTypes.SnowflakeRoleConfiguration.write(value:to:)) try writer["Table"].write(value.table) try writer["User"].write(value.user) diff --git a/Sources/Services/AWSGlobalAccelerator/Sources/AWSGlobalAccelerator/Models.swift b/Sources/Services/AWSGlobalAccelerator/Sources/AWSGlobalAccelerator/Models.swift index eec6f2fa01d..689b444f41e 100644 --- a/Sources/Services/AWSGlobalAccelerator/Sources/AWSGlobalAccelerator/Models.swift +++ b/Sources/Services/AWSGlobalAccelerator/Sources/AWSGlobalAccelerator/Models.swift @@ -3106,6 +3106,8 @@ public struct UpdateAcceleratorInput { public var enabled: Swift.Bool? /// The IP address type that an accelerator supports. For a standard accelerator, the value can be IPV4 or DUAL_STACK. public var ipAddressType: GlobalAcceleratorClientTypes.IpAddressType? + /// The IP addresses for an accelerator. + public var ipAddresses: [Swift.String]? /// The name of the accelerator. The name can have a maximum of 64 characters, must contain only alphanumeric characters, periods (.), or hyphens (-), and must not begin or end with a hyphen or period. public var name: Swift.String? @@ -3113,12 +3115,14 @@ public struct UpdateAcceleratorInput { acceleratorArn: Swift.String? = nil, enabled: Swift.Bool? = nil, ipAddressType: GlobalAcceleratorClientTypes.IpAddressType? = nil, + ipAddresses: [Swift.String]? = nil, name: Swift.String? = nil ) { self.acceleratorArn = acceleratorArn self.enabled = enabled self.ipAddressType = ipAddressType + self.ipAddresses = ipAddresses self.name = name } } @@ -3225,6 +3229,8 @@ public struct UpdateCustomRoutingAcceleratorInput { public var enabled: Swift.Bool? /// The IP address type that an accelerator supports. For a custom routing accelerator, the value must be IPV4. public var ipAddressType: GlobalAcceleratorClientTypes.IpAddressType? + /// The IP addresses for an accelerator. + public var ipAddresses: [Swift.String]? /// The name of the accelerator. The name can have a maximum of 64 characters, must contain only alphanumeric characters, periods (.), or hyphens (-), and must not begin or end with a hyphen or period. public var name: Swift.String? @@ -3232,12 +3238,14 @@ public struct UpdateCustomRoutingAcceleratorInput { acceleratorArn: Swift.String? = nil, enabled: Swift.Bool? = nil, ipAddressType: GlobalAcceleratorClientTypes.IpAddressType? = nil, + ipAddresses: [Swift.String]? = nil, name: Swift.String? = nil ) { self.acceleratorArn = acceleratorArn self.enabled = enabled self.ipAddressType = ipAddressType + self.ipAddresses = ipAddresses self.name = name } } @@ -4284,6 +4292,7 @@ extension UpdateAcceleratorInput { try writer["AcceleratorArn"].write(value.acceleratorArn) try writer["Enabled"].write(value.enabled) try writer["IpAddressType"].write(value.ipAddressType) + try writer["IpAddresses"].writeList(value.ipAddresses, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) try writer["Name"].write(value.name) } } @@ -4319,6 +4328,7 @@ extension UpdateCustomRoutingAcceleratorInput { try writer["AcceleratorArn"].write(value.acceleratorArn) try writer["Enabled"].write(value.enabled) try writer["IpAddressType"].write(value.ipAddressType) + try writer["IpAddresses"].writeList(value.ipAddresses, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) try writer["Name"].write(value.name) } } diff --git a/Sources/Services/AWSGlue/Sources/AWSGlue/GlueClient.swift b/Sources/Services/AWSGlue/Sources/AWSGlue/GlueClient.swift index 84e87113cea..002ed85fe8e 100644 --- a/Sources/Services/AWSGlue/Sources/AWSGlue/GlueClient.swift +++ b/Sources/Services/AWSGlue/Sources/AWSGlue/GlueClient.swift @@ -2381,6 +2381,60 @@ extension GlueClient { return result } + /// Performs the `CreateUsageProfile` operation on the `AWSGlue` service. + /// + /// Creates an Glue usage profile. + /// + /// - Parameter CreateUsageProfileInput : [no documentation found] + /// + /// - Returns: `CreateUsageProfileOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AlreadyExistsException` : A resource to be created or added already exists. + /// - `InternalServiceException` : An internal service error occurred. + /// - `InvalidInputException` : The input provided was not valid. + /// - `OperationNotSupportedException` : The operation is not available in the region. + /// - `OperationTimeoutException` : The operation timed out. + /// - `ResourceNumberLimitExceededException` : A resource numerical limit was exceeded. + public func createUsageProfile(input: CreateUsageProfileInput) async throws -> CreateUsageProfileOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createUsageProfile") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "glue") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "createUsageProfile") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(CreateUsageProfileInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSGlue.CreateUsageProfile")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: CreateUsageProfileInput.write(value:to:))) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(CreateUsageProfileOutput.httpOutput(from:), CreateUsageProfileOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `CreateUserDefinedFunction` operation on the `AWSGlue` service. /// /// Creates a new function definition in the Data Catalog. @@ -3743,6 +3797,58 @@ extension GlueClient { return result } + /// Performs the `DeleteUsageProfile` operation on the `AWSGlue` service. + /// + /// Deletes the Glue specified usage profile. + /// + /// - Parameter DeleteUsageProfileInput : [no documentation found] + /// + /// - Returns: `DeleteUsageProfileOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `InternalServiceException` : An internal service error occurred. + /// - `InvalidInputException` : The input provided was not valid. + /// - `OperationNotSupportedException` : The operation is not available in the region. + /// - `OperationTimeoutException` : The operation timed out. + public func deleteUsageProfile(input: DeleteUsageProfileInput) async throws -> DeleteUsageProfileOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "deleteUsageProfile") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "glue") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteUsageProfile") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(DeleteUsageProfileInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSGlue.DeleteUsageProfile")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: DeleteUsageProfileInput.write(value:to:))) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(DeleteUsageProfileOutput.httpOutput(from:), DeleteUsageProfileOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `DeleteUserDefinedFunction` operation on the `AWSGlue` service. /// /// Deletes an existing function definition from the Data Catalog. @@ -5295,7 +5401,7 @@ extension GlueClient { /// Performs the `GetJobRun` operation on the `AWSGlue` service. /// - /// Retrieves the metadata for a given job run. + /// Retrieves the metadata for a given job run. Job run history is accessible for 90 days for your workflow and job run. /// /// - Parameter GetJobRunInput : [no documentation found] /// @@ -7093,6 +7199,59 @@ extension GlueClient { return result } + /// Performs the `GetUsageProfile` operation on the `AWSGlue` service. + /// + /// Retrieves information about the specified Glue usage profile. + /// + /// - Parameter GetUsageProfileInput : [no documentation found] + /// + /// - Returns: `GetUsageProfileOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `EntityNotFoundException` : A specified entity does not exist + /// - `InternalServiceException` : An internal service error occurred. + /// - `InvalidInputException` : The input provided was not valid. + /// - `OperationNotSupportedException` : The operation is not available in the region. + /// - `OperationTimeoutException` : The operation timed out. + public func getUsageProfile(input: GetUsageProfileInput) async throws -> GetUsageProfileOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "getUsageProfile") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "glue") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getUsageProfile") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GetUsageProfileInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSGlue.GetUsageProfile")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: GetUsageProfileInput.write(value:to:))) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GetUsageProfileOutput.httpOutput(from:), GetUsageProfileOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `GetUserDefinedFunction` operation on the `AWSGlue` service. /// /// Retrieves a specified function definition from the Data Catalog. @@ -7253,7 +7412,7 @@ extension GlueClient { /// Performs the `GetWorkflowRun` operation on the `AWSGlue` service. /// - /// Retrieves the metadata for a given workflow run. + /// Retrieves the metadata for a given workflow run. Job run history is accessible for 90 days for your workflow and job run. /// /// - Parameter GetWorkflowRunInput : [no documentation found] /// @@ -8442,6 +8601,58 @@ extension GlueClient { return result } + /// Performs the `ListUsageProfiles` operation on the `AWSGlue` service. + /// + /// List all the Glue usage profiles. + /// + /// - Parameter ListUsageProfilesInput : [no documentation found] + /// + /// - Returns: `ListUsageProfilesOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `InternalServiceException` : An internal service error occurred. + /// - `InvalidInputException` : The input provided was not valid. + /// - `OperationNotSupportedException` : The operation is not available in the region. + /// - `OperationTimeoutException` : The operation timed out. + public func listUsageProfiles(input: ListUsageProfilesInput) async throws -> ListUsageProfilesOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listUsageProfiles") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "glue") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listUsageProfiles") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListUsageProfilesInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSGlue.ListUsageProfiles")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: ListUsageProfilesInput.write(value:to:))) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListUsageProfilesOutput.httpOutput(from:), ListUsageProfilesOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `ListWorkflows` operation on the `AWSGlue` service. /// /// Lists names of workflows created in the account. @@ -11259,6 +11470,60 @@ extension GlueClient { return result } + /// Performs the `UpdateUsageProfile` operation on the `AWSGlue` service. + /// + /// Update an Glue usage profile. + /// + /// - Parameter UpdateUsageProfileInput : [no documentation found] + /// + /// - Returns: `UpdateUsageProfileOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `ConcurrentModificationException` : Two processes are trying to modify a resource simultaneously. + /// - `EntityNotFoundException` : A specified entity does not exist + /// - `InternalServiceException` : An internal service error occurred. + /// - `InvalidInputException` : The input provided was not valid. + /// - `OperationNotSupportedException` : The operation is not available in the region. + /// - `OperationTimeoutException` : The operation timed out. + public func updateUsageProfile(input: UpdateUsageProfileInput) async throws -> UpdateUsageProfileOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "updateUsageProfile") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "glue") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "updateUsageProfile") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(UpdateUsageProfileInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSGlue.UpdateUsageProfile")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: UpdateUsageProfileInput.write(value:to:))) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(UpdateUsageProfileOutput.httpOutput(from:), UpdateUsageProfileOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `UpdateUserDefinedFunction` operation on the `AWSGlue` service. /// /// Updates an existing function definition in the Data Catalog. diff --git a/Sources/Services/AWSGlue/Sources/AWSGlue/Models.swift b/Sources/Services/AWSGlue/Sources/AWSGlue/Models.swift index 1dedcbe0b3b..f5d944a6e55 100644 --- a/Sources/Services/AWSGlue/Sources/AWSGlue/Models.swift +++ b/Sources/Services/AWSGlue/Sources/AWSGlue/Models.swift @@ -581,6 +581,218 @@ extension GlueClientTypes { } +extension GlueClientTypes { + + public enum AuthenticationType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case basic + case custom + case oauth2 + case sdkUnknown(Swift.String) + + public static var allCases: [AuthenticationType] { + return [ + .basic, + .custom, + .oauth2 + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .basic: return "BASIC" + case .custom: return "CUSTOM" + case .oauth2: return "OAUTH2" + case let .sdkUnknown(s): return s + } + } + } +} + +extension GlueClientTypes { + /// The OAuth2 client app used for the connection. + public struct OAuth2ClientApplication { + /// The reference to the SaaS-side client app that is Amazon Web Services managed. + public var awsManagedClientApplicationReference: Swift.String? + /// The client application clientID if the ClientAppType is USER_MANAGED. + public var userManagedClientApplicationClientId: Swift.String? + + public init( + awsManagedClientApplicationReference: Swift.String? = nil, + userManagedClientApplicationClientId: Swift.String? = nil + ) + { + self.awsManagedClientApplicationReference = awsManagedClientApplicationReference + self.userManagedClientApplicationClientId = userManagedClientApplicationClientId + } + } + +} + +extension GlueClientTypes { + + public enum OAuth2GrantType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case authorizationCode + case clientCredentials + case jwtBearer + case sdkUnknown(Swift.String) + + public static var allCases: [OAuth2GrantType] { + return [ + .authorizationCode, + .clientCredentials, + .jwtBearer + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .authorizationCode: return "AUTHORIZATION_CODE" + case .clientCredentials: return "CLIENT_CREDENTIALS" + case .jwtBearer: return "JWT_BEARER" + case let .sdkUnknown(s): return s + } + } + } +} + +extension GlueClientTypes { + /// A structure containing properties for OAuth2 authentication. + public struct OAuth2Properties { + /// The client application type. For example, AWS_MANAGED or USER_MANAGED. + public var oAuth2ClientApplication: GlueClientTypes.OAuth2ClientApplication? + /// The OAuth2 grant type. For example, AUTHORIZATION_CODE, JWT_BEARER, or CLIENT_CREDENTIALS. + public var oAuth2GrantType: GlueClientTypes.OAuth2GrantType? + /// The URL of the provider's authentication server, to exchange an authorization code for an access token. + public var tokenUrl: Swift.String? + /// A map of parameters that are added to the token GET request. + public var tokenUrlParametersMap: [Swift.String: Swift.String]? + + public init( + oAuth2ClientApplication: GlueClientTypes.OAuth2ClientApplication? = nil, + oAuth2GrantType: GlueClientTypes.OAuth2GrantType? = nil, + tokenUrl: Swift.String? = nil, + tokenUrlParametersMap: [Swift.String: Swift.String]? = nil + ) + { + self.oAuth2ClientApplication = oAuth2ClientApplication + self.oAuth2GrantType = oAuth2GrantType + self.tokenUrl = tokenUrl + self.tokenUrlParametersMap = tokenUrlParametersMap + } + } + +} + +extension GlueClientTypes { + /// A structure containing the authentication configuration. + public struct AuthenticationConfiguration { + /// A structure containing the authentication configuration. + public var authenticationType: GlueClientTypes.AuthenticationType? + /// The properties for OAuth2 authentication. + public var oAuth2Properties: GlueClientTypes.OAuth2Properties? + /// The secret manager ARN to store credentials. + public var secretArn: Swift.String? + + public init( + authenticationType: GlueClientTypes.AuthenticationType? = nil, + oAuth2Properties: GlueClientTypes.OAuth2Properties? = nil, + secretArn: Swift.String? = nil + ) + { + self.authenticationType = authenticationType + self.oAuth2Properties = oAuth2Properties + self.secretArn = secretArn + } + } + +} + +extension GlueClientTypes { + /// The set of properties required for the the OAuth2 AUTHORIZATION_CODE grant type workflow. + public struct AuthorizationCodeProperties { + /// An authorization code to be used in the third leg of the AUTHORIZATION_CODE grant workflow. This is a single-use code which becomes invalid once exchanged for an access token, thus it is acceptable to have this value as a request parameter. + public var authorizationCode: Swift.String? + /// The redirect URI where the user gets redirected to by authorization server when issuing an authorization code. The URI is subsequently used when the authorization code is exchanged for an access token. + public var redirectUri: Swift.String? + + public init( + authorizationCode: Swift.String? = nil, + redirectUri: Swift.String? = nil + ) + { + self.authorizationCode = authorizationCode + self.redirectUri = redirectUri + } + } + +} + +extension GlueClientTypes { + /// A structure containing properties for OAuth2 in the CreateConnection request. + public struct OAuth2PropertiesInput { + /// The set of properties required for the the OAuth2 AUTHORIZATION_CODE grant type. + public var authorizationCodeProperties: GlueClientTypes.AuthorizationCodeProperties? + /// The client application type in the CreateConnection request. For example, AWS_MANAGED or USER_MANAGED. + public var oAuth2ClientApplication: GlueClientTypes.OAuth2ClientApplication? + /// The OAuth2 grant type in the CreateConnection request. For example, AUTHORIZATION_CODE, JWT_BEARER, or CLIENT_CREDENTIALS. + public var oAuth2GrantType: GlueClientTypes.OAuth2GrantType? + /// The URL of the provider's authentication server, to exchange an authorization code for an access token. + public var tokenUrl: Swift.String? + /// A map of parameters that are added to the token GET request. + public var tokenUrlParametersMap: [Swift.String: Swift.String]? + + public init( + authorizationCodeProperties: GlueClientTypes.AuthorizationCodeProperties? = nil, + oAuth2ClientApplication: GlueClientTypes.OAuth2ClientApplication? = nil, + oAuth2GrantType: GlueClientTypes.OAuth2GrantType? = nil, + tokenUrl: Swift.String? = nil, + tokenUrlParametersMap: [Swift.String: Swift.String]? = nil + ) + { + self.authorizationCodeProperties = authorizationCodeProperties + self.oAuth2ClientApplication = oAuth2ClientApplication + self.oAuth2GrantType = oAuth2GrantType + self.tokenUrl = tokenUrl + self.tokenUrlParametersMap = tokenUrlParametersMap + } + } + +} + +extension GlueClientTypes { + /// A structure containing the authentication configuration in the CreateConnection request. + public struct AuthenticationConfigurationInput { + /// A structure containing the authentication configuration in the CreateConnection request. + public var authenticationType: GlueClientTypes.AuthenticationType? + /// The properties for OAuth2 authentication in the CreateConnection request. + public var oAuth2Properties: GlueClientTypes.OAuth2PropertiesInput? + /// The secret manager ARN to store credentials in the CreateConnection request. + public var secretArn: Swift.String? + + public init( + authenticationType: GlueClientTypes.AuthenticationType? = nil, + oAuth2Properties: GlueClientTypes.OAuth2PropertiesInput? = nil, + secretArn: Swift.String? = nil + ) + { + self.authenticationType = authenticationType + self.oAuth2Properties = oAuth2Properties + self.secretArn = secretArn + } + } + +} + /// A specified entity does not exist public struct EntityNotFoundException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { @@ -7088,19 +7300,29 @@ extension GlueClientTypes { extension GlueClientTypes { public enum FederationSourceErrorCode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case accessdeniedexception + case entitynotfoundexception case internalserviceexception + case invalidcredentialsexception + case invalidinputexception case invalidresponseexception case operationnotsupportedexception case operationtimeoutexception + case partialfailureexception case throttlingexception case sdkUnknown(Swift.String) public static var allCases: [FederationSourceErrorCode] { return [ + .accessdeniedexception, + .entitynotfoundexception, .internalserviceexception, + .invalidcredentialsexception, + .invalidinputexception, .invalidresponseexception, .operationnotsupportedexception, .operationtimeoutexception, + .partialfailureexception, .throttlingexception ] } @@ -7112,10 +7334,15 @@ extension GlueClientTypes { public var rawValue: Swift.String { switch self { + case .accessdeniedexception: return "AccessDeniedException" + case .entitynotfoundexception: return "EntityNotFoundException" case .internalserviceexception: return "InternalServiceException" + case .invalidcredentialsexception: return "InvalidCredentialsException" + case .invalidinputexception: return "InvalidInputException" case .invalidresponseexception: return "InvalidResponseException" case .operationnotsupportedexception: return "OperationNotSupportedException" case .operationtimeoutexception: return "OperationTimeoutException" + case .partialfailureexception: return "PartialFailureException" case .throttlingexception: return "ThrottlingException" case let .sdkUnknown(s): return s } @@ -8148,11 +8375,13 @@ extension GlueClientTypes { public var predecessorRuns: [GlueClientTypes.Predecessor]? /// The ID of the previous run of this job. For example, the JobRunId specified in the StartJobRun action. public var previousRunId: Swift.String? + /// The name of an Glue usage profile associated with the job run. + public var profileName: Swift.String? /// The name of the SecurityConfiguration structure to be used with this job run. public var securityConfiguration: Swift.String? /// The date and time at which this job run was started. public var startedOn: Foundation.Date? - /// The JobRun timeout in minutes. This is the maximum time that a job run can consume resources before it is terminated and enters TIMEOUT status. This value overrides the timeout value set in the parent job. The maximum value for timeout for batch jobs is 7 days or 10080 minutes. The default is 2880 minutes (48 hours) for batch jobs. Any existing Glue jobs that have a greater timeout value are defaulted to 7 days. For instance you have specified a timeout of 20 days for a batch job, it will be stopped on the 7th day. Streaming jobs must have timeout values less than 7 days or 10080 minutes. When the value is left blank, the job will be restarted after 7 days based if you have not setup a maintenance window. If you have setup maintenance window, it will be restarted during the maintenance window after 7 days. + /// The JobRun timeout in minutes. This is the maximum time that a job run can consume resources before it is terminated and enters TIMEOUT status. This value overrides the timeout value set in the parent job. Streaming jobs must have timeout values less than 7 days or 10080 minutes. When the value is left blank, the job will be restarted after 7 days based if you have not setup a maintenance window. If you have setup maintenance window, it will be restarted during the maintenance window after 7 days. public var timeout: Swift.Int? /// The name of the trigger that started this job run. public var triggerName: Swift.String? @@ -8193,6 +8422,7 @@ extension GlueClientTypes { numberOfWorkers: Swift.Int? = nil, predecessorRuns: [GlueClientTypes.Predecessor]? = nil, previousRunId: Swift.String? = nil, + profileName: Swift.String? = nil, securityConfiguration: Swift.String? = nil, startedOn: Foundation.Date? = nil, timeout: Swift.Int? = nil, @@ -8221,6 +8451,7 @@ extension GlueClientTypes { self.numberOfWorkers = numberOfWorkers self.predecessorRuns = predecessorRuns self.previousRunId = previousRunId + self.profileName = profileName self.securityConfiguration = securityConfiguration self.startedOn = startedOn self.timeout = timeout @@ -9273,6 +9504,7 @@ extension GlueClientTypes { case kafkaSslEnabled case password case port + case roleArn case secretId case skipCustomJdbcCertValidation case userName @@ -9319,6 +9551,7 @@ extension GlueClientTypes { .kafkaSslEnabled, .password, .port, + .roleArn, .secretId, .skipCustomJdbcCertValidation, .userName @@ -9371,6 +9604,7 @@ extension GlueClientTypes { case .kafkaSslEnabled: return "KAFKA_SSL_ENABLED" case .password: return "PASSWORD" case .port: return "PORT" + case .roleArn: return "ROLE_ARN" case .secretId: return "SECRET_ID" case .skipCustomJdbcCertValidation: return "SKIP_CUSTOM_JDBC_CERT_VALIDATION" case .userName: return "USERNAME" @@ -9389,6 +9623,7 @@ extension GlueClientTypes { case marketplace case mongodb case network + case salesforce case sftp case sdkUnknown(Swift.String) @@ -9400,6 +9635,7 @@ extension GlueClientTypes { .marketplace, .mongodb, .network, + .salesforce, .sftp ] } @@ -9417,6 +9653,7 @@ extension GlueClientTypes { case .marketplace: return "MARKETPLACE" case .mongodb: return "MONGODB" case .network: return "NETWORK" + case .salesforce: return "SALESFORCE" case .sftp: return "SFTP" case let .sdkUnknown(s): return s } @@ -9425,9 +9662,9 @@ extension GlueClientTypes { } extension GlueClientTypes { - /// Specifies the physical requirements for a connection. + /// The OAuth client app in GetConnection response. public struct PhysicalConnectionRequirements { - /// The connection's Availability Zone. This field is redundant because the specified subnet implies the Availability Zone to be used. Currently the field must be populated, but it will be deprecated in the future. + /// The connection's Availability Zone. public var availabilityZone: Swift.String? /// The security group ID list used by the connection. public var securityGroupIdList: [Swift.String]? @@ -9451,6 +9688,8 @@ extension GlueClientTypes { extension GlueClientTypes { /// A structure that is used to specify a connection to create or update. public struct ConnectionInput { + /// The authentication properties of the connection. Used for a Salesforce connection. + public var authenticationConfiguration: GlueClientTypes.AuthenticationConfigurationInput? /// These key-value pairs define parameters for the connection. /// This member is required. public var connectionProperties: [Swift.String: Swift.String]? @@ -9493,6 +9732,13 @@ extension GlueClientTypes { /// /// /// + /// * SALESFORCE - Designates a connection to Salesforce using OAuth authencation. + /// + /// * Requires the AuthenticationConfiguration member to be configured. + /// + /// + /// + /// /// * NETWORK - Designates a network connection to a data source within an Amazon Virtual Private Cloud environment (Amazon VPC). NETWORK Connections do not require ConnectionParameters. Instead, provide a PhysicalConnectionRequirements. /// /// * MARKETPLACE - Uses configuration settings contained in a connector purchased from Amazon Web Services Marketplace to read from and write to data stores that are not natively supported by Glue. MARKETPLACE Connections use the following ConnectionParameters. @@ -9514,27 +9760,33 @@ extension GlueClientTypes { public var description: Swift.String? /// A list of criteria that can be used in selecting this connection. public var matchCriteria: [Swift.String]? - /// The name of the connection. Connection will not function as expected without a name. + /// The name of the connection. /// This member is required. public var name: Swift.String? - /// A map of physical connection requirements, such as virtual private cloud (VPC) and SecurityGroup, that are needed to successfully make this connection. + /// The physical connection requirements, such as virtual private cloud (VPC) and SecurityGroup, that are needed to successfully make this connection. public var physicalConnectionRequirements: GlueClientTypes.PhysicalConnectionRequirements? + /// A flag to validate the credentials during create connection. Used for a Salesforce connection. Default is true. + public var validateCredentials: Swift.Bool public init( + authenticationConfiguration: GlueClientTypes.AuthenticationConfigurationInput? = nil, connectionProperties: [Swift.String: Swift.String]? = nil, connectionType: GlueClientTypes.ConnectionType? = nil, description: Swift.String? = nil, matchCriteria: [Swift.String]? = nil, name: Swift.String? = nil, - physicalConnectionRequirements: GlueClientTypes.PhysicalConnectionRequirements? = nil + physicalConnectionRequirements: GlueClientTypes.PhysicalConnectionRequirements? = nil, + validateCredentials: Swift.Bool = false ) { + self.authenticationConfiguration = authenticationConfiguration self.connectionProperties = connectionProperties self.connectionType = connectionType self.description = description self.matchCriteria = matchCriteria self.name = name self.physicalConnectionRequirements = physicalConnectionRequirements + self.validateCredentials = validateCredentials } } @@ -9561,9 +9813,48 @@ public struct CreateConnectionInput { } } +extension GlueClientTypes { + + public enum ConnectionStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case failed + case inProgress + case ready + case sdkUnknown(Swift.String) + + public static var allCases: [ConnectionStatus] { + return [ + .failed, + .inProgress, + .ready + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .failed: return "FAILED" + case .inProgress: return "IN_PROGRESS" + case .ready: return "READY" + case let .sdkUnknown(s): return s + } + } + } +} + public struct CreateConnectionOutput { + /// The status of the connection creation request. The request can take some time for certain authentication types, for example when creating an OAuth connection with token exchange over VPC. + public var createConnectionStatus: GlueClientTypes.ConnectionStatus? - public init() { } + public init( + createConnectionStatus: GlueClientTypes.ConnectionStatus? = nil + ) + { + self.createConnectionStatus = createConnectionStatus + } } public struct CreateCrawlerInput { @@ -11403,6 +11694,8 @@ extension GlueClientTypes { public var maxCapacity: Swift.Double? /// The number of workers of a defined WorkerType to use for the session. public var numberOfWorkers: Swift.Int? + /// The name of an Glue usage profile associated with the session. + public var profileName: Swift.String? /// The code execution progress of the session. public var progress: Swift.Double /// The name or Amazon Resource Name (ARN) of the IAM role associated with the Session. @@ -11429,6 +11722,7 @@ extension GlueClientTypes { idleTimeout: Swift.Int? = nil, maxCapacity: Swift.Double? = nil, numberOfWorkers: Swift.Int? = nil, + profileName: Swift.String? = nil, progress: Swift.Double = 0.0, role: Swift.String? = nil, securityConfiguration: Swift.String? = nil, @@ -11450,6 +11744,7 @@ extension GlueClientTypes { self.idleTimeout = idleTimeout self.maxCapacity = maxCapacity self.numberOfWorkers = numberOfWorkers + self.profileName = profileName self.progress = progress self.role = role self.securityConfiguration = securityConfiguration @@ -11563,6 +11858,98 @@ extension GlueClientTypes { } +extension GlueClientTypes { + + public enum ViewDialect: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case athena + case redshift + case spark + case sdkUnknown(Swift.String) + + public static var allCases: [ViewDialect] { + return [ + .athena, + .redshift, + .spark + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .athena: return "ATHENA" + case .redshift: return "REDSHIFT" + case .spark: return "SPARK" + case let .sdkUnknown(s): return s + } + } + } +} + +extension GlueClientTypes { + /// A structure containing details of a representation to update or create a Lake Formation view. + public struct ViewRepresentationInput { + /// A parameter that specifies the engine type of a specific representation. + public var dialect: GlueClientTypes.ViewDialect? + /// A parameter that specifies the version of the engine of a specific representation. + public var dialectVersion: Swift.String? + /// The name of the connection to be used to validate the specific representation of the view. + public var validationConnection: Swift.String? + /// A string that represents the SQL query that describes the view with expanded resource ARNs + public var viewExpandedText: Swift.String? + /// A string that represents the original SQL query that describes the view. + public var viewOriginalText: Swift.String? + + public init( + dialect: GlueClientTypes.ViewDialect? = nil, + dialectVersion: Swift.String? = nil, + validationConnection: Swift.String? = nil, + viewExpandedText: Swift.String? = nil, + viewOriginalText: Swift.String? = nil + ) + { + self.dialect = dialect + self.dialectVersion = dialectVersion + self.validationConnection = validationConnection + self.viewExpandedText = viewExpandedText + self.viewOriginalText = viewOriginalText + } + } + +} + +extension GlueClientTypes { + /// A structure containing details for creating or updating an Glue view. + public struct ViewDefinitionInput { + /// The definer of a view in SQL. + public var definer: Swift.String? + /// You can set this flag as true to instruct the engine not to push user-provided operations into the logical plan of the view during query planning. However, setting this flag does not guarantee that the engine will comply. Refer to the engine's documentation to understand the guarantees provided, if any. + public var isProtected: Swift.Bool? + /// A list of structures that contains the dialect of the view, and the query that defines the view. + public var representations: [GlueClientTypes.ViewRepresentationInput]? + /// A list of base table ARNs that make up the view. + public var subObjects: [Swift.String]? + + public init( + definer: Swift.String? = nil, + isProtected: Swift.Bool? = nil, + representations: [GlueClientTypes.ViewRepresentationInput]? = nil, + subObjects: [Swift.String]? = nil + ) + { + self.definer = definer + self.isProtected = isProtected + self.representations = representations + self.subObjects = subObjects + } + } + +} + extension GlueClientTypes { /// A structure used to define a table. public struct TableInput { @@ -11589,6 +11976,8 @@ extension GlueClientTypes { public var tableType: Swift.String? /// A TableIdentifier structure that describes a target table for resource linking. public var targetTable: GlueClientTypes.TableIdentifier? + /// A structure that contains all the information that defines the view, including the dialect or dialects for the view, and the query. + public var viewDefinition: GlueClientTypes.ViewDefinitionInput? /// Included for Apache Hive compatibility. Not used in the normal course of Glue operations. public var viewExpandedText: Swift.String? /// Included for Apache Hive compatibility. Not used in the normal course of Glue operations. If the table is a VIRTUAL_VIEW, certain Athena configuration encoded in base64. @@ -11606,6 +11995,7 @@ extension GlueClientTypes { storageDescriptor: GlueClientTypes.StorageDescriptor? = nil, tableType: Swift.String? = nil, targetTable: GlueClientTypes.TableIdentifier? = nil, + viewDefinition: GlueClientTypes.ViewDefinitionInput? = nil, viewExpandedText: Swift.String? = nil, viewOriginalText: Swift.String? = nil ) @@ -11621,6 +12011,7 @@ extension GlueClientTypes { self.storageDescriptor = storageDescriptor self.tableType = tableType self.targetTable = targetTable + self.viewDefinition = viewDefinition self.viewExpandedText = viewExpandedText self.viewOriginalText = viewOriginalText } @@ -11768,6 +12159,117 @@ public struct CreateTriggerOutput { } } +/// The operation is not available in the region. +public struct OperationNotSupportedException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// A message describing the problem. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "OperationNotSupportedException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +extension GlueClientTypes { + /// Specifies the values that an admin sets for each job or session parameter configured in a Glue usage profile. + public struct ConfigurationObject { + /// A list of allowed values for the parameter. + public var allowedValues: [Swift.String]? + /// A default value for the parameter. + public var defaultValue: Swift.String? + /// A maximum allowed value for the parameter. + public var maxValue: Swift.String? + /// A minimum allowed value for the parameter. + public var minValue: Swift.String? + + public init( + allowedValues: [Swift.String]? = nil, + defaultValue: Swift.String? = nil, + maxValue: Swift.String? = nil, + minValue: Swift.String? = nil + ) + { + self.allowedValues = allowedValues + self.defaultValue = defaultValue + self.maxValue = maxValue + self.minValue = minValue + } + } + +} + +extension GlueClientTypes { + /// Specifies the job and session values that an admin configures in an Glue usage profile. + public struct ProfileConfiguration { + /// A key-value map of configuration parameters for Glue jobs. + public var jobConfiguration: [Swift.String: GlueClientTypes.ConfigurationObject]? + /// A key-value map of configuration parameters for Glue sessions. + public var sessionConfiguration: [Swift.String: GlueClientTypes.ConfigurationObject]? + + public init( + jobConfiguration: [Swift.String: GlueClientTypes.ConfigurationObject]? = nil, + sessionConfiguration: [Swift.String: GlueClientTypes.ConfigurationObject]? = nil + ) + { + self.jobConfiguration = jobConfiguration + self.sessionConfiguration = sessionConfiguration + } + } + +} + +public struct CreateUsageProfileInput { + /// A ProfileConfiguration object specifying the job and session values for the profile. + /// This member is required. + public var configuration: GlueClientTypes.ProfileConfiguration? + /// A description of the usage profile. + public var description: Swift.String? + /// The name of the usage profile. + /// This member is required. + public var name: Swift.String? + /// A list of tags applied to the usage profile. + public var tags: [Swift.String: Swift.String]? + + public init( + configuration: GlueClientTypes.ProfileConfiguration? = nil, + description: Swift.String? = nil, + name: Swift.String? = nil, + tags: [Swift.String: Swift.String]? = nil + ) + { + self.configuration = configuration + self.description = description + self.name = name + self.tags = tags + } +} + +public struct CreateUsageProfileOutput { + /// The name of the usage profile that was created. + public var name: Swift.String? + + public init( + name: Swift.String? = nil + ) + { + self.name = name + } +} + extension GlueClientTypes { public enum PrincipalType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { @@ -12759,6 +13261,24 @@ public struct DeleteTriggerOutput { } } +public struct DeleteUsageProfileInput { + /// The name of the usage profile to delete. + /// This member is required. + public var name: Swift.String? + + public init( + name: Swift.String? = nil + ) + { + self.name = name + } +} + +public struct DeleteUsageProfileOutput { + + public init() { } +} + public struct DeleteUserDefinedFunctionInput { /// The ID of the Data Catalog where the function to be deleted is located. If none is supplied, the Amazon Web Services account ID is used by default. public var catalogId: Swift.String? @@ -13992,6 +14512,8 @@ public struct GetConnectionInput { extension GlueClientTypes { /// Defines a connection to a data source. public struct Connection { + /// The authentication properties of the connection. + public var authenticationConfiguration: GlueClientTypes.AuthenticationConfiguration? /// These key-value pairs define parameters for the connection: /// /// * HOST - The host URI: either the fully qualified domain name (FQDN) or the IPv4 address of the database host. @@ -14080,42 +14602,56 @@ extension GlueClientTypes { public var connectionProperties: [Swift.String: Swift.String]? /// The type of the connection. Currently, SFTP is not supported. public var connectionType: GlueClientTypes.ConnectionType? - /// The time that this connection definition was created. + /// The timestamp of the time that this connection definition was created. public var creationTime: Foundation.Date? /// The description of the connection. public var description: Swift.String? + /// A timestamp of the time this connection was last validated. + public var lastConnectionValidationTime: Foundation.Date? /// The user, group, or role that last updated this connection definition. public var lastUpdatedBy: Swift.String? - /// The last time that this connection definition was updated. + /// The timestamp of the last time the connection definition was updated. public var lastUpdatedTime: Foundation.Date? /// A list of criteria that can be used in selecting this connection. public var matchCriteria: [Swift.String]? /// The name of the connection definition. public var name: Swift.String? - /// A map of physical connection requirements, such as virtual private cloud (VPC) and SecurityGroup, that are needed to make this connection successfully. + /// The physical connection requirements, such as virtual private cloud (VPC) and SecurityGroup, that are needed to make this connection successfully. public var physicalConnectionRequirements: GlueClientTypes.PhysicalConnectionRequirements? + /// The status of the connection. Can be one of: READY, IN_PROGRESS, or FAILED. + public var status: GlueClientTypes.ConnectionStatus? + /// The reason for the connection status. + public var statusReason: Swift.String? public init( + authenticationConfiguration: GlueClientTypes.AuthenticationConfiguration? = nil, connectionProperties: [Swift.String: Swift.String]? = nil, connectionType: GlueClientTypes.ConnectionType? = nil, creationTime: Foundation.Date? = nil, description: Swift.String? = nil, + lastConnectionValidationTime: Foundation.Date? = nil, lastUpdatedBy: Swift.String? = nil, lastUpdatedTime: Foundation.Date? = nil, matchCriteria: [Swift.String]? = nil, name: Swift.String? = nil, - physicalConnectionRequirements: GlueClientTypes.PhysicalConnectionRequirements? = nil + physicalConnectionRequirements: GlueClientTypes.PhysicalConnectionRequirements? = nil, + status: GlueClientTypes.ConnectionStatus? = nil, + statusReason: Swift.String? = nil ) { + self.authenticationConfiguration = authenticationConfiguration self.connectionProperties = connectionProperties self.connectionType = connectionType self.creationTime = creationTime self.description = description + self.lastConnectionValidationTime = lastConnectionValidationTime self.lastUpdatedBy = lastUpdatedBy self.lastUpdatedTime = lastUpdatedTime self.matchCriteria = matchCriteria self.name = name self.physicalConnectionRequirements = physicalConnectionRequirements + self.status = status + self.statusReason = statusReason } } @@ -14882,20 +15418,53 @@ public struct GetDataQualityRulesetEvaluationRunInput { } } +extension GlueClientTypes { + + public enum DQCompositeRuleEvaluationMethod: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case column + case row + case sdkUnknown(Swift.String) + + public static var allCases: [DQCompositeRuleEvaluationMethod] { + return [ + .column, + .row + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .column: return "COLUMN" + case .row: return "ROW" + case let .sdkUnknown(s): return s + } + } + } +} + extension GlueClientTypes { /// Additional run options you can specify for an evaluation run. public struct DataQualityEvaluationRunAdditionalRunOptions { /// Whether or not to enable CloudWatch metrics. public var cloudWatchMetricsEnabled: Swift.Bool? + /// Set the evaluation method for composite rules in the ruleset to ROW/COLUMN + public var compositeRuleEvaluationMethod: GlueClientTypes.DQCompositeRuleEvaluationMethod? /// Prefix for Amazon S3 to store results. public var resultsS3Prefix: Swift.String? public init( cloudWatchMetricsEnabled: Swift.Bool? = nil, + compositeRuleEvaluationMethod: GlueClientTypes.DQCompositeRuleEvaluationMethod? = nil, resultsS3Prefix: Swift.String? = nil ) { self.cloudWatchMetricsEnabled = cloudWatchMetricsEnabled + self.compositeRuleEvaluationMethod = compositeRuleEvaluationMethod self.resultsS3Prefix = resultsS3Prefix } } @@ -14923,7 +15492,7 @@ public struct GetDataQualityRulesetEvaluationRunOutput { public var resultIds: [Swift.String]? /// An IAM role supplied to encrypt the results of the run. public var role: Swift.String? - /// A list of ruleset names for the run. + /// A list of ruleset names for the run. Currently, this parameter takes only one Ruleset name. public var rulesetNames: [Swift.String]? /// The unique run identifier associated with this run. public var runId: Swift.String? @@ -17416,38 +17985,6 @@ extension GlueClientTypes { } -extension GlueClientTypes { - - public enum ViewDialect: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { - case athena - case redshift - case spark - case sdkUnknown(Swift.String) - - public static var allCases: [ViewDialect] { - return [ - .athena, - .redshift, - .spark - ] - } - - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) - } - - public var rawValue: Swift.String { - switch self { - case .athena: return "ATHENA" - case .redshift: return "REDSHIFT" - case .spark: return "SPARK" - case let .sdkUnknown(s): return s - } - } - } -} - extension GlueClientTypes { /// A structure that contains the dialect of the view, and the query that defines the view. public struct ViewRepresentation { @@ -17457,9 +17994,11 @@ extension GlueClientTypes { public var dialectVersion: Swift.String? /// Dialects marked as stale are no longer valid and must be updated before they can be queried in their respective query engines. public var isStale: Swift.Bool? + /// The name of the connection to be used to validate the specific representation of the view. + public var validationConnection: Swift.String? /// The expanded SQL for the view. This SQL is used by engines while processing a query on a view. Engines may perform operations during view creation to transform ViewOriginalText to ViewExpandedText. For example: /// - /// * Fully qualify identifiers: SELECT * from table1 → SELECT * from db1.table1 + /// * Fully qualified identifiers: SELECT * from table1 -> SELECT * from db1.table1 public var viewExpandedText: Swift.String? /// The SELECT query provided by the customer during CREATE VIEW DDL. This SQL is not used during a query on a view (ViewExpandedText is used instead). ViewOriginalText is used for cases like SHOW CREATE VIEW where users want to see the original DDL command that created the view. public var viewOriginalText: Swift.String? @@ -17468,6 +18007,7 @@ extension GlueClientTypes { dialect: GlueClientTypes.ViewDialect? = nil, dialectVersion: Swift.String? = nil, isStale: Swift.Bool? = nil, + validationConnection: Swift.String? = nil, viewExpandedText: Swift.String? = nil, viewOriginalText: Swift.String? = nil ) @@ -17475,6 +18015,7 @@ extension GlueClientTypes { self.dialect = dialect self.dialectVersion = dialectVersion self.isStale = isStale + self.validationConnection = validationConnection self.viewExpandedText = viewExpandedText self.viewOriginalText = viewOriginalText } @@ -18351,6 +18892,47 @@ public struct GetUnfilteredTableMetadataOutput { } } +public struct GetUsageProfileInput { + /// The name of the usage profile to retrieve. + /// This member is required. + public var name: Swift.String? + + public init( + name: Swift.String? = nil + ) + { + self.name = name + } +} + +public struct GetUsageProfileOutput { + /// A ProfileConfiguration object specifying the job and session values for the profile. + public var configuration: GlueClientTypes.ProfileConfiguration? + /// The date and time when the usage profile was created. + public var createdOn: Foundation.Date? + /// A description of the usage profile. + public var description: Swift.String? + /// The date and time when the usage profile was last modified. + public var lastModifiedOn: Foundation.Date? + /// The name of the usage profile. + public var name: Swift.String? + + public init( + configuration: GlueClientTypes.ProfileConfiguration? = nil, + createdOn: Foundation.Date? = nil, + description: Swift.String? = nil, + lastModifiedOn: Foundation.Date? = nil, + name: Swift.String? = nil + ) + { + self.configuration = configuration + self.createdOn = createdOn + self.description = description + self.lastModifiedOn = lastModifiedOn + self.name = name + } +} + public struct GetUserDefinedFunctionInput { /// The ID of the Data Catalog where the function to be retrieved is located. If none is provided, the Amazon Web Services account ID is used by default. public var catalogId: Swift.String? @@ -19934,6 +20516,66 @@ public struct ListTriggersOutput { } } +public struct ListUsageProfilesInput { + /// The maximum number of usage profiles to return in a single response. + public var maxResults: Swift.Int? + /// A continuation token, included if this is a continuation call. + public var nextToken: Swift.String? + + public init( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +extension GlueClientTypes { + /// Describes an Glue usage profile. + public struct UsageProfileDefinition { + /// The date and time when the usage profile was created. + public var createdOn: Foundation.Date? + /// A description of the usage profile. + public var description: Swift.String? + /// The date and time when the usage profile was last modified. + public var lastModifiedOn: Foundation.Date? + /// The name of the usage profile. + public var name: Swift.String? + + public init( + createdOn: Foundation.Date? = nil, + description: Swift.String? = nil, + lastModifiedOn: Foundation.Date? = nil, + name: Swift.String? = nil + ) + { + self.createdOn = createdOn + self.description = description + self.lastModifiedOn = lastModifiedOn + self.name = name + } + } + +} + +public struct ListUsageProfilesOutput { + /// A continuation token, present if the current list segment is not the last. + public var nextToken: Swift.String? + /// A list of usage profile (UsageProfileDefinition) objects. + public var profiles: [GlueClientTypes.UsageProfileDefinition]? + + public init( + nextToken: Swift.String? = nil, + profiles: [GlueClientTypes.UsageProfileDefinition]? = nil + ) + { + self.nextToken = nextToken + self.profiles = profiles + } +} + public struct ListWorkflowsInput { /// The maximum size of a list to return. public var maxResults: Swift.Int? @@ -21143,7 +21785,7 @@ public struct StartJobRunInput { public var numberOfWorkers: Swift.Int? /// The name of the SecurityConfiguration structure to be used with this job run. public var securityConfiguration: Swift.String? - /// The JobRun timeout in minutes. This is the maximum time that a job run can consume resources before it is terminated and enters TIMEOUT status. This value overrides the timeout value set in the parent job. Streaming jobs do not have a timeout. The default for non-streaming jobs is 2,880 minutes (48 hours). + /// The JobRun timeout in minutes. This is the maximum time that a job run can consume resources before it is terminated and enters TIMEOUT status. This value overrides the timeout value set in the parent job. Streaming jobs must have timeout values less than 7 days or 10080 minutes. When the value is left blank, the job will be restarted after 7 days based if you have not setup a maintenance window. If you have setup maintenance window, it will be restarted during the maintenance window after 7 days. public var timeout: Swift.Int? /// The type of predefined worker that is allocated when a job runs. Accepts a value of G.1X, G.2X, G.4X, G.8X or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs. /// @@ -22533,12 +23175,49 @@ public struct UpdateSourceControlFromJobOutput { } } +extension GlueClientTypes { + + public enum ViewUpdateAction: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case add + case addOrReplace + case drop + case replace + case sdkUnknown(Swift.String) + + public static var allCases: [ViewUpdateAction] { + return [ + .add, + .addOrReplace, + .drop, + .replace + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .add: return "ADD" + case .addOrReplace: return "ADD_OR_REPLACE" + case .drop: return "DROP" + case .replace: return "REPLACE" + case let .sdkUnknown(s): return s + } + } + } +} + public struct UpdateTableInput { /// The ID of the Data Catalog where the table resides. If none is provided, the Amazon Web Services account ID is used by default. public var catalogId: Swift.String? /// The name of the catalog database in which the table resides. For Hive compatibility, this name is entirely lowercase. /// This member is required. public var databaseName: Swift.String? + /// A flag that can be set to true to ignore matching storage descriptor and subobject matching requirements. + public var force: Swift.Bool? /// By default, UpdateTable always creates an archived version of the table before updating it. However, if skipArchive is set to true, UpdateTable does not create the archived version. public var skipArchive: Swift.Bool? /// An updated TableInput object to define the metadata table in the catalog. @@ -22548,22 +23227,28 @@ public struct UpdateTableInput { public var transactionId: Swift.String? /// The version ID at which to update the table contents. public var versionId: Swift.String? + /// The operation to be performed when updating the view. + public var viewUpdateAction: GlueClientTypes.ViewUpdateAction? public init( catalogId: Swift.String? = nil, databaseName: Swift.String? = nil, + force: Swift.Bool? = nil, skipArchive: Swift.Bool? = nil, tableInput: GlueClientTypes.TableInput? = nil, transactionId: Swift.String? = nil, - versionId: Swift.String? = nil + versionId: Swift.String? = nil, + viewUpdateAction: GlueClientTypes.ViewUpdateAction? = nil ) { self.catalogId = catalogId self.databaseName = databaseName + self.force = force self.skipArchive = skipArchive self.tableInput = tableInput self.transactionId = transactionId self.versionId = versionId + self.viewUpdateAction = viewUpdateAction } } @@ -22676,6 +23361,40 @@ public struct UpdateTriggerOutput { } } +public struct UpdateUsageProfileInput { + /// A ProfileConfiguration object specifying the job and session values for the profile. + /// This member is required. + public var configuration: GlueClientTypes.ProfileConfiguration? + /// A description of the usage profile. + public var description: Swift.String? + /// The name of the usage profile. + /// This member is required. + public var name: Swift.String? + + public init( + configuration: GlueClientTypes.ProfileConfiguration? = nil, + description: Swift.String? = nil, + name: Swift.String? = nil + ) + { + self.configuration = configuration + self.description = description + self.name = name + } +} + +public struct UpdateUsageProfileOutput { + /// The name of the usage profile that was updated. + public var name: Swift.String? + + public init( + name: Swift.String? = nil + ) + { + self.name = name + } +} + public struct UpdateUserDefinedFunctionInput { /// The ID of the Data Catalog where the function to be updated is located. If none is provided, the Amazon Web Services account ID is used by default. public var catalogId: Swift.String? @@ -23161,13 +23880,15 @@ extension GlueClientTypes { public var notificationProperty: GlueClientTypes.NotificationProperty? /// The number of workers of a defined workerType that are allocated when a job runs. public var numberOfWorkers: Swift.Int? + /// The name of an Glue usage profile associated with the job. + public var profileName: Swift.String? /// The name or Amazon Resource Name (ARN) of the IAM role associated with this job. public var role: Swift.String? /// The name of the SecurityConfiguration structure to be used with this job. public var securityConfiguration: Swift.String? /// The details for a source control configuration for a job, allowing synchronization of job artifacts to or from a remote repository. public var sourceControlDetails: GlueClientTypes.SourceControlDetails? - /// The job timeout in minutes. This is the maximum time that a job run can consume resources before it is terminated and enters TIMEOUT status. The default is 2,880 minutes (48 hours). + /// The job timeout in minutes. This is the maximum time that a job run can consume resources before it is terminated and enters TIMEOUT status. The default is 2,880 minutes (48 hours) for batch jobs. Streaming jobs must have timeout values less than 7 days or 10080 minutes. When the value is left blank, the job will be restarted after 7 days based if you have not setup a maintenance window. If you have setup maintenance window, it will be restarted during the maintenance window after 7 days. public var timeout: Swift.Int? /// The type of predefined worker that is allocated when a job runs. Accepts a value of G.1X, G.2X, G.4X, G.8X or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs. /// @@ -23205,6 +23926,7 @@ extension GlueClientTypes { nonOverridableArguments: [Swift.String: Swift.String]? = nil, notificationProperty: GlueClientTypes.NotificationProperty? = nil, numberOfWorkers: Swift.Int? = nil, + profileName: Swift.String? = nil, role: Swift.String? = nil, securityConfiguration: Swift.String? = nil, sourceControlDetails: GlueClientTypes.SourceControlDetails? = nil, @@ -23232,6 +23954,7 @@ extension GlueClientTypes { self.nonOverridableArguments = nonOverridableArguments self.notificationProperty = notificationProperty self.numberOfWorkers = numberOfWorkers + self.profileName = profileName self.role = role self.securityConfiguration = securityConfiguration self.sourceControlDetails = sourceControlDetails @@ -23244,7 +23967,7 @@ extension GlueClientTypes { extension GlueClientTypes.Job: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "Job(allocatedCapacity: \(Swift.String(describing: allocatedCapacity)), command: \(Swift.String(describing: command)), connections: \(Swift.String(describing: connections)), createdOn: \(Swift.String(describing: createdOn)), defaultArguments: \(Swift.String(describing: defaultArguments)), description: \(Swift.String(describing: description)), executionClass: \(Swift.String(describing: executionClass)), executionProperty: \(Swift.String(describing: executionProperty)), glueVersion: \(Swift.String(describing: glueVersion)), jobMode: \(Swift.String(describing: jobMode)), lastModifiedOn: \(Swift.String(describing: lastModifiedOn)), logUri: \(Swift.String(describing: logUri)), maintenanceWindow: \(Swift.String(describing: maintenanceWindow)), maxCapacity: \(Swift.String(describing: maxCapacity)), maxRetries: \(Swift.String(describing: maxRetries)), name: \(Swift.String(describing: name)), nonOverridableArguments: \(Swift.String(describing: nonOverridableArguments)), notificationProperty: \(Swift.String(describing: notificationProperty)), numberOfWorkers: \(Swift.String(describing: numberOfWorkers)), role: \(Swift.String(describing: role)), securityConfiguration: \(Swift.String(describing: securityConfiguration)), sourceControlDetails: \(Swift.String(describing: sourceControlDetails)), timeout: \(Swift.String(describing: timeout)), workerType: \(Swift.String(describing: workerType)), codeGenConfigurationNodes: \"CONTENT_REDACTED\")"} + "Job(allocatedCapacity: \(Swift.String(describing: allocatedCapacity)), command: \(Swift.String(describing: command)), connections: \(Swift.String(describing: connections)), createdOn: \(Swift.String(describing: createdOn)), defaultArguments: \(Swift.String(describing: defaultArguments)), description: \(Swift.String(describing: description)), executionClass: \(Swift.String(describing: executionClass)), executionProperty: \(Swift.String(describing: executionProperty)), glueVersion: \(Swift.String(describing: glueVersion)), jobMode: \(Swift.String(describing: jobMode)), lastModifiedOn: \(Swift.String(describing: lastModifiedOn)), logUri: \(Swift.String(describing: logUri)), maintenanceWindow: \(Swift.String(describing: maintenanceWindow)), maxCapacity: \(Swift.String(describing: maxCapacity)), maxRetries: \(Swift.String(describing: maxRetries)), name: \(Swift.String(describing: name)), nonOverridableArguments: \(Swift.String(describing: nonOverridableArguments)), notificationProperty: \(Swift.String(describing: notificationProperty)), numberOfWorkers: \(Swift.String(describing: numberOfWorkers)), profileName: \(Swift.String(describing: profileName)), role: \(Swift.String(describing: role)), securityConfiguration: \(Swift.String(describing: securityConfiguration)), sourceControlDetails: \(Swift.String(describing: sourceControlDetails)), timeout: \(Swift.String(describing: timeout)), workerType: \(Swift.String(describing: workerType)), codeGenConfigurationNodes: \"CONTENT_REDACTED\")"} } extension GlueClientTypes { @@ -23304,7 +24027,7 @@ extension GlueClientTypes { public var securityConfiguration: Swift.String? /// The details for a source control configuration for a job, allowing synchronization of job artifacts to or from a remote repository. public var sourceControlDetails: GlueClientTypes.SourceControlDetails? - /// The job timeout in minutes. This is the maximum time that a job run can consume resources before it is terminated and enters TIMEOUT status. The default is 2,880 minutes (48 hours). + /// The job timeout in minutes. This is the maximum time that a job run can consume resources before it is terminated and enters TIMEOUT status. The default is 2,880 minutes (48 hours) for batch jobs. Streaming jobs must have timeout values less than 7 days or 10080 minutes. When the value is left blank, the job will be restarted after 7 days based if you have not setup a maintenance window. If you have setup maintenance window, it will be restarted during the maintenance window after 7 days. public var timeout: Swift.Int? /// The type of predefined worker that is allocated when a job runs. Accepts a value of G.1X, G.2X, G.4X, G.8X or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs. /// @@ -23440,7 +24163,7 @@ public struct CreateJobInput { public var sourceControlDetails: GlueClientTypes.SourceControlDetails? /// The tags to use with this job. You may use tags to limit access to the job. For more information about tags in Glue, see [Amazon Web Services Tags in Glue](https://docs.aws.amazon.com/glue/latest/dg/monitor-tags.html) in the developer guide. public var tags: [Swift.String: Swift.String]? - /// The job timeout in minutes. This is the maximum time that a job run can consume resources before it is terminated and enters TIMEOUT status. The default is 2,880 minutes (48 hours). + /// The job timeout in minutes. This is the maximum time that a job run can consume resources before it is terminated and enters TIMEOUT status. The default is 2,880 minutes (48 hours) for batch jobs. Streaming jobs must have timeout values less than 7 days or 10080 minutes. When the value is left blank, the job will be restarted after 7 days based if you have not setup a maintenance window. If you have setup maintenance window, it will be restarted during the maintenance window after 7 days. public var timeout: Swift.Int? /// The type of predefined worker that is allocated when a job runs. Accepts a value of G.1X, G.2X, G.4X, G.8X or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs. /// @@ -23872,6 +24595,13 @@ extension CreateTriggerInput { } } +extension CreateUsageProfileInput { + + static func urlPathProvider(_ value: CreateUsageProfileInput) -> Swift.String? { + return "/" + } +} + extension CreateUserDefinedFunctionInput { static func urlPathProvider(_ value: CreateUserDefinedFunctionInput) -> Swift.String? { @@ -24054,6 +24784,13 @@ extension DeleteTriggerInput { } } +extension DeleteUsageProfileInput { + + static func urlPathProvider(_ value: DeleteUsageProfileInput) -> Swift.String? { + return "/" + } +} + extension DeleteUserDefinedFunctionInput { static func urlPathProvider(_ value: DeleteUserDefinedFunctionInput) -> Swift.String? { @@ -24502,6 +25239,13 @@ extension GetUnfilteredTableMetadataInput { } } +extension GetUsageProfileInput { + + static func urlPathProvider(_ value: GetUsageProfileInput) -> Swift.String? { + return "/" + } +} + extension GetUserDefinedFunctionInput { static func urlPathProvider(_ value: GetUserDefinedFunctionInput) -> Swift.String? { @@ -24684,6 +25428,13 @@ extension ListTriggersInput { } } +extension ListUsageProfilesInput { + + static func urlPathProvider(_ value: ListUsageProfilesInput) -> Swift.String? { + return "/" + } +} + extension ListWorkflowsInput { static func urlPathProvider(_ value: ListWorkflowsInput) -> Swift.String? { @@ -25055,6 +25806,13 @@ extension UpdateTriggerInput { } } +extension UpdateUsageProfileInput { + + static func urlPathProvider(_ value: UpdateUsageProfileInput) -> Swift.String? { + return "/" + } +} + extension UpdateUserDefinedFunctionInput { static func urlPathProvider(_ value: UpdateUserDefinedFunctionInput) -> Swift.String? { @@ -25562,6 +26320,17 @@ extension CreateTriggerInput { } } +extension CreateUsageProfileInput { + + static func write(value: CreateUsageProfileInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Configuration"].write(value.configuration, with: GlueClientTypes.ProfileConfiguration.write(value:to:)) + try writer["Description"].write(value.description) + try writer["Name"].write(value.name) + try writer["Tags"].writeMap(value.tags, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + } +} + extension CreateUserDefinedFunctionInput { static func write(value: CreateUserDefinedFunctionInput?, to writer: SmithyJSON.Writer) throws { @@ -25803,6 +26572,14 @@ extension DeleteTriggerInput { } } +extension DeleteUsageProfileInput { + + static func write(value: DeleteUsageProfileInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Name"].write(value.name) + } +} + extension DeleteUserDefinedFunctionInput { static func write(value: DeleteUserDefinedFunctionInput?, to writer: SmithyJSON.Writer) throws { @@ -26443,6 +27220,14 @@ extension GetUnfilteredTableMetadataInput { } } +extension GetUsageProfileInput { + + static func write(value: GetUsageProfileInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Name"].write(value.name) + } +} + extension GetUserDefinedFunctionInput { static func write(value: GetUserDefinedFunctionInput?, to writer: SmithyJSON.Writer) throws { @@ -26709,6 +27494,15 @@ extension ListTriggersInput { } } +extension ListUsageProfilesInput { + + static func write(value: ListUsageProfilesInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["MaxResults"].write(value.maxResults) + try writer["NextToken"].write(value.nextToken) + } +} + extension ListWorkflowsInput { static func write(value: ListWorkflowsInput?, to writer: SmithyJSON.Writer) throws { @@ -27260,10 +28054,12 @@ extension UpdateTableInput { guard let value else { return } try writer["CatalogId"].write(value.catalogId) try writer["DatabaseName"].write(value.databaseName) + try writer["Force"].write(value.force) try writer["SkipArchive"].write(value.skipArchive) try writer["TableInput"].write(value.tableInput, with: GlueClientTypes.TableInput.write(value:to:)) try writer["TransactionId"].write(value.transactionId) try writer["VersionId"].write(value.versionId) + try writer["ViewUpdateAction"].write(value.viewUpdateAction) } } @@ -27288,6 +28084,16 @@ extension UpdateTriggerInput { } } +extension UpdateUsageProfileInput { + + static func write(value: UpdateUsageProfileInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Configuration"].write(value.configuration, with: GlueClientTypes.ProfileConfiguration.write(value:to:)) + try writer["Description"].write(value.description) + try writer["Name"].write(value.name) + } +} + extension UpdateUserDefinedFunctionInput { static func write(value: UpdateUserDefinedFunctionInput?, to writer: SmithyJSON.Writer) throws { @@ -27596,7 +28402,12 @@ extension CreateClassifierOutput { extension CreateConnectionOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CreateConnectionOutput { - return CreateConnectionOutput() + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = CreateConnectionOutput() + value.createConnectionStatus = try reader["CreateConnectionStatus"].readIfPresent() + return value } } @@ -27810,6 +28621,18 @@ extension CreateTriggerOutput { } } +extension CreateUsageProfileOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CreateUsageProfileOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = CreateUsageProfileOutput() + value.name = try reader["Name"].readIfPresent() + return value + } +} + extension CreateUserDefinedFunctionOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CreateUserDefinedFunctionOutput { @@ -28046,6 +28869,13 @@ extension DeleteTriggerOutput { } } +extension DeleteUsageProfileOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DeleteUsageProfileOutput { + return DeleteUsageProfileOutput() + } +} + extension DeleteUserDefinedFunctionOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DeleteUserDefinedFunctionOutput { @@ -28950,6 +29780,22 @@ extension GetUnfilteredTableMetadataOutput { } } +extension GetUsageProfileOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetUsageProfileOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = GetUsageProfileOutput() + value.configuration = try reader["Configuration"].readIfPresent(with: GlueClientTypes.ProfileConfiguration.read(from:)) + value.createdOn = try reader["CreatedOn"].readTimestampIfPresent(format: .epochSeconds) + value.description = try reader["Description"].readIfPresent() + value.lastModifiedOn = try reader["LastModifiedOn"].readTimestampIfPresent(format: .epochSeconds) + value.name = try reader["Name"].readIfPresent() + return value + } +} + extension GetUserDefinedFunctionOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetUserDefinedFunctionOutput { @@ -29282,6 +30128,19 @@ extension ListTriggersOutput { } } +extension ListUsageProfilesOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListUsageProfilesOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListUsageProfilesOutput() + value.nextToken = try reader["NextToken"].readIfPresent() + value.profiles = try reader["Profiles"].readListIfPresent(memberReadingClosure: GlueClientTypes.UsageProfileDefinition.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + extension ListWorkflowsOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListWorkflowsOutput { @@ -29849,6 +30708,18 @@ extension UpdateTriggerOutput { } } +extension UpdateUsageProfileOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> UpdateUsageProfileOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = UpdateUsageProfileOutput() + value.name = try reader["Name"].readIfPresent() + return value + } +} + extension UpdateUserDefinedFunctionOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> UpdateUserDefinedFunctionOutput { @@ -30623,6 +31494,25 @@ enum CreateTriggerOutputError { } } +enum CreateUsageProfileOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.AWSJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AlreadyExistsException": return try AlreadyExistsException.makeError(baseError: baseError) + case "InternalServiceException": return try InternalServiceException.makeError(baseError: baseError) + case "InvalidInputException": return try InvalidInputException.makeError(baseError: baseError) + case "OperationNotSupportedException": return try OperationNotSupportedException.makeError(baseError: baseError) + case "OperationTimeoutException": return try OperationTimeoutException.makeError(baseError: baseError) + case "ResourceNumberLimitExceededException": return try ResourceNumberLimitExceededException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum CreateUserDefinedFunctionOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -31075,6 +31965,23 @@ enum DeleteTriggerOutputError { } } +enum DeleteUsageProfileOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.AWSJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "InternalServiceException": return try InternalServiceException.makeError(baseError: baseError) + case "InvalidInputException": return try InvalidInputException.makeError(baseError: baseError) + case "OperationNotSupportedException": return try OperationNotSupportedException.makeError(baseError: baseError) + case "OperationTimeoutException": return try OperationTimeoutException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum DeleteUserDefinedFunctionOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -32179,6 +33086,24 @@ enum GetUnfilteredTableMetadataOutputError { } } +enum GetUsageProfileOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.AWSJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "EntityNotFoundException": return try EntityNotFoundException.makeError(baseError: baseError) + case "InternalServiceException": return try InternalServiceException.makeError(baseError: baseError) + case "InvalidInputException": return try InvalidInputException.makeError(baseError: baseError) + case "OperationNotSupportedException": return try OperationNotSupportedException.makeError(baseError: baseError) + case "OperationTimeoutException": return try OperationTimeoutException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum GetUserDefinedFunctionOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -32610,6 +33535,23 @@ enum ListTriggersOutputError { } } +enum ListUsageProfilesOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.AWSJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "InternalServiceException": return try InternalServiceException.makeError(baseError: baseError) + case "InvalidInputException": return try InvalidInputException.makeError(baseError: baseError) + case "OperationNotSupportedException": return try OperationNotSupportedException.makeError(baseError: baseError) + case "OperationTimeoutException": return try OperationTimeoutException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum ListWorkflowsOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -33566,6 +34508,25 @@ enum UpdateTriggerOutputError { } } +enum UpdateUsageProfileOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.AWSJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "ConcurrentModificationException": return try ConcurrentModificationException.makeError(baseError: baseError) + case "EntityNotFoundException": return try EntityNotFoundException.makeError(baseError: baseError) + case "InternalServiceException": return try InternalServiceException.makeError(baseError: baseError) + case "InvalidInputException": return try InvalidInputException.makeError(baseError: baseError) + case "OperationNotSupportedException": return try OperationNotSupportedException.makeError(baseError: baseError) + case "OperationTimeoutException": return try OperationTimeoutException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum UpdateUserDefinedFunctionOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -33827,6 +34788,19 @@ extension ValidationException { } } +extension OperationNotSupportedException { + + static func makeError(baseError: AWSClientRuntime.AWSJSONError) throws -> OperationNotSupportedException { + let reader = baseError.errorBodyReader + var value = OperationNotSupportedException() + value.properties.message = try reader["Message"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + extension SchedulerTransitioningException { static func makeError(baseError: AWSClientRuntime.AWSJSONError) throws -> SchedulerTransitioningException { @@ -34656,6 +35630,7 @@ extension GlueClientTypes.Job { value.executionClass = try reader["ExecutionClass"].readIfPresent() value.sourceControlDetails = try reader["SourceControlDetails"].readIfPresent(with: GlueClientTypes.SourceControlDetails.read(from:)) value.maintenanceWindow = try reader["MaintenanceWindow"].readIfPresent() + value.profileName = try reader["ProfileName"].readIfPresent() return value } } @@ -37761,6 +38736,7 @@ extension GlueClientTypes.JobRun { value.dpuSeconds = try reader["DPUSeconds"].readIfPresent() value.executionClass = try reader["ExecutionClass"].readIfPresent() value.maintenanceWindow = try reader["MaintenanceWindow"].readIfPresent() + value.profileName = try reader["ProfileName"].readIfPresent() return value } } @@ -37892,6 +38868,7 @@ extension GlueClientTypes.Session { value.executionTime = try reader["ExecutionTime"].readIfPresent() value.dpuSeconds = try reader["DPUSeconds"].readIfPresent() value.idleTimeout = try reader["IdleTimeout"].readIfPresent() + value.profileName = try reader["ProfileName"].readIfPresent() return value } } @@ -38308,6 +39285,52 @@ extension GlueClientTypes.Connection { value.creationTime = try reader["CreationTime"].readTimestampIfPresent(format: .epochSeconds) value.lastUpdatedTime = try reader["LastUpdatedTime"].readTimestampIfPresent(format: .epochSeconds) value.lastUpdatedBy = try reader["LastUpdatedBy"].readIfPresent() + value.status = try reader["Status"].readIfPresent() + value.statusReason = try reader["StatusReason"].readIfPresent() + value.lastConnectionValidationTime = try reader["LastConnectionValidationTime"].readTimestampIfPresent(format: .epochSeconds) + value.authenticationConfiguration = try reader["AuthenticationConfiguration"].readIfPresent(with: GlueClientTypes.AuthenticationConfiguration.read(from:)) + return value + } +} + +extension GlueClientTypes.AuthenticationConfiguration { + + static func read(from reader: SmithyJSON.Reader) throws -> GlueClientTypes.AuthenticationConfiguration { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = GlueClientTypes.AuthenticationConfiguration() + value.authenticationType = try reader["AuthenticationType"].readIfPresent() + value.secretArn = try reader["SecretArn"].readIfPresent() + value.oAuth2Properties = try reader["OAuth2Properties"].readIfPresent(with: GlueClientTypes.OAuth2Properties.read(from:)) + return value + } +} + +extension GlueClientTypes.OAuth2Properties { + + static func read(from reader: SmithyJSON.Reader) throws -> GlueClientTypes.OAuth2Properties { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = GlueClientTypes.OAuth2Properties() + value.oAuth2GrantType = try reader["OAuth2GrantType"].readIfPresent() + value.oAuth2ClientApplication = try reader["OAuth2ClientApplication"].readIfPresent(with: GlueClientTypes.OAuth2ClientApplication.read(from:)) + value.tokenUrl = try reader["TokenUrl"].readIfPresent() + value.tokenUrlParametersMap = try reader["TokenUrlParametersMap"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + return value + } +} + +extension GlueClientTypes.OAuth2ClientApplication { + + static func write(value: GlueClientTypes.OAuth2ClientApplication?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["AWSManagedClientApplicationReference"].write(value.awsManagedClientApplicationReference) + try writer["UserManagedClientApplicationClientId"].write(value.userManagedClientApplicationClientId) + } + + static func read(from reader: SmithyJSON.Reader) throws -> GlueClientTypes.OAuth2ClientApplication { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = GlueClientTypes.OAuth2ClientApplication() + value.userManagedClientApplicationClientId = try reader["UserManagedClientApplicationClientId"].readIfPresent() + value.awsManagedClientApplicationReference = try reader["AWSManagedClientApplicationReference"].readIfPresent() return value } } @@ -38570,6 +39593,7 @@ extension GlueClientTypes.DataQualityEvaluationRunAdditionalRunOptions { static func write(value: GlueClientTypes.DataQualityEvaluationRunAdditionalRunOptions?, to writer: SmithyJSON.Writer) throws { guard let value else { return } try writer["CloudWatchMetricsEnabled"].write(value.cloudWatchMetricsEnabled) + try writer["CompositeRuleEvaluationMethod"].write(value.compositeRuleEvaluationMethod) try writer["ResultsS3Prefix"].write(value.resultsS3Prefix) } @@ -38578,6 +39602,7 @@ extension GlueClientTypes.DataQualityEvaluationRunAdditionalRunOptions { var value = GlueClientTypes.DataQualityEvaluationRunAdditionalRunOptions() value.cloudWatchMetricsEnabled = try reader["CloudWatchMetricsEnabled"].readIfPresent() value.resultsS3Prefix = try reader["ResultsS3Prefix"].readIfPresent() + value.compositeRuleEvaluationMethod = try reader["CompositeRuleEvaluationMethod"].readIfPresent() return value } } @@ -39091,6 +40116,7 @@ extension GlueClientTypes.ViewRepresentation { value.dialectVersion = try reader["DialectVersion"].readIfPresent() value.viewOriginalText = try reader["ViewOriginalText"].readIfPresent() value.viewExpandedText = try reader["ViewExpandedText"].readIfPresent() + value.validationConnection = try reader["ValidationConnection"].readIfPresent() value.isStale = try reader["IsStale"].readIfPresent() return value } @@ -39163,6 +40189,44 @@ extension GlueClientTypes.ColumnRowFilter { } } +extension GlueClientTypes.ProfileConfiguration { + + static func write(value: GlueClientTypes.ProfileConfiguration?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["JobConfiguration"].writeMap(value.jobConfiguration, valueWritingClosure: GlueClientTypes.ConfigurationObject.write(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + try writer["SessionConfiguration"].writeMap(value.sessionConfiguration, valueWritingClosure: GlueClientTypes.ConfigurationObject.write(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + } + + static func read(from reader: SmithyJSON.Reader) throws -> GlueClientTypes.ProfileConfiguration { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = GlueClientTypes.ProfileConfiguration() + value.sessionConfiguration = try reader["SessionConfiguration"].readMapIfPresent(valueReadingClosure: GlueClientTypes.ConfigurationObject.read(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + value.jobConfiguration = try reader["JobConfiguration"].readMapIfPresent(valueReadingClosure: GlueClientTypes.ConfigurationObject.read(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + return value + } +} + +extension GlueClientTypes.ConfigurationObject { + + static func write(value: GlueClientTypes.ConfigurationObject?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["AllowedValues"].writeList(value.allowedValues, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["DefaultValue"].write(value.defaultValue) + try writer["MaxValue"].write(value.maxValue) + try writer["MinValue"].write(value.minValue) + } + + static func read(from reader: SmithyJSON.Reader) throws -> GlueClientTypes.ConfigurationObject { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = GlueClientTypes.ConfigurationObject() + value.defaultValue = try reader["DefaultValue"].readIfPresent() + value.allowedValues = try reader["AllowedValues"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) + value.minValue = try reader["MinValue"].readIfPresent() + value.maxValue = try reader["MaxValue"].readIfPresent() + return value + } +} + extension GlueClientTypes.UserDefinedFunction { static func read(from reader: SmithyJSON.Reader) throws -> GlueClientTypes.UserDefinedFunction { @@ -39317,6 +40381,19 @@ extension GlueClientTypes.SchemaVersionListItem { } } +extension GlueClientTypes.UsageProfileDefinition { + + static func read(from reader: SmithyJSON.Reader) throws -> GlueClientTypes.UsageProfileDefinition { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = GlueClientTypes.UsageProfileDefinition() + value.name = try reader["Name"].readIfPresent() + value.description = try reader["Description"].readIfPresent() + value.createdOn = try reader["CreatedOn"].readTimestampIfPresent(format: .epochSeconds) + value.lastModifiedOn = try reader["LastModifiedOn"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + extension GlueClientTypes.MetadataInfo { static func read(from reader: SmithyJSON.Reader) throws -> GlueClientTypes.MetadataInfo { @@ -39434,12 +40511,45 @@ extension GlueClientTypes.ConnectionInput { static func write(value: GlueClientTypes.ConnectionInput?, to writer: SmithyJSON.Writer) throws { guard let value else { return } + try writer["AuthenticationConfiguration"].write(value.authenticationConfiguration, with: GlueClientTypes.AuthenticationConfigurationInput.write(value:to:)) try writer["ConnectionProperties"].writeMap(value.connectionProperties, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) try writer["ConnectionType"].write(value.connectionType) try writer["Description"].write(value.description) try writer["MatchCriteria"].writeList(value.matchCriteria, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) try writer["Name"].write(value.name) try writer["PhysicalConnectionRequirements"].write(value.physicalConnectionRequirements, with: GlueClientTypes.PhysicalConnectionRequirements.write(value:to:)) + try writer["ValidateCredentials"].write(value.validateCredentials) + } +} + +extension GlueClientTypes.AuthenticationConfigurationInput { + + static func write(value: GlueClientTypes.AuthenticationConfigurationInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["AuthenticationType"].write(value.authenticationType) + try writer["OAuth2Properties"].write(value.oAuth2Properties, with: GlueClientTypes.OAuth2PropertiesInput.write(value:to:)) + try writer["SecretArn"].write(value.secretArn) + } +} + +extension GlueClientTypes.OAuth2PropertiesInput { + + static func write(value: GlueClientTypes.OAuth2PropertiesInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["AuthorizationCodeProperties"].write(value.authorizationCodeProperties, with: GlueClientTypes.AuthorizationCodeProperties.write(value:to:)) + try writer["OAuth2ClientApplication"].write(value.oAuth2ClientApplication, with: GlueClientTypes.OAuth2ClientApplication.write(value:to:)) + try writer["OAuth2GrantType"].write(value.oAuth2GrantType) + try writer["TokenUrl"].write(value.tokenUrl) + try writer["TokenUrlParametersMap"].writeMap(value.tokenUrlParametersMap, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + } +} + +extension GlueClientTypes.AuthorizationCodeProperties { + + static func write(value: GlueClientTypes.AuthorizationCodeProperties?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["AuthorizationCode"].write(value.authorizationCode) + try writer["RedirectUri"].write(value.redirectUri) } } @@ -39490,6 +40600,30 @@ extension GlueClientTypes.TableInput { try writer["StorageDescriptor"].write(value.storageDescriptor, with: GlueClientTypes.StorageDescriptor.write(value:to:)) try writer["TableType"].write(value.tableType) try writer["TargetTable"].write(value.targetTable, with: GlueClientTypes.TableIdentifier.write(value:to:)) + try writer["ViewDefinition"].write(value.viewDefinition, with: GlueClientTypes.ViewDefinitionInput.write(value:to:)) + try writer["ViewExpandedText"].write(value.viewExpandedText) + try writer["ViewOriginalText"].write(value.viewOriginalText) + } +} + +extension GlueClientTypes.ViewDefinitionInput { + + static func write(value: GlueClientTypes.ViewDefinitionInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Definer"].write(value.definer) + try writer["IsProtected"].write(value.isProtected) + try writer["Representations"].writeList(value.representations, memberWritingClosure: GlueClientTypes.ViewRepresentationInput.write(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["SubObjects"].writeList(value.subObjects, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) + } +} + +extension GlueClientTypes.ViewRepresentationInput { + + static func write(value: GlueClientTypes.ViewRepresentationInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Dialect"].write(value.dialect) + try writer["DialectVersion"].write(value.dialectVersion) + try writer["ValidationConnection"].write(value.validationConnection) try writer["ViewExpandedText"].write(value.viewExpandedText) try writer["ViewOriginalText"].write(value.viewOriginalText) } diff --git a/Sources/Services/AWSGlue/Sources/AWSGlue/Paginators.swift b/Sources/Services/AWSGlue/Sources/AWSGlue/Paginators.swift index e544de35b96..c01bfe68699 100644 --- a/Sources/Services/AWSGlue/Sources/AWSGlue/Paginators.swift +++ b/Sources/Services/AWSGlue/Sources/AWSGlue/Paginators.swift @@ -948,6 +948,36 @@ extension ListTriggersInput: ClientRuntime.PaginateToken { tags: self.tags )} } +extension GlueClient { + /// Paginate over `[ListUsageProfilesOutput]` results. + /// + /// When this operation is called, an `AsyncSequence` is created. AsyncSequences are lazy so no service + /// calls are made until the sequence is iterated over. This also means there is no guarantee that the request is valid + /// until then. If there are errors in your request, you will see the failures only after you start iterating. + /// - Parameters: + /// - input: A `[ListUsageProfilesInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListUsageProfilesOutput` + public func listUsageProfilesPaginated(input: ListUsageProfilesInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \.nextToken, outputKey: \.nextToken, paginationFunction: self.listUsageProfiles(input:)) + } +} + +extension ListUsageProfilesInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListUsageProfilesInput { + return ListUsageProfilesInput( + maxResults: self.maxResults, + nextToken: token + )} +} + +extension PaginatorSequence where OperationStackInput == ListUsageProfilesInput, OperationStackOutput == ListUsageProfilesOutput { + /// This paginator transforms the `AsyncSequence` returned by `listUsageProfilesPaginated` + /// to access the nested member `[GlueClientTypes.UsageProfileDefinition]` + /// - Returns: `[GlueClientTypes.UsageProfileDefinition]` + public func profiles() async throws -> [GlueClientTypes.UsageProfileDefinition] { + return try await self.asyncCompactMap { item in item.profiles } + } +} extension GlueClient { /// Paginate over `[ListWorkflowsOutput]` results. /// diff --git a/Sources/Services/AWSGuardDuty/Sources/AWSGuardDuty/GuardDutyClient.swift b/Sources/Services/AWSGuardDuty/Sources/AWSGuardDuty/GuardDutyClient.swift index af59b3a1fae..62e908b7c35 100644 --- a/Sources/Services/AWSGuardDuty/Sources/AWSGuardDuty/GuardDutyClient.swift +++ b/Sources/Services/AWSGuardDuty/Sources/AWSGuardDuty/GuardDutyClient.swift @@ -1,5 +1,6 @@ // Code generated by smithy-swift-codegen. DO NOT EDIT! +import Foundation import class AWSClientRuntime.AWSClientConfigDefaultsProvider import class AWSClientRuntime.DefaultAWSClientPlugin import class ClientRuntime.ClientBuilder @@ -461,6 +462,58 @@ extension GuardDutyClient { return result } + /// Performs the `CreateMalwareProtectionPlan` operation on the `GuardDutyAPIService` service. + /// + /// Creates a new Malware Protection plan for the protected resource. When you create a Malware Protection plan, the Amazon Web Services service terms for GuardDuty Malware Protection apply. For more information, see [Amazon Web Services service terms for GuardDuty Malware Protection](http://aws.amazon.com/service-terms/#87._Amazon_GuardDuty). + /// + /// - Parameter CreateMalwareProtectionPlanInput : [no documentation found] + /// + /// - Returns: `CreateMalwareProtectionPlanOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : An access denied exception object. + /// - `BadRequestException` : A bad request exception object. + /// - `ConflictException` : A request conflict exception object. + /// - `InternalServerErrorException` : An internal server error exception object. + public func createMalwareProtectionPlan(input: CreateMalwareProtectionPlanInput) async throws -> CreateMalwareProtectionPlanOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createMalwareProtectionPlan") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "guardduty") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "createMalwareProtectionPlan") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.IdempotencyTokenMiddleware(keyPath: \.clientToken)) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(CreateMalwareProtectionPlanInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: CreateMalwareProtectionPlanInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(CreateMalwareProtectionPlanOutput.httpOutput(from:), CreateMalwareProtectionPlanOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `CreateMembers` operation on the `GuardDutyAPIService` service. /// /// Creates member accounts of the current Amazon Web Services account by specifying a list of Amazon Web Services account IDs. This step is a prerequisite for managing the associated member accounts either by invitation or through an organization. As a delegated administrator, using CreateMembers will enable GuardDuty in the added member accounts, with the exception of the organization delegated administrator account. A delegated administrator must enable GuardDuty prior to being added as a member. When you use CreateMembers as an Organizations delegated administrator, GuardDuty applies your organization's auto-enable settings to the member accounts in this request, irrespective of the accounts being new or existing members. For more information about the existing auto-enable settings for your organization, see [DescribeOrganizationConfiguration](https://docs.aws.amazon.com/guardduty/latest/APIReference/API_DescribeOrganizationConfiguration.html). If you disassociate a member account that was added by invitation, the member account details obtained from this API, including the associated email addresses, will be retained. This is done so that the delegated administrator can invoke the [InviteMembers](https://docs.aws.amazon.com/guardduty/latest/APIReference/API_InviteMembers.html) API without the need to invoke the CreateMembers API again. To remove the details associated with a member account, the delegated administrator must invoke the [DeleteMembers](https://docs.aws.amazon.com/guardduty/latest/APIReference/API_DeleteMembers.html) API. When the member accounts added through Organizations are later disassociated, you (administrator) can't invite them by calling the InviteMembers API. You can create an association with these member accounts again only by calling the CreateMembers API. @@ -895,6 +948,54 @@ extension GuardDutyClient { return result } + /// Performs the `DeleteMalwareProtectionPlan` operation on the `GuardDutyAPIService` service. + /// + /// Deletes the Malware Protection plan ID associated with the Malware Protection plan resource. Use this API only when you no longer want to protect the resource associated with this Malware Protection plan ID. + /// + /// - Parameter DeleteMalwareProtectionPlanInput : [no documentation found] + /// + /// - Returns: `DeleteMalwareProtectionPlanOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : An access denied exception object. + /// - `BadRequestException` : A bad request exception object. + /// - `InternalServerErrorException` : An internal server error exception object. + /// - `ResourceNotFoundException` : The requested resource can't be found. + public func deleteMalwareProtectionPlan(input: DeleteMalwareProtectionPlanInput) async throws -> DeleteMalwareProtectionPlanOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteMalwareProtectionPlan") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "guardduty") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteMalwareProtectionPlan") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(DeleteMalwareProtectionPlanInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(DeleteMalwareProtectionPlanOutput.httpOutput(from:), DeleteMalwareProtectionPlanOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `DeleteMembers` operation on the `GuardDutyAPIService` service. /// /// Deletes GuardDuty member accounts (to the current GuardDuty administrator account) specified by the account IDs. With autoEnableOrganizationMembers configuration for your organization set to ALL, you'll receive an error if you attempt to disable GuardDuty for a member account in your organization. @@ -1795,6 +1896,54 @@ extension GuardDutyClient { return result } + /// Performs the `GetMalwareProtectionPlan` operation on the `GuardDutyAPIService` service. + /// + /// Retrieves the Malware Protection plan details associated with a Malware Protection plan ID. + /// + /// - Parameter GetMalwareProtectionPlanInput : [no documentation found] + /// + /// - Returns: `GetMalwareProtectionPlanOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : An access denied exception object. + /// - `BadRequestException` : A bad request exception object. + /// - `InternalServerErrorException` : An internal server error exception object. + /// - `ResourceNotFoundException` : The requested resource can't be found. + public func getMalwareProtectionPlan(input: GetMalwareProtectionPlanInput) async throws -> GetMalwareProtectionPlanOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getMalwareProtectionPlan") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "guardduty") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getMalwareProtectionPlan") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GetMalwareProtectionPlanInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GetMalwareProtectionPlanOutput.httpOutput(from:), GetMalwareProtectionPlanOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `GetMalwareScanSettings` operation on the `GuardDutyAPIService` service. /// /// Returns the details of the malware scan settings. There might be regional differences because some data sources might not be available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more information, see [Regions and endpoints](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_regions.html). @@ -2511,6 +2660,54 @@ extension GuardDutyClient { return result } + /// Performs the `ListMalwareProtectionPlans` operation on the `GuardDutyAPIService` service. + /// + /// Lists the Malware Protection plan IDs associated with the protected resources in your Amazon Web Services account. + /// + /// - Parameter ListMalwareProtectionPlansInput : [no documentation found] + /// + /// - Returns: `ListMalwareProtectionPlansOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : An access denied exception object. + /// - `BadRequestException` : A bad request exception object. + /// - `InternalServerErrorException` : An internal server error exception object. + public func listMalwareProtectionPlans(input: ListMalwareProtectionPlansInput) async throws -> ListMalwareProtectionPlansOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listMalwareProtectionPlans") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "guardduty") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listMalwareProtectionPlans") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListMalwareProtectionPlansInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListMalwareProtectionPlansInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListMalwareProtectionPlansOutput.httpOutput(from:), ListMalwareProtectionPlansOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `ListMembers` operation on the `GuardDutyAPIService` service. /// /// Lists details about all member accounts for the current GuardDuty administrator account. @@ -3237,6 +3434,57 @@ extension GuardDutyClient { return result } + /// Performs the `UpdateMalwareProtectionPlan` operation on the `GuardDutyAPIService` service. + /// + /// Updates an existing Malware Protection plan resource. + /// + /// - Parameter UpdateMalwareProtectionPlanInput : [no documentation found] + /// + /// - Returns: `UpdateMalwareProtectionPlanOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : An access denied exception object. + /// - `BadRequestException` : A bad request exception object. + /// - `InternalServerErrorException` : An internal server error exception object. + /// - `ResourceNotFoundException` : The requested resource can't be found. + public func updateMalwareProtectionPlan(input: UpdateMalwareProtectionPlanInput) async throws -> UpdateMalwareProtectionPlanOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .patch) + .withServiceName(value: serviceName) + .withOperation(value: "updateMalwareProtectionPlan") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "guardduty") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "updateMalwareProtectionPlan") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(UpdateMalwareProtectionPlanInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: UpdateMalwareProtectionPlanInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(UpdateMalwareProtectionPlanOutput.httpOutput(from:), UpdateMalwareProtectionPlanOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `UpdateMalwareScanSettings` operation on the `GuardDutyAPIService` service. /// /// Updates the malware scan settings. There might be regional differences because some data sources might not be available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more information, see [Regions and endpoints](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_regions.html). diff --git a/Sources/Services/AWSGuardDuty/Sources/AWSGuardDuty/Models.swift b/Sources/Services/AWSGuardDuty/Sources/AWSGuardDuty/Models.swift index e4f0ca2e25f..5dc4ae7f288 100644 --- a/Sources/Services/AWSGuardDuty/Sources/AWSGuardDuty/Models.swift +++ b/Sources/Services/AWSGuardDuty/Sources/AWSGuardDuty/Models.swift @@ -19,11 +19,21 @@ import struct AWSClientRuntime.RestJSONError import struct Smithy.URIQueryItem import struct SmithyReadWrite.WritingClosureBox +public struct DeleteMalwareProtectionPlanOutput { + + public init() { } +} + public struct GetOrganizationStatisticsInput { public init() { } } +public struct UpdateMalwareProtectionPlanOutput { + + public init() { } +} + /// A bad request exception object. public struct BadRequestException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { @@ -3037,6 +3047,145 @@ public struct CreateIPSetOutput { } } +extension GuardDutyClientTypes { + + public enum MalwareProtectionPlanTaggingActionStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case disabled + case enabled + case sdkUnknown(Swift.String) + + public static var allCases: [MalwareProtectionPlanTaggingActionStatus] { + return [ + .disabled, + .enabled + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .disabled: return "DISABLED" + case .enabled: return "ENABLED" + case let .sdkUnknown(s): return s + } + } + } +} + +extension GuardDutyClientTypes { + /// Information about adding tags to the scanned S3 object after the scan result. + public struct MalwareProtectionPlanTaggingAction { + /// Indicates whether or not the tags will added. + public var status: GuardDutyClientTypes.MalwareProtectionPlanTaggingActionStatus? + + public init( + status: GuardDutyClientTypes.MalwareProtectionPlanTaggingActionStatus? = nil + ) + { + self.status = status + } + } + +} + +extension GuardDutyClientTypes { + /// Information about whether the tags will be added to the S3 object after scanning. + public struct MalwareProtectionPlanActions { + /// Indicates whether the scanned S3 object will have tags about the scan result. + public var tagging: GuardDutyClientTypes.MalwareProtectionPlanTaggingAction? + + public init( + tagging: GuardDutyClientTypes.MalwareProtectionPlanTaggingAction? = nil + ) + { + self.tagging = tagging + } + } + +} + +extension GuardDutyClientTypes { + /// Information about the protected S3 bucket resource. + public struct CreateS3BucketResource { + /// Name of the S3 bucket. + public var bucketName: Swift.String? + /// Information about the specified object prefixes. The S3 object will be scanned only if it belongs to any of the specified object prefixes. + public var objectPrefixes: [Swift.String]? + + public init( + bucketName: Swift.String? = nil, + objectPrefixes: [Swift.String]? = nil + ) + { + self.bucketName = bucketName + self.objectPrefixes = objectPrefixes + } + } + +} + +extension GuardDutyClientTypes { + /// Information about the protected resource that is associated with the created Malware Protection plan. Presently, S3Bucket is the only supported protected resource. + public struct CreateProtectedResource { + /// Information about the protected S3 bucket resource. + public var s3Bucket: GuardDutyClientTypes.CreateS3BucketResource? + + public init( + s3Bucket: GuardDutyClientTypes.CreateS3BucketResource? = nil + ) + { + self.s3Bucket = s3Bucket + } + } + +} + +public struct CreateMalwareProtectionPlanInput { + /// Information about whether the tags will be added to the S3 object after scanning. + public var actions: GuardDutyClientTypes.MalwareProtectionPlanActions? + /// The idempotency token for the create request. + public var clientToken: Swift.String? + /// Information about the protected resource that is associated with the created Malware Protection plan. Presently, S3Bucket is the only supported protected resource. + /// This member is required. + public var protectedResource: GuardDutyClientTypes.CreateProtectedResource? + /// IAM role with permissions required to scan and add tags to the associated protected resource. + /// This member is required. + public var role: Swift.String? + /// Tags added to the Malware Protection plan resource. + public var tags: [Swift.String: Swift.String]? + + public init( + actions: GuardDutyClientTypes.MalwareProtectionPlanActions? = nil, + clientToken: Swift.String? = nil, + protectedResource: GuardDutyClientTypes.CreateProtectedResource? = nil, + role: Swift.String? = nil, + tags: [Swift.String: Swift.String]? = nil + ) + { + self.actions = actions + self.clientToken = clientToken + self.protectedResource = protectedResource + self.role = role + self.tags = tags + } +} + +public struct CreateMalwareProtectionPlanOutput { + /// A unique identifier associated with the Malware Protection plan resource. + public var malwareProtectionPlanId: Swift.String? + + public init( + malwareProtectionPlanId: Swift.String? = nil + ) + { + self.malwareProtectionPlanId = malwareProtectionPlanId + } +} + public struct CreateMembersInput { /// A list of account ID and email address pairs of the accounts that you want to associate with the GuardDuty administrator account. /// This member is required. @@ -3639,6 +3788,48 @@ public struct DeleteIPSetOutput { public init() { } } +/// The requested resource can't be found. +public struct ResourceNotFoundException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// The error message. + public internal(set) var message: Swift.String? = nil + /// The error type. + public internal(set) var type: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ResourceNotFoundException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil, + type: Swift.String? = nil + ) + { + self.properties.message = message + self.properties.type = type + } +} + +public struct DeleteMalwareProtectionPlanInput { + /// A unique identifier associated with Malware Protection plan resource. + /// This member is required. + public var malwareProtectionPlanId: Swift.String? + + public init( + malwareProtectionPlanId: Swift.String? = nil + ) + { + self.malwareProtectionPlanId = malwareProtectionPlanId + } +} + public struct DeleteMembersInput { /// A list of account IDs of the GuardDuty member accounts that you want to delete. /// This member is required. @@ -3832,11 +4023,11 @@ extension GuardDutyClientTypes { public var deviceName: Swift.String? /// EBS volume encryption type. public var encryptionType: Swift.String? - /// KMS key Arn used to encrypt the EBS volume. + /// KMS key ARN used to encrypt the EBS volume. public var kmsKeyArn: Swift.String? - /// Snapshot Arn of the EBS volume. + /// Snapshot ARN of the EBS volume. public var snapshotArn: Swift.String? - /// EBS volume Arn information. + /// EBS volume ARN information. public var volumeArn: Swift.String? /// EBS volume size in GB. public var volumeSizeInGB: Swift.Int? @@ -3868,7 +4059,7 @@ extension GuardDutyClientTypes { extension GuardDutyClientTypes { /// Represents the resources that were scanned in the scan entry. public struct ResourceDetails { - /// InstanceArn that was scanned in the scan entry. + /// Instance ARN that was scanned in the scan entry. public var instanceArn: Swift.String? public init( @@ -4905,7 +5096,7 @@ extension GuardDutyClientTypes { public var filePath: Swift.String? /// The hash value of the infected file. public var hash: Swift.String? - /// EBS volume Arn details of the infected file. + /// EBS volume ARN details of the infected file. public var volumeArn: Swift.String? public init( @@ -5865,6 +6056,38 @@ extension GuardDutyClientTypes { } +extension GuardDutyClientTypes { + /// Information about the S3 object that was scanned + public struct S3ObjectDetail { + /// The entity tag is a hash of the S3 object. The ETag reflects changes only to the contents of an object, and not its metadata. + public var eTag: Swift.String? + /// Hash of the threat detected in this finding. + public var hash: Swift.String? + /// Key of the S3 object. + public var key: Swift.String? + /// Amazon Resource Name (ARN) of the S3 object. + public var objectArn: Swift.String? + /// Version ID of the object. + public var versionId: Swift.String? + + public init( + eTag: Swift.String? = nil, + hash: Swift.String? = nil, + key: Swift.String? = nil, + objectArn: Swift.String? = nil, + versionId: Swift.String? = nil + ) + { + self.eTag = eTag + self.hash = hash + self.key = key + self.objectArn = objectArn + self.versionId = versionId + } + } + +} + extension GuardDutyClientTypes { /// Contains information on the S3 bucket. public struct S3BucketDetail { @@ -5880,6 +6103,8 @@ extension GuardDutyClientTypes { public var owner: GuardDutyClientTypes.Owner? /// Describes the public access policies that apply to the S3 bucket. public var publicAccess: GuardDutyClientTypes.PublicAccess? + /// Information about the S3 object that was scanned. + public var s3ObjectDetails: [GuardDutyClientTypes.S3ObjectDetail]? /// All tags attached to the S3 bucket public var tags: [GuardDutyClientTypes.Tag]? /// Describes whether the bucket is a source or destination bucket. @@ -5892,6 +6117,7 @@ extension GuardDutyClientTypes { name: Swift.String? = nil, owner: GuardDutyClientTypes.Owner? = nil, publicAccess: GuardDutyClientTypes.PublicAccess? = nil, + s3ObjectDetails: [GuardDutyClientTypes.S3ObjectDetail]? = nil, tags: [GuardDutyClientTypes.Tag]? = nil, type: Swift.String? = nil ) @@ -5902,6 +6128,7 @@ extension GuardDutyClientTypes { self.name = name self.owner = owner self.publicAccess = publicAccess + self.s3ObjectDetails = s3ObjectDetails self.tags = tags self.type = type } @@ -5989,6 +6216,66 @@ extension GuardDutyClientTypes { } +extension GuardDutyClientTypes { + /// Information about the nested item path and hash of the protected resource. + public struct ItemPath { + /// The hash value of the infected resource. + public var hash: Swift.String? + /// The nested item path where the infected file was found. + public var nestedItemPath: Swift.String? + + public init( + hash: Swift.String? = nil, + nestedItemPath: Swift.String? = nil + ) + { + self.hash = hash + self.nestedItemPath = nestedItemPath + } + } + +} + +extension GuardDutyClientTypes { + /// Information about the detected threats associated with the generated finding. + public struct Threat { + /// Information about the nested item path and hash of the protected resource. + public var itemPaths: [GuardDutyClientTypes.ItemPath]? + /// Name of the detected threat that caused GuardDuty to generate this finding. + public var name: Swift.String? + /// Source of the threat that generated this finding. + public var source: Swift.String? + + public init( + itemPaths: [GuardDutyClientTypes.ItemPath]? = nil, + name: Swift.String? = nil, + source: Swift.String? = nil + ) + { + self.itemPaths = itemPaths + self.name = name + self.source = source + } + } + +} + +extension GuardDutyClientTypes { + /// Information about the malware scan that generated a GuardDuty finding. + public struct MalwareScanDetails { + /// Information about the detected threats associated with the generated GuardDuty finding. + public var threats: [GuardDutyClientTypes.Threat]? + + public init( + threats: [GuardDutyClientTypes.Threat]? = nil + ) + { + self.threats = threats + } + } + +} + extension GuardDutyClientTypes { /// Information about the runtime process details. public struct LineageObject { @@ -6258,6 +6545,8 @@ extension GuardDutyClientTypes { public var evidence: GuardDutyClientTypes.Evidence? /// The name of the feature that generated a finding. public var featureName: Swift.String? + /// Returns details from the malware scan that generated a GuardDuty finding. + public var malwareScanDetails: GuardDutyClientTypes.MalwareScanDetails? /// The resource role information for this finding. public var resourceRole: Swift.String? /// Information about the process and any required context values for a specific finding @@ -6279,6 +6568,7 @@ extension GuardDutyClientTypes { eventLastSeen: Swift.String? = nil, evidence: GuardDutyClientTypes.Evidence? = nil, featureName: Swift.String? = nil, + malwareScanDetails: GuardDutyClientTypes.MalwareScanDetails? = nil, resourceRole: Swift.String? = nil, runtimeDetails: GuardDutyClientTypes.RuntimeDetails? = nil, serviceName: Swift.String? = nil, @@ -6296,6 +6586,7 @@ extension GuardDutyClientTypes { self.eventLastSeen = eventLastSeen self.evidence = evidence self.featureName = featureName + self.malwareScanDetails = malwareScanDetails self.resourceRole = resourceRole self.runtimeDetails = runtimeDetails self.serviceName = serviceName @@ -6779,6 +7070,111 @@ public struct GetIPSetOutput { } } +public struct GetMalwareProtectionPlanInput { + /// A unique identifier associated with Malware Protection plan resource. + /// This member is required. + public var malwareProtectionPlanId: Swift.String? + + public init( + malwareProtectionPlanId: Swift.String? = nil + ) + { + self.malwareProtectionPlanId = malwareProtectionPlanId + } +} + +extension GuardDutyClientTypes { + + public enum MalwareProtectionPlanStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case active + case error + case warning + case sdkUnknown(Swift.String) + + public static var allCases: [MalwareProtectionPlanStatus] { + return [ + .active, + .error, + .warning + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .active: return "ACTIVE" + case .error: return "ERROR" + case .warning: return "WARNING" + case let .sdkUnknown(s): return s + } + } + } +} + +extension GuardDutyClientTypes { + /// Information about the issue code and message associated to the status of your Malware Protection plan. + public struct MalwareProtectionPlanStatusReason { + /// Issue code. + public var code: Swift.String? + /// Issue message that specifies the reason. For information about potential troubleshooting steps, see [Troubleshooting Malware Protection for S3 status issues](https://docs.aws.amazon.com/guardduty/latest/ug/troubleshoot-s3-malware-protection-status-errors.html) in the GuardDuty User Guide. + public var message: Swift.String? + + public init( + code: Swift.String? = nil, + message: Swift.String? = nil + ) + { + self.code = code + self.message = message + } + } + +} + +public struct GetMalwareProtectionPlanOutput { + /// Information about whether the tags will be added to the S3 object after scanning. + public var actions: GuardDutyClientTypes.MalwareProtectionPlanActions? + /// Amazon Resource Name (ARN) of the protected resource. + public var arn: Swift.String? + /// The timestamp when the Malware Protection plan resource was created. + public var createdAt: Foundation.Date? + /// Information about the protected resource that is associated with the created Malware Protection plan. Presently, S3Bucket is the only supported protected resource. + public var protectedResource: GuardDutyClientTypes.CreateProtectedResource? + /// IAM role that includes the permissions required to scan and add tags to the associated protected resource. + public var role: Swift.String? + /// Malware Protection plan status. + public var status: GuardDutyClientTypes.MalwareProtectionPlanStatus? + /// Information about the issue code and message associated to the status of your Malware Protection plan. + public var statusReasons: [GuardDutyClientTypes.MalwareProtectionPlanStatusReason]? + /// Tags added to the Malware Protection plan resource. + public var tags: [Swift.String: Swift.String]? + + public init( + actions: GuardDutyClientTypes.MalwareProtectionPlanActions? = nil, + arn: Swift.String? = nil, + createdAt: Foundation.Date? = nil, + protectedResource: GuardDutyClientTypes.CreateProtectedResource? = nil, + role: Swift.String? = nil, + status: GuardDutyClientTypes.MalwareProtectionPlanStatus? = nil, + statusReasons: [GuardDutyClientTypes.MalwareProtectionPlanStatusReason]? = nil, + tags: [Swift.String: Swift.String]? = nil + ) + { + self.actions = actions + self.arn = arn + self.createdAt = createdAt + self.protectedResource = protectedResource + self.role = role + self.status = status + self.statusReasons = statusReasons + self.tags = tags + } +} + public struct GetMalwareScanSettingsInput { /// The unique ID of the detector that the scan setting is associated with. /// This member is required. @@ -8145,21 +8541,65 @@ public struct ListIPSetsOutput { } } -public struct ListMembersInput { - /// The unique ID of the detector the member is associated with. - /// This member is required. - public var detectorId: Swift.String? - /// You can use this parameter to indicate the maximum number of items you want in the response. The default value is 50. The maximum value is 50. - public var maxResults: Swift.Int? +public struct ListMalwareProtectionPlansInput { /// You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request with the value of NextToken from the previous response to continue listing data. public var nextToken: Swift.String? - /// Specifies whether to only return associated members or to return all members (including members who haven't been invited yet or have been disassociated). Member accounts must have been previously associated with the GuardDuty administrator account using [Create Members](https://docs.aws.amazon.com/guardduty/latest/APIReference/API_CreateMembers.html). - public var onlyAssociated: Swift.String? public init( - detectorId: Swift.String? = nil, - maxResults: Swift.Int? = nil, - nextToken: Swift.String? = nil, + nextToken: Swift.String? = nil + ) + { + self.nextToken = nextToken + } +} + +extension GuardDutyClientTypes { + /// Information about the Malware Protection plan resource. + public struct MalwareProtectionPlanSummary { + /// A unique identifier associated with Malware Protection plan. + public var malwareProtectionPlanId: Swift.String? + + public init( + malwareProtectionPlanId: Swift.String? = nil + ) + { + self.malwareProtectionPlanId = malwareProtectionPlanId + } + } + +} + +public struct ListMalwareProtectionPlansOutput { + /// A list of unique identifiers associated with each Malware Protection plan. + public var malwareProtectionPlans: [GuardDutyClientTypes.MalwareProtectionPlanSummary]? + /// You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request with the value of NextToken from the previous response to continue listing data. + public var nextToken: Swift.String? + + public init( + malwareProtectionPlans: [GuardDutyClientTypes.MalwareProtectionPlanSummary]? = nil, + nextToken: Swift.String? = nil + ) + { + self.malwareProtectionPlans = malwareProtectionPlans + self.nextToken = nextToken + } +} + +public struct ListMembersInput { + /// The unique ID of the detector the member is associated with. + /// This member is required. + public var detectorId: Swift.String? + /// You can use this parameter to indicate the maximum number of items you want in the response. The default value is 50. The maximum value is 50. + public var maxResults: Swift.Int? + /// You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request with the value of NextToken from the previous response to continue listing data. + public var nextToken: Swift.String? + /// Specifies whether to only return associated members or to return all members (including members who haven't been invited yet or have been disassociated). Member accounts must have been previously associated with the GuardDuty administrator account using [Create Members](https://docs.aws.amazon.com/guardduty/latest/APIReference/API_CreateMembers.html). + public var onlyAssociated: Swift.String? + + public init( + detectorId: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, onlyAssociated: Swift.String? = nil ) { @@ -8624,6 +9064,63 @@ public struct UpdateIPSetOutput { public init() { } } +extension GuardDutyClientTypes { + /// Information about the protected S3 bucket resource. + public struct UpdateS3BucketResource { + /// Information about the specified object prefixes. The S3 object will be scanned only if it belongs to any of the specified object prefixes. + public var objectPrefixes: [Swift.String]? + + public init( + objectPrefixes: [Swift.String]? = nil + ) + { + self.objectPrefixes = objectPrefixes + } + } + +} + +extension GuardDutyClientTypes { + /// Information about the protected resource that is associated with the created Malware Protection plan. Presently, S3Bucket is the only supported protected resource. + public struct UpdateProtectedResource { + /// Information about the protected S3 bucket resource. + public var s3Bucket: GuardDutyClientTypes.UpdateS3BucketResource? + + public init( + s3Bucket: GuardDutyClientTypes.UpdateS3BucketResource? = nil + ) + { + self.s3Bucket = s3Bucket + } + } + +} + +public struct UpdateMalwareProtectionPlanInput { + /// Information about whether the tags will be added to the S3 object after scanning. + public var actions: GuardDutyClientTypes.MalwareProtectionPlanActions? + /// A unique identifier associated with the Malware Protection plan. + /// This member is required. + public var malwareProtectionPlanId: Swift.String? + /// Information about the protected resource that is associated with the created Malware Protection plan. Presently, S3Bucket is the only supported protected resource. + public var protectedResource: GuardDutyClientTypes.UpdateProtectedResource? + /// IAM role with permissions required to scan and add tags to the associated protected resource. + public var role: Swift.String? + + public init( + actions: GuardDutyClientTypes.MalwareProtectionPlanActions? = nil, + malwareProtectionPlanId: Swift.String? = nil, + protectedResource: GuardDutyClientTypes.UpdateProtectedResource? = nil, + role: Swift.String? = nil + ) + { + self.actions = actions + self.malwareProtectionPlanId = malwareProtectionPlanId + self.protectedResource = protectedResource + self.role = role + } +} + public struct UpdateMalwareScanSettingsInput { /// The unique ID of the detector that specifies the GuardDuty service where you want to update scan settings. /// This member is required. @@ -9074,6 +9571,13 @@ extension CreateIPSetInput { } } +extension CreateMalwareProtectionPlanInput { + + static func urlPathProvider(_ value: CreateMalwareProtectionPlanInput) -> Swift.String? { + return "/malware-protection-plan" + } +} + extension CreateMembersInput { static func urlPathProvider(_ value: CreateMembersInput) -> Swift.String? { @@ -9164,6 +9668,16 @@ extension DeleteIPSetInput { } } +extension DeleteMalwareProtectionPlanInput { + + static func urlPathProvider(_ value: DeleteMalwareProtectionPlanInput) -> Swift.String? { + guard let malwareProtectionPlanId = value.malwareProtectionPlanId else { + return nil + } + return "/malware-protection-plan/\(malwareProtectionPlanId.urlPercentEncoding())" + } +} + extension DeleteMembersInput { static func urlPathProvider(_ value: DeleteMembersInput) -> Swift.String? { @@ -9376,6 +9890,16 @@ extension GetIPSetInput { } } +extension GetMalwareProtectionPlanInput { + + static func urlPathProvider(_ value: GetMalwareProtectionPlanInput) -> Swift.String? { + guard let malwareProtectionPlanId = value.malwareProtectionPlanId else { + return nil + } + return "/malware-protection-plan/\(malwareProtectionPlanId.urlPercentEncoding())" + } +} + extension GetMalwareScanSettingsInput { static func urlPathProvider(_ value: GetMalwareScanSettingsInput) -> Swift.String? { @@ -9584,6 +10108,25 @@ extension ListIPSetsInput { } } +extension ListMalwareProtectionPlansInput { + + static func urlPathProvider(_ value: ListMalwareProtectionPlansInput) -> Swift.String? { + return "/malware-protection-plan" + } +} + +extension ListMalwareProtectionPlansInput { + + static func queryItemProvider(_ value: ListMalwareProtectionPlansInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + return items + } +} + extension ListMembersInput { static func urlPathProvider(_ value: ListMembersInput) -> Swift.String? { @@ -9818,6 +10361,16 @@ extension UpdateIPSetInput { } } +extension UpdateMalwareProtectionPlanInput { + + static func urlPathProvider(_ value: UpdateMalwareProtectionPlanInput) -> Swift.String? { + guard let malwareProtectionPlanId = value.malwareProtectionPlanId else { + return nil + } + return "/malware-protection-plan/\(malwareProtectionPlanId.urlPercentEncoding())" + } +} + extension UpdateMalwareScanSettingsInput { static func urlPathProvider(_ value: UpdateMalwareScanSettingsInput) -> Swift.String? { @@ -9940,6 +10493,18 @@ extension CreateIPSetInput { } } +extension CreateMalwareProtectionPlanInput { + + static func write(value: CreateMalwareProtectionPlanInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["actions"].write(value.actions, with: GuardDutyClientTypes.MalwareProtectionPlanActions.write(value:to:)) + try writer["clientToken"].write(value.clientToken) + try writer["protectedResource"].write(value.protectedResource, with: GuardDutyClientTypes.CreateProtectedResource.write(value:to:)) + try writer["role"].write(value.role) + try writer["tags"].writeMap(value.tags, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + } +} + extension CreateMembersInput { static func write(value: CreateMembersInput?, to writer: SmithyJSON.Writer) throws { @@ -10215,6 +10780,16 @@ extension UpdateIPSetInput { } } +extension UpdateMalwareProtectionPlanInput { + + static func write(value: UpdateMalwareProtectionPlanInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["actions"].write(value.actions, with: GuardDutyClientTypes.MalwareProtectionPlanActions.write(value:to:)) + try writer["protectedResource"].write(value.protectedResource, with: GuardDutyClientTypes.UpdateProtectedResource.write(value:to:)) + try writer["role"].write(value.role) + } +} + extension UpdateMalwareScanSettingsInput { static func write(value: UpdateMalwareScanSettingsInput?, to writer: SmithyJSON.Writer) throws { @@ -10321,6 +10896,18 @@ extension CreateIPSetOutput { } } +extension CreateMalwareProtectionPlanOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CreateMalwareProtectionPlanOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = CreateMalwareProtectionPlanOutput() + value.malwareProtectionPlanId = try reader["malwareProtectionPlanId"].readIfPresent() + return value + } +} + extension CreateMembersOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CreateMembersOutput { @@ -10409,6 +10996,13 @@ extension DeleteIPSetOutput { } } +extension DeleteMalwareProtectionPlanOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DeleteMalwareProtectionPlanOutput { + return DeleteMalwareProtectionPlanOutput() + } +} + extension DeleteMembersOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DeleteMembersOutput { @@ -10633,6 +11227,25 @@ extension GetIPSetOutput { } } +extension GetMalwareProtectionPlanOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetMalwareProtectionPlanOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = GetMalwareProtectionPlanOutput() + value.actions = try reader["actions"].readIfPresent(with: GuardDutyClientTypes.MalwareProtectionPlanActions.read(from:)) + value.arn = try reader["arn"].readIfPresent() + value.createdAt = try reader["createdAt"].readTimestampIfPresent(format: .epochSeconds) + value.protectedResource = try reader["protectedResource"].readIfPresent(with: GuardDutyClientTypes.CreateProtectedResource.read(from:)) + value.role = try reader["role"].readIfPresent() + value.status = try reader["status"].readIfPresent() + value.statusReasons = try reader["statusReasons"].readListIfPresent(memberReadingClosure: GuardDutyClientTypes.MalwareProtectionPlanStatusReason.read(from:), memberNodeInfo: "member", isFlattened: false) + value.tags = try reader["tags"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + return value + } +} + extension GetMalwareScanSettingsOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetMalwareScanSettingsOutput { @@ -10828,6 +11441,19 @@ extension ListIPSetsOutput { } } +extension ListMalwareProtectionPlansOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListMalwareProtectionPlansOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListMalwareProtectionPlansOutput() + value.malwareProtectionPlans = try reader["malwareProtectionPlans"].readListIfPresent(memberReadingClosure: GuardDutyClientTypes.MalwareProtectionPlanSummary.read(from:), memberNodeInfo: "member", isFlattened: false) + value.nextToken = try reader["nextToken"].readIfPresent() + return value + } +} + extension ListMembersOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListMembersOutput { @@ -10982,6 +11608,13 @@ extension UpdateIPSetOutput { } } +extension UpdateMalwareProtectionPlanOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> UpdateMalwareProtectionPlanOutput { + return UpdateMalwareProtectionPlanOutput() + } +} + extension UpdateMalwareScanSettingsOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> UpdateMalwareScanSettingsOutput { @@ -11112,6 +11745,23 @@ enum CreateIPSetOutputError { } } +enum CreateMalwareProtectionPlanOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "BadRequestException": return try BadRequestException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerErrorException": return try InternalServerErrorException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum CreateMembersOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -11247,6 +11897,23 @@ enum DeleteIPSetOutputError { } } +enum DeleteMalwareProtectionPlanOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "BadRequestException": return try BadRequestException.makeError(baseError: baseError) + case "InternalServerErrorException": return try InternalServerErrorException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum DeleteMembersOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -11532,6 +12199,23 @@ enum GetIPSetOutputError { } } +enum GetMalwareProtectionPlanOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "BadRequestException": return try BadRequestException.makeError(baseError: baseError) + case "InternalServerErrorException": return try InternalServerErrorException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum GetMalwareScanSettingsOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -11757,6 +12441,22 @@ enum ListIPSetsOutputError { } } +enum ListMalwareProtectionPlansOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "BadRequestException": return try BadRequestException.makeError(baseError: baseError) + case "InternalServerErrorException": return try InternalServerErrorException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum ListMembersOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -11986,6 +12686,23 @@ enum UpdateIPSetOutputError { } } +enum UpdateMalwareProtectionPlanOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "BadRequestException": return try BadRequestException.makeError(baseError: baseError) + case "InternalServerErrorException": return try InternalServerErrorException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum UpdateMalwareScanSettingsOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -12117,6 +12834,20 @@ extension ConflictException { } } +extension ResourceNotFoundException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ResourceNotFoundException { + let reader = baseError.errorBodyReader + var value = ResourceNotFoundException() + value.properties.message = try reader["message"].readIfPresent() + value.properties.type = try reader["__type"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + extension GuardDutyClientTypes.UnprocessedDataSourcesResult { static func read(from reader: SmithyJSON.Reader) throws -> GuardDutyClientTypes.UnprocessedDataSourcesResult { @@ -12573,6 +13304,40 @@ extension GuardDutyClientTypes.Service { value.ebsVolumeScanDetails = try reader["ebsVolumeScanDetails"].readIfPresent(with: GuardDutyClientTypes.EbsVolumeScanDetails.read(from:)) value.runtimeDetails = try reader["runtimeDetails"].readIfPresent(with: GuardDutyClientTypes.RuntimeDetails.read(from:)) value.detection = try reader["detection"].readIfPresent(with: GuardDutyClientTypes.Detection.read(from:)) + value.malwareScanDetails = try reader["malwareScanDetails"].readIfPresent(with: GuardDutyClientTypes.MalwareScanDetails.read(from:)) + return value + } +} + +extension GuardDutyClientTypes.MalwareScanDetails { + + static func read(from reader: SmithyJSON.Reader) throws -> GuardDutyClientTypes.MalwareScanDetails { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = GuardDutyClientTypes.MalwareScanDetails() + value.threats = try reader["threats"].readListIfPresent(memberReadingClosure: GuardDutyClientTypes.Threat.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension GuardDutyClientTypes.Threat { + + static func read(from reader: SmithyJSON.Reader) throws -> GuardDutyClientTypes.Threat { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = GuardDutyClientTypes.Threat() + value.name = try reader["name"].readIfPresent() + value.source = try reader["source"].readIfPresent() + value.itemPaths = try reader["itemPaths"].readListIfPresent(memberReadingClosure: GuardDutyClientTypes.ItemPath.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension GuardDutyClientTypes.ItemPath { + + static func read(from reader: SmithyJSON.Reader) throws -> GuardDutyClientTypes.ItemPath { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = GuardDutyClientTypes.ItemPath() + value.nestedItemPath = try reader["nestedItemPath"].readIfPresent() + value.hash = try reader["hash"].readIfPresent() return value } } @@ -13501,6 +14266,21 @@ extension GuardDutyClientTypes.S3BucketDetail { value.tags = try reader["tags"].readListIfPresent(memberReadingClosure: GuardDutyClientTypes.Tag.read(from:), memberNodeInfo: "member", isFlattened: false) value.defaultServerSideEncryption = try reader["defaultServerSideEncryption"].readIfPresent(with: GuardDutyClientTypes.DefaultServerSideEncryption.read(from:)) value.publicAccess = try reader["publicAccess"].readIfPresent(with: GuardDutyClientTypes.PublicAccess.read(from:)) + value.s3ObjectDetails = try reader["s3ObjectDetails"].readListIfPresent(memberReadingClosure: GuardDutyClientTypes.S3ObjectDetail.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension GuardDutyClientTypes.S3ObjectDetail { + + static func read(from reader: SmithyJSON.Reader) throws -> GuardDutyClientTypes.S3ObjectDetail { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = GuardDutyClientTypes.S3ObjectDetail() + value.objectArn = try reader["objectArn"].readIfPresent() + value.key = try reader["key"].readIfPresent() + value.eTag = try reader["eTag"].readIfPresent() + value.hash = try reader["hash"].readIfPresent() + value.versionId = try reader["versionId"].readIfPresent() return value } } @@ -13628,6 +14408,79 @@ extension GuardDutyClientTypes.FindingStatistics { } } +extension GuardDutyClientTypes.CreateProtectedResource { + + static func write(value: GuardDutyClientTypes.CreateProtectedResource?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["s3Bucket"].write(value.s3Bucket, with: GuardDutyClientTypes.CreateS3BucketResource.write(value:to:)) + } + + static func read(from reader: SmithyJSON.Reader) throws -> GuardDutyClientTypes.CreateProtectedResource { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = GuardDutyClientTypes.CreateProtectedResource() + value.s3Bucket = try reader["s3Bucket"].readIfPresent(with: GuardDutyClientTypes.CreateS3BucketResource.read(from:)) + return value + } +} + +extension GuardDutyClientTypes.CreateS3BucketResource { + + static func write(value: GuardDutyClientTypes.CreateS3BucketResource?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["bucketName"].write(value.bucketName) + try writer["objectPrefixes"].writeList(value.objectPrefixes, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) + } + + static func read(from reader: SmithyJSON.Reader) throws -> GuardDutyClientTypes.CreateS3BucketResource { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = GuardDutyClientTypes.CreateS3BucketResource() + value.bucketName = try reader["bucketName"].readIfPresent() + value.objectPrefixes = try reader["objectPrefixes"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension GuardDutyClientTypes.MalwareProtectionPlanActions { + + static func write(value: GuardDutyClientTypes.MalwareProtectionPlanActions?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["tagging"].write(value.tagging, with: GuardDutyClientTypes.MalwareProtectionPlanTaggingAction.write(value:to:)) + } + + static func read(from reader: SmithyJSON.Reader) throws -> GuardDutyClientTypes.MalwareProtectionPlanActions { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = GuardDutyClientTypes.MalwareProtectionPlanActions() + value.tagging = try reader["tagging"].readIfPresent(with: GuardDutyClientTypes.MalwareProtectionPlanTaggingAction.read(from:)) + return value + } +} + +extension GuardDutyClientTypes.MalwareProtectionPlanTaggingAction { + + static func write(value: GuardDutyClientTypes.MalwareProtectionPlanTaggingAction?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["status"].write(value.status) + } + + static func read(from reader: SmithyJSON.Reader) throws -> GuardDutyClientTypes.MalwareProtectionPlanTaggingAction { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = GuardDutyClientTypes.MalwareProtectionPlanTaggingAction() + value.status = try reader["status"].readIfPresent() + return value + } +} + +extension GuardDutyClientTypes.MalwareProtectionPlanStatusReason { + + static func read(from reader: SmithyJSON.Reader) throws -> GuardDutyClientTypes.MalwareProtectionPlanStatusReason { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = GuardDutyClientTypes.MalwareProtectionPlanStatusReason() + value.code = try reader["code"].readIfPresent() + value.message = try reader["message"].readIfPresent() + return value + } +} + extension GuardDutyClientTypes.ScanResourceCriteria { static func write(value: GuardDutyClientTypes.ScanResourceCriteria?, to writer: SmithyJSON.Writer) throws { @@ -14077,6 +14930,16 @@ extension GuardDutyClientTypes.Invitation { } } +extension GuardDutyClientTypes.MalwareProtectionPlanSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> GuardDutyClientTypes.MalwareProtectionPlanSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = GuardDutyClientTypes.MalwareProtectionPlanSummary() + value.malwareProtectionPlanId = try reader["malwareProtectionPlanId"].readIfPresent() + return value + } +} + extension GuardDutyClientTypes.AdminAccount { static func read(from reader: SmithyJSON.Reader) throws -> GuardDutyClientTypes.AdminAccount { @@ -14260,6 +15123,22 @@ extension GuardDutyClientTypes.CoverageSortCriteria { } } +extension GuardDutyClientTypes.UpdateProtectedResource { + + static func write(value: GuardDutyClientTypes.UpdateProtectedResource?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["s3Bucket"].write(value.s3Bucket, with: GuardDutyClientTypes.UpdateS3BucketResource.write(value:to:)) + } +} + +extension GuardDutyClientTypes.UpdateS3BucketResource { + + static func write(value: GuardDutyClientTypes.UpdateS3BucketResource?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["objectPrefixes"].writeList(value.objectPrefixes, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) + } +} + extension GuardDutyClientTypes.MemberFeaturesConfiguration { static func write(value: GuardDutyClientTypes.MemberFeaturesConfiguration?, to writer: SmithyJSON.Writer) throws { diff --git a/Sources/Services/AWSIoTWireless/Sources/AWSIoTWireless/Models.swift b/Sources/Services/AWSIoTWireless/Sources/AWSIoTWireless/Models.swift index 5a1b894f547..f23b10dafdd 100644 --- a/Sources/Services/AWSIoTWireless/Sources/AWSIoTWireless/Models.swift +++ b/Sources/Services/AWSIoTWireless/Sources/AWSIoTWireless/Models.swift @@ -3814,6 +3814,7 @@ extension IoTWirelessClientTypes { /// The status of a wireless device in a FUOTA task. public enum FuotaDeviceStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case deviceExistInConflictFuotaTask case fragalgoUnsupported case fragindexUnsupported case initial @@ -3829,6 +3830,7 @@ extension IoTWirelessClientTypes { public static var allCases: [FuotaDeviceStatus] { return [ + .deviceExistInConflictFuotaTask, .fragalgoUnsupported, .fragindexUnsupported, .initial, @@ -3850,6 +3852,7 @@ extension IoTWirelessClientTypes { public var rawValue: Swift.String { switch self { + case .deviceExistInConflictFuotaTask: return "Device_exist_in_conflict_fuota_task" case .fragalgoUnsupported: return "FragAlgo_unsupported" case .fragindexUnsupported: return "FragIndex_unsupported" case .initial: return "Initial" @@ -4530,6 +4533,8 @@ extension IoTWirelessClientTypes { case devicejoinrequestcount case devicerssi case deviceroamingdownlinkcount + case deviceroamingrssi + case deviceroamingsnr case deviceroaminguplinkcount case devicesnr case deviceuplinkcount @@ -4564,6 +4569,8 @@ extension IoTWirelessClientTypes { .devicejoinrequestcount, .devicerssi, .deviceroamingdownlinkcount, + .deviceroamingrssi, + .deviceroamingsnr, .deviceroaminguplinkcount, .devicesnr, .deviceuplinkcount, @@ -4604,6 +4611,8 @@ extension IoTWirelessClientTypes { case .devicejoinrequestcount: return "DeviceJoinRequestCount" case .devicerssi: return "DeviceRSSI" case .deviceroamingdownlinkcount: return "DeviceRoamingDownlinkCount" + case .deviceroamingrssi: return "DeviceRoamingRSSI" + case .deviceroamingsnr: return "DeviceRoamingSNR" case .deviceroaminguplinkcount: return "DeviceRoamingUplinkCount" case .devicesnr: return "DeviceSNR" case .deviceuplinkcount: return "DeviceUplinkCount" diff --git a/Sources/Services/AWSKMS/Sources/AWSKMS/KMSClient.swift b/Sources/Services/AWSKMS/Sources/AWSKMS/KMSClient.swift index 43126b355fb..fa1694e88f1 100644 --- a/Sources/Services/AWSKMS/Sources/AWSKMS/KMSClient.swift +++ b/Sources/Services/AWSKMS/Sources/AWSKMS/KMSClient.swift @@ -548,7 +548,7 @@ extension KMSClient { /// Performs the `CreateKey` operation on the `TrentService` service. /// - /// Creates a unique customer managed [KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms-keys) in your Amazon Web Services account and Region. You can use a KMS key in cryptographic operations, such as encryption and signing. Some Amazon Web Services services let you use KMS keys that you create and manage to protect your service resources. A KMS key is a logical representation of a cryptographic key. In addition to the key material used in cryptographic operations, a KMS key includes metadata, such as the key ID, key policy, creation date, description, and key state. For details, see [Managing keys](https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html) in the Key Management Service Developer Guide Use the parameters of CreateKey to specify the type of KMS key, the source of its key material, its key policy, description, tags, and other properties. KMS has replaced the term customer master key (CMK) with KMS key and KMS key. The concept has not changed. To prevent breaking changes, KMS is keeping some variations of this term. To create different types of KMS keys, use the following guidance: Symmetric encryption KMS key By default, CreateKey creates a symmetric encryption KMS key with key material that KMS generates. This is the basic and most widely used type of KMS key, and provides the best performance. To create a symmetric encryption KMS key, you don't need to specify any parameters. The default value for KeySpec, SYMMETRIC_DEFAULT, the default value for KeyUsage, ENCRYPT_DECRYPT, and the default value for Origin, AWS_KMS, create a symmetric encryption KMS key with KMS key material. If you need a key for basic encryption and decryption or you are creating a KMS key to protect your resources in an Amazon Web Services service, create a symmetric encryption KMS key. The key material in a symmetric encryption key never leaves KMS unencrypted. You can use a symmetric encryption KMS key to encrypt and decrypt data up to 4,096 bytes, but they are typically used to generate data keys and data keys pairs. For details, see [GenerateDataKey] and [GenerateDataKeyPair]. Asymmetric KMS keys To create an asymmetric KMS key, use the KeySpec parameter to specify the type of key material in the KMS key. Then, use the KeyUsage parameter to determine whether the KMS key will be used to encrypt and decrypt or sign and verify. You can't change these properties after the KMS key is created. Asymmetric KMS keys contain an RSA key pair, Elliptic Curve (ECC) key pair, or an SM2 key pair (China Regions only). The private key in an asymmetric KMS key never leaves KMS unencrypted. However, you can use the [GetPublicKey] operation to download the public key so it can be used outside of KMS. KMS keys with RSA or SM2 key pairs can be used to encrypt or decrypt data or sign and verify messages (but not both). KMS keys with ECC key pairs can be used only to sign and verify messages. For information about asymmetric KMS keys, see [Asymmetric KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html) in the Key Management Service Developer Guide. HMAC KMS key To create an HMAC KMS key, set the KeySpec parameter to a key spec value for HMAC KMS keys. Then set the KeyUsage parameter to GENERATE_VERIFY_MAC. You must set the key usage even though GENERATE_VERIFY_MAC is the only valid key usage value for HMAC KMS keys. You can't change these properties after the KMS key is created. HMAC KMS keys are symmetric keys that never leave KMS unencrypted. You can use HMAC keys to generate ([GenerateMac]) and verify ([VerifyMac]) HMAC codes for messages up to 4096 bytes. Multi-Region primary keys Imported key material To create a multi-Region primary key in the local Amazon Web Services Region, use the MultiRegion parameter with a value of True. To create a multi-Region replica key, that is, a KMS key with the same key ID and key material as a primary key, but in a different Amazon Web Services Region, use the [ReplicateKey] operation. To change a replica key to a primary key, and its primary key to a replica key, use the [UpdatePrimaryRegion] operation. You can create multi-Region KMS keys for all supported KMS key types: symmetric encryption KMS keys, HMAC KMS keys, asymmetric encryption KMS keys, and asymmetric signing KMS keys. You can also create multi-Region keys with imported key material. However, you can't create multi-Region keys in a custom key store. This operation supports multi-Region keys, an KMS feature that lets you create multiple interoperable KMS keys in different Amazon Web Services Regions. Because these KMS keys have the same key ID, key material, and other metadata, you can use them interchangeably to encrypt data in one Amazon Web Services Region and decrypt it in a different Amazon Web Services Region without re-encrypting the data or making a cross-Region call. For more information about multi-Region keys, see [Multi-Region keys in KMS](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) in the Key Management Service Developer Guide. To import your own key material into a KMS key, begin by creating a KMS key with no key material. To do this, use the Origin parameter of CreateKey with a value of EXTERNAL. Next, use [GetParametersForImport] operation to get a public key and import token. Use the wrapping public key to encrypt your key material. Then, use [ImportKeyMaterial] with your import token to import the key material. For step-by-step instructions, see [Importing Key Material](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html) in the Key Management Service Developer Guide . You can import key material into KMS keys of all supported KMS key types: symmetric encryption KMS keys, HMAC KMS keys, asymmetric encryption KMS keys, and asymmetric signing KMS keys. You can also create multi-Region keys with imported key material. However, you can't import key material into a KMS key in a custom key store. To create a multi-Region primary key with imported key material, use the Origin parameter of CreateKey with a value of EXTERNAL and the MultiRegion parameter with a value of True. To create replicas of the multi-Region primary key, use the [ReplicateKey] operation. For instructions, see [Importing key material into multi-Region keys](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-import.html). For more information about multi-Region keys, see [Multi-Region keys in KMS](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) in the Key Management Service Developer Guide. Custom key store A [custom key store](https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html) lets you protect your Amazon Web Services resources using keys in a backing key store that you own and manage. When you request a cryptographic operation with a KMS key in a custom key store, the operation is performed in the backing key store using its cryptographic keys. KMS supports [CloudHSM key stores](https://docs.aws.amazon.com/kms/latest/developerguide/keystore-cloudhsm.html) backed by an CloudHSM cluster and [external key stores](https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html) backed by an external key manager outside of Amazon Web Services. When you create a KMS key in an CloudHSM key store, KMS generates an encryption key in the CloudHSM cluster and associates it with the KMS key. When you create a KMS key in an external key store, you specify an existing encryption key in the external key manager. Some external key managers provide a simpler method for creating a KMS key in an external key store. For details, see your external key manager documentation. Before you create a KMS key in a custom key store, the ConnectionState of the key store must be CONNECTED. To connect the custom key store, use the [ConnectCustomKeyStore] operation. To find the ConnectionState, use the [DescribeCustomKeyStores] operation. To create a KMS key in a custom key store, use the CustomKeyStoreId. Use the default KeySpec value, SYMMETRIC_DEFAULT, and the default KeyUsage value, ENCRYPT_DECRYPT to create a symmetric encryption key. No other key type is supported in a custom key store. To create a KMS key in an [CloudHSM key store](https://docs.aws.amazon.com/kms/latest/developerguide/keystore-cloudhsm.html), use the Origin parameter with a value of AWS_CLOUDHSM. The CloudHSM cluster that is associated with the custom key store must have at least two active HSMs in different Availability Zones in the Amazon Web Services Region. To create a KMS key in an [external key store](https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html), use the Origin parameter with a value of EXTERNAL_KEY_STORE and an XksKeyId parameter that identifies an existing external key. Some external key managers provide a simpler method for creating a KMS key in an external key store. For details, see your external key manager documentation. Cross-account use: No. You cannot use this operation to create a KMS key in a different Amazon Web Services account. Required permissions: [kms:CreateKey](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html) (IAM policy). To use the Tags parameter, [kms:TagResource](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html) (IAM policy). For examples and information about related permissions, see [Allow a user to create KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html#iam-policy-example-create-key) in the Key Management Service Developer Guide. Related operations: + /// Creates a unique customer managed [KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms-keys) in your Amazon Web Services account and Region. You can use a KMS key in cryptographic operations, such as encryption and signing. Some Amazon Web Services services let you use KMS keys that you create and manage to protect your service resources. A KMS key is a logical representation of a cryptographic key. In addition to the key material used in cryptographic operations, a KMS key includes metadata, such as the key ID, key policy, creation date, description, and key state. For details, see [Managing keys](https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html) in the Key Management Service Developer Guide Use the parameters of CreateKey to specify the type of KMS key, the source of its key material, its key policy, description, tags, and other properties. KMS has replaced the term customer master key (CMK) with KMS key and KMS key. The concept has not changed. To prevent breaking changes, KMS is keeping some variations of this term. To create different types of KMS keys, use the following guidance: Symmetric encryption KMS key By default, CreateKey creates a symmetric encryption KMS key with key material that KMS generates. This is the basic and most widely used type of KMS key, and provides the best performance. To create a symmetric encryption KMS key, you don't need to specify any parameters. The default value for KeySpec, SYMMETRIC_DEFAULT, the default value for KeyUsage, ENCRYPT_DECRYPT, and the default value for Origin, AWS_KMS, create a symmetric encryption KMS key with KMS key material. If you need a key for basic encryption and decryption or you are creating a KMS key to protect your resources in an Amazon Web Services service, create a symmetric encryption KMS key. The key material in a symmetric encryption key never leaves KMS unencrypted. You can use a symmetric encryption KMS key to encrypt and decrypt data up to 4,096 bytes, but they are typically used to generate data keys and data keys pairs. For details, see [GenerateDataKey] and [GenerateDataKeyPair]. Asymmetric KMS keys To create an asymmetric KMS key, use the KeySpec parameter to specify the type of key material in the KMS key. Then, use the KeyUsage parameter to determine whether the KMS key will be used to encrypt and decrypt or sign and verify. You can't change these properties after the KMS key is created. Asymmetric KMS keys contain an RSA key pair, Elliptic Curve (ECC) key pair, or an SM2 key pair (China Regions only). The private key in an asymmetric KMS key never leaves KMS unencrypted. However, you can use the [GetPublicKey] operation to download the public key so it can be used outside of KMS. Each KMS key can have only one key usage. KMS keys with RSA key pairs can be used to encrypt and decrypt data or sign and verify messages (but not both). KMS keys with NIST-recommended ECC key pairs can be used to sign and verify messages or derive shared secrets (but not both). KMS keys with ECC_SECG_P256K1 can be used only to sign and verify messages. KMS keys with SM2 key pairs (China Regions only) can be used to either encrypt and decrypt data, sign and verify messages, or derive shared secrets (you must choose one key usage type). For information about asymmetric KMS keys, see [Asymmetric KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html) in the Key Management Service Developer Guide. HMAC KMS key To create an HMAC KMS key, set the KeySpec parameter to a key spec value for HMAC KMS keys. Then set the KeyUsage parameter to GENERATE_VERIFY_MAC. You must set the key usage even though GENERATE_VERIFY_MAC is the only valid key usage value for HMAC KMS keys. You can't change these properties after the KMS key is created. HMAC KMS keys are symmetric keys that never leave KMS unencrypted. You can use HMAC keys to generate ([GenerateMac]) and verify ([VerifyMac]) HMAC codes for messages up to 4096 bytes. Multi-Region primary keys Imported key material To create a multi-Region primary key in the local Amazon Web Services Region, use the MultiRegion parameter with a value of True. To create a multi-Region replica key, that is, a KMS key with the same key ID and key material as a primary key, but in a different Amazon Web Services Region, use the [ReplicateKey] operation. To change a replica key to a primary key, and its primary key to a replica key, use the [UpdatePrimaryRegion] operation. You can create multi-Region KMS keys for all supported KMS key types: symmetric encryption KMS keys, HMAC KMS keys, asymmetric encryption KMS keys, and asymmetric signing KMS keys. You can also create multi-Region keys with imported key material. However, you can't create multi-Region keys in a custom key store. This operation supports multi-Region keys, an KMS feature that lets you create multiple interoperable KMS keys in different Amazon Web Services Regions. Because these KMS keys have the same key ID, key material, and other metadata, you can use them interchangeably to encrypt data in one Amazon Web Services Region and decrypt it in a different Amazon Web Services Region without re-encrypting the data or making a cross-Region call. For more information about multi-Region keys, see [Multi-Region keys in KMS](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) in the Key Management Service Developer Guide. To import your own key material into a KMS key, begin by creating a KMS key with no key material. To do this, use the Origin parameter of CreateKey with a value of EXTERNAL. Next, use [GetParametersForImport] operation to get a public key and import token. Use the wrapping public key to encrypt your key material. Then, use [ImportKeyMaterial] with your import token to import the key material. For step-by-step instructions, see [Importing Key Material](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html) in the Key Management Service Developer Guide . You can import key material into KMS keys of all supported KMS key types: symmetric encryption KMS keys, HMAC KMS keys, asymmetric encryption KMS keys, and asymmetric signing KMS keys. You can also create multi-Region keys with imported key material. However, you can't import key material into a KMS key in a custom key store. To create a multi-Region primary key with imported key material, use the Origin parameter of CreateKey with a value of EXTERNAL and the MultiRegion parameter with a value of True. To create replicas of the multi-Region primary key, use the [ReplicateKey] operation. For instructions, see [Importing key material into multi-Region keys](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-import.html). For more information about multi-Region keys, see [Multi-Region keys in KMS](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) in the Key Management Service Developer Guide. Custom key store A [custom key store](https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html) lets you protect your Amazon Web Services resources using keys in a backing key store that you own and manage. When you request a cryptographic operation with a KMS key in a custom key store, the operation is performed in the backing key store using its cryptographic keys. KMS supports [CloudHSM key stores](https://docs.aws.amazon.com/kms/latest/developerguide/keystore-cloudhsm.html) backed by an CloudHSM cluster and [external key stores](https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html) backed by an external key manager outside of Amazon Web Services. When you create a KMS key in an CloudHSM key store, KMS generates an encryption key in the CloudHSM cluster and associates it with the KMS key. When you create a KMS key in an external key store, you specify an existing encryption key in the external key manager. Some external key managers provide a simpler method for creating a KMS key in an external key store. For details, see your external key manager documentation. Before you create a KMS key in a custom key store, the ConnectionState of the key store must be CONNECTED. To connect the custom key store, use the [ConnectCustomKeyStore] operation. To find the ConnectionState, use the [DescribeCustomKeyStores] operation. To create a KMS key in a custom key store, use the CustomKeyStoreId. Use the default KeySpec value, SYMMETRIC_DEFAULT, and the default KeyUsage value, ENCRYPT_DECRYPT to create a symmetric encryption key. No other key type is supported in a custom key store. To create a KMS key in an [CloudHSM key store](https://docs.aws.amazon.com/kms/latest/developerguide/keystore-cloudhsm.html), use the Origin parameter with a value of AWS_CLOUDHSM. The CloudHSM cluster that is associated with the custom key store must have at least two active HSMs in different Availability Zones in the Amazon Web Services Region. To create a KMS key in an [external key store](https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html), use the Origin parameter with a value of EXTERNAL_KEY_STORE and an XksKeyId parameter that identifies an existing external key. Some external key managers provide a simpler method for creating a KMS key in an external key store. For details, see your external key manager documentation. Cross-account use: No. You cannot use this operation to create a KMS key in a different Amazon Web Services account. Required permissions: [kms:CreateKey](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html) (IAM policy). To use the Tags parameter, [kms:TagResource](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html) (IAM policy). For examples and information about related permissions, see [Allow a user to create KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html#iam-policy-example-create-key) in the Key Management Service Developer Guide. Related operations: /// /// * [DescribeKey] /// @@ -683,7 +683,7 @@ extension KMSClient { /// * The encryption algorithm or signing algorithm specified for the operation is incompatible with the type of key material in the KMS key (KeySpec). /// /// - /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. + /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. For deriving key agreement secrets, the KeyUsage must be KEY_AGREEMENT. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. /// - `KeyUnavailableException` : The request was rejected because the specified KMS key was not available. You can retry the request. /// - `KMSInternalException` : The request was rejected because an internal exception occurred. The request can be retried. /// - `KMSInvalidStateException` : The request was rejected because the state of the specified resource is not valid for this request. This exceptions means one of the following: @@ -941,6 +941,96 @@ extension KMSClient { return result } + /// Performs the `DeriveSharedSecret` operation on the `TrentService` service. + /// + /// Derives a shared secret using a key agreement algorithm. You must use an asymmetric NIST-recommended elliptic curve (ECC) or SM2 (China Regions only) KMS key pair with a KeyUsage value of KEY_AGREEMENT to call DeriveSharedSecret. DeriveSharedSecret uses the [Elliptic Curve Cryptography Cofactor Diffie-Hellman Primitive](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf#page=60) (ECDH) to establish a key agreement between two peers by deriving a shared secret from their elliptic curve public-private key pairs. You can use the raw shared secret that DeriveSharedSecret returns to derive a symmetric key that can encrypt and decrypt data that is sent between the two peers, or that can generate and verify HMACs. KMS recommends that you follow [NIST recommendations for key derivation](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Cr2.pdf) when using the raw shared secret to derive a symmetric key. The following workflow demonstrates how to establish key agreement over an insecure communication channel using DeriveSharedSecret. + /// + /// * Alice calls [CreateKey] to create an asymmetric KMS key pair with a KeyUsage value of KEY_AGREEMENT. The asymmetric KMS key must use a NIST-recommended elliptic curve (ECC) or SM2 (China Regions only) key spec. + /// + /// * Bob creates an elliptic curve key pair. Bob can call [CreateKey] to create an asymmetric KMS key pair or generate a key pair outside of KMS. Bob's key pair must use the same NIST-recommended elliptic curve (ECC) or SM2 (China Regions ony) curve as Alice. + /// + /// * Alice and Bob exchange their public keys through an insecure communication channel (like the internet). Use [GetPublicKey] to download the public key of your asymmetric KMS key pair. KMS strongly recommends verifying that the public key you receive came from the expected party before using it to derive a shared secret. + /// + /// * Alice calls DeriveSharedSecret. KMS uses the private key from the KMS key pair generated in Step 1, Bob's public key, and the Elliptic Curve Cryptography Cofactor Diffie-Hellman Primitive to derive the shared secret. The private key in your KMS key pair never leaves KMS unencrypted. DeriveSharedSecret returns the raw shared secret. + /// + /// * Bob uses the Elliptic Curve Cryptography Cofactor Diffie-Hellman Primitive to calculate the same raw secret using his private key and Alice's public key. + /// + /// + /// To derive a shared secret you must provide a key agreement algorithm, the private key of the caller's asymmetric NIST-recommended elliptic curve or SM2 (China Regions only) KMS key pair, and the public key from your peer's NIST-recommended elliptic curve or SM2 (China Regions only) key pair. The public key can be from another asymmetric KMS key pair or from a key pair generated outside of KMS, but both key pairs must be on the same elliptic curve. The KMS key that you use for this operation must be in a compatible key state. For details, see [Key states of KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html) in the Key Management Service Developer Guide. Cross-account use: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the KeyId parameter. Required permissions: [kms:DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html) (key policy) Related operations: + /// + /// * [CreateKey] + /// + /// * [GetPublicKey] + /// + /// * [DescribeKey] + /// + /// + /// Eventual consistency: The KMS API follows an eventual consistency model. For more information, see [KMS eventual consistency](https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html). + /// + /// - Parameter DeriveSharedSecretInput : [no documentation found] + /// + /// - Returns: `DeriveSharedSecretOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `DependencyTimeoutException` : The system timed out while trying to fulfill the request. You can retry the request. + /// - `DisabledException` : The request was rejected because the specified KMS key is not enabled. + /// - `DryRunOperationException` : The request was rejected because the DryRun parameter was specified. + /// - `InvalidGrantTokenException` : The request was rejected because the specified grant token is not valid. + /// - `InvalidKeyUsageException` : The request was rejected for one of the following reasons: + /// + /// * The KeyUsage value of the KMS key is incompatible with the API operation. + /// + /// * The encryption algorithm or signing algorithm specified for the operation is incompatible with the type of key material in the KMS key (KeySpec). + /// + /// + /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. For deriving key agreement secrets, the KeyUsage must be KEY_AGREEMENT. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. + /// - `KeyUnavailableException` : The request was rejected because the specified KMS key was not available. You can retry the request. + /// - `KMSInternalException` : The request was rejected because an internal exception occurred. The request can be retried. + /// - `KMSInvalidStateException` : The request was rejected because the state of the specified resource is not valid for this request. This exceptions means one of the following: + /// + /// * The key state of the KMS key is not compatible with the operation. To find the key state, use the [DescribeKey] operation. For more information about which key states are compatible with each KMS operation, see [Key states of KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html) in the Key Management Service Developer Guide . + /// + /// * For cryptographic operations on KMS keys in custom key stores, this exception represents a general failure with many possible causes. To identify the cause, see the error message that accompanies the exception. + /// - `NotFoundException` : The request was rejected because the specified entity or resource could not be found. + public func deriveSharedSecret(input: DeriveSharedSecretInput) async throws -> DeriveSharedSecretOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "deriveSharedSecret") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "kms") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deriveSharedSecret") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(DeriveSharedSecretInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "TrentService.DeriveSharedSecret")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: DeriveSharedSecretInput.write(value:to:))) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(DeriveSharedSecretOutput.httpOutput(from:), DeriveSharedSecretOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `DescribeCustomKeyStores` operation on the `TrentService` service. /// /// Gets information about [custom key stores](https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html) in the account and Region. This operation is part of the [custom key stores](https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html) feature in KMS, which combines the convenience and extensive integration of KMS with the isolation and control of a key store that you own and manage. By default, this operation returns information about all custom key stores in the account and Region. To get only information about a particular custom key store, use either the CustomKeyStoreName or CustomKeyStoreId parameter (but not both). To determine whether the custom key store is connected to its CloudHSM cluster or external key store proxy, use the ConnectionState element in the response. If an attempt to connect the custom key store failed, the ConnectionState value is FAILED and the ConnectionErrorCode element in the response indicates the cause of the failure. For help interpreting the ConnectionErrorCode, see [CustomKeyStoresListEntry]. Custom key stores have a DISCONNECTED connection state if the key store has never been connected or you used the [DisconnectCustomKeyStore] operation to disconnect it. Otherwise, the connection state is CONNECTED. If your custom key store connection state is CONNECTED but you are having trouble using it, verify that the backing store is active and available. For an CloudHSM key store, verify that the associated CloudHSM cluster is active and contains the minimum number of HSMs required for the operation, if any. For an external key store, verify that the external key store proxy and its associated external key manager are reachable and enabled. For help repairing your CloudHSM key store, see the [Troubleshooting CloudHSM key stores](https://docs.aws.amazon.com/kms/latest/developerguide/fix-keystore.html). For help repairing your external key store, see the [Troubleshooting external key stores](https://docs.aws.amazon.com/kms/latest/developerguide/xks-troubleshooting.html). Both topics are in the Key Management Service Developer Guide. Cross-account use: No. You cannot perform this operation on a custom key store in a different Amazon Web Services account. Required permissions: [kms:DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html) (IAM policy) Related operations: @@ -1484,7 +1574,7 @@ extension KMSClient { /// * The encryption algorithm or signing algorithm specified for the operation is incompatible with the type of key material in the KMS key (KeySpec). /// /// - /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. + /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. For deriving key agreement secrets, the KeyUsage must be KEY_AGREEMENT. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. /// - `KeyUnavailableException` : The request was rejected because the specified KMS key was not available. You can retry the request. /// - `KMSInternalException` : The request was rejected because an internal exception occurred. The request can be retried. /// - `KMSInvalidStateException` : The request was rejected because the state of the specified resource is not valid for this request. This exceptions means one of the following: @@ -1581,7 +1671,7 @@ extension KMSClient { /// * The encryption algorithm or signing algorithm specified for the operation is incompatible with the type of key material in the KMS key (KeySpec). /// /// - /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. + /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. For deriving key agreement secrets, the KeyUsage must be KEY_AGREEMENT. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. /// - `KeyUnavailableException` : The request was rejected because the specified KMS key was not available. You can retry the request. /// - `KMSInternalException` : The request was rejected because an internal exception occurred. The request can be retried. /// - `KMSInvalidStateException` : The request was rejected because the state of the specified resource is not valid for this request. This exceptions means one of the following: @@ -1662,7 +1752,7 @@ extension KMSClient { /// * The encryption algorithm or signing algorithm specified for the operation is incompatible with the type of key material in the KMS key (KeySpec). /// /// - /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. + /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. For deriving key agreement secrets, the KeyUsage must be KEY_AGREEMENT. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. /// - `KeyUnavailableException` : The request was rejected because the specified KMS key was not available. You can retry the request. /// - `KMSInternalException` : The request was rejected because an internal exception occurred. The request can be retried. /// - `KMSInvalidStateException` : The request was rejected because the state of the specified resource is not valid for this request. This exceptions means one of the following: @@ -1744,7 +1834,7 @@ extension KMSClient { /// * The encryption algorithm or signing algorithm specified for the operation is incompatible with the type of key material in the KMS key (KeySpec). /// /// - /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. + /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. For deriving key agreement secrets, the KeyUsage must be KEY_AGREEMENT. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. /// - `KeyUnavailableException` : The request was rejected because the specified KMS key was not available. You can retry the request. /// - `KMSInternalException` : The request was rejected because an internal exception occurred. The request can be retried. /// - `KMSInvalidStateException` : The request was rejected because the state of the specified resource is not valid for this request. This exceptions means one of the following: @@ -1826,7 +1916,7 @@ extension KMSClient { /// * The encryption algorithm or signing algorithm specified for the operation is incompatible with the type of key material in the KMS key (KeySpec). /// /// - /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. + /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. For deriving key agreement secrets, the KeyUsage must be KEY_AGREEMENT. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. /// - `KeyUnavailableException` : The request was rejected because the specified KMS key was not available. You can retry the request. /// - `KMSInternalException` : The request was rejected because an internal exception occurred. The request can be retried. /// - `KMSInvalidStateException` : The request was rejected because the state of the specified resource is not valid for this request. This exceptions means one of the following: @@ -1893,7 +1983,7 @@ extension KMSClient { /// * The encryption algorithm or signing algorithm specified for the operation is incompatible with the type of key material in the KMS key (KeySpec). /// /// - /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. + /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. For deriving key agreement secrets, the KeyUsage must be KEY_AGREEMENT. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. /// - `KeyUnavailableException` : The request was rejected because the specified KMS key was not available. You can retry the request. /// - `KMSInternalException` : The request was rejected because an internal exception occurred. The request can be retried. /// - `KMSInvalidStateException` : The request was rejected because the state of the specified resource is not valid for this request. This exceptions means one of the following: @@ -2139,7 +2229,7 @@ extension KMSClient { /// /// Returns the public key and an import token you need to import or reimport key material for a KMS key. By default, KMS keys are created with key material that KMS generates. This operation supports [Importing key material](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html), an advanced feature that lets you generate and import the cryptographic key material for a KMS key. For more information about importing key material into KMS, see [Importing key material](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html) in the Key Management Service Developer Guide. Before calling GetParametersForImport, use the [CreateKey] operation with an Origin value of EXTERNAL to create a KMS key with no key material. You can import key material for a symmetric encryption KMS key, HMAC KMS key, asymmetric encryption KMS key, or asymmetric signing KMS key. You can also import key material into a [multi-Region key](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) of any supported type. However, you can't import key material into a KMS key in a [custom key store](https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html). You can also use GetParametersForImport to get a public key and import token to [reimport the original key material](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html#reimport-key-material) into a KMS key whose key material expired or was deleted. GetParametersForImport returns the items that you need to import your key material. /// - /// * The public key (or "wrapping key") of an asymmetric key pair that KMS generates. You will use this public key to encrypt ("wrap") your key material while it's in transit to KMS. + /// * The public key (or "wrapping key") of an RSA key pair that KMS generates. You will use this public key to encrypt ("wrap") your key material while it's in transit to KMS. /// /// * A import token that ensures that KMS can decrypt your key material and associate it with the correct KMS key. /// @@ -2222,7 +2312,7 @@ extension KMSClient { /// /// * [KeySpec](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html#KMS-GetPublicKey-response-KeySpec): The type of key material in the public key, such as RSA_4096 or ECC_NIST_P521. /// - /// * [KeyUsage](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html#KMS-GetPublicKey-response-KeyUsage): Whether the key is used for encryption or signing. + /// * [KeyUsage](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html#KMS-GetPublicKey-response-KeyUsage): Whether the key is used for encryption, signing, or deriving a shared secret. /// /// * [EncryptionAlgorithms](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html#KMS-GetPublicKey-response-EncryptionAlgorithms) or [SigningAlgorithms](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html#KMS-GetPublicKey-response-SigningAlgorithms): A list of the encryption algorithms or the signing algorithms for the key. /// @@ -2247,7 +2337,7 @@ extension KMSClient { /// * The encryption algorithm or signing algorithm specified for the operation is incompatible with the type of key material in the KMS key (KeySpec). /// /// - /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. + /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. For deriving key agreement secrets, the KeyUsage must be KEY_AGREEMENT. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. /// - `KeyUnavailableException` : The request was rejected because the specified KMS key was not available. You can retry the request. /// - `KMSInternalException` : The request was rejected because an internal exception occurred. The request can be retried. /// - `KMSInvalidStateException` : The request was rejected because the state of the specified resource is not valid for this request. This exceptions means one of the following: @@ -2950,7 +3040,7 @@ extension KMSClient { /// * The encryption algorithm or signing algorithm specified for the operation is incompatible with the type of key material in the KMS key (KeySpec). /// /// - /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. + /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. For deriving key agreement secrets, the KeyUsage must be KEY_AGREEMENT. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. /// - `KeyUnavailableException` : The request was rejected because the specified KMS key was not available. You can retry the request. /// - `KMSInternalException` : The request was rejected because an internal exception occurred. The request can be retried. /// - `KMSInvalidStateException` : The request was rejected because the state of the specified resource is not valid for this request. This exceptions means one of the following: @@ -3382,7 +3472,7 @@ extension KMSClient { /// * The encryption algorithm or signing algorithm specified for the operation is incompatible with the type of key material in the KMS key (KeySpec). /// /// - /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. + /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. For deriving key agreement secrets, the KeyUsage must be KEY_AGREEMENT. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. /// - `KeyUnavailableException` : The request was rejected because the specified KMS key was not available. You can retry the request. /// - `KMSInternalException` : The request was rejected because an internal exception occurred. The request can be retried. /// - `KMSInvalidStateException` : The request was rejected because the state of the specified resource is not valid for this request. This exceptions means one of the following: @@ -3895,7 +3985,7 @@ extension KMSClient { /// * The encryption algorithm or signing algorithm specified for the operation is incompatible with the type of key material in the KMS key (KeySpec). /// /// - /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. + /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. For deriving key agreement secrets, the KeyUsage must be KEY_AGREEMENT. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. /// - `KeyUnavailableException` : The request was rejected because the specified KMS key was not available. You can retry the request. /// - `KMSInternalException` : The request was rejected because an internal exception occurred. The request can be retried. /// - `KMSInvalidSignatureException` : The request was rejected because the signature verification failed. Signature verification fails when it cannot confirm that signature was produced by signing the specified message with the specified KMS key and signing algorithm. @@ -3963,7 +4053,7 @@ extension KMSClient { /// * The encryption algorithm or signing algorithm specified for the operation is incompatible with the type of key material in the KMS key (KeySpec). /// /// - /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. + /// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. For deriving key agreement secrets, the KeyUsage must be KEY_AGREEMENT. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. /// - `KeyUnavailableException` : The request was rejected because the specified KMS key was not available. You can retry the request. /// - `KMSInternalException` : The request was rejected because an internal exception occurred. The request can be retried. /// - `KMSInvalidMacException` : The request was rejected because the HMAC verification failed. HMAC verification fails when the HMAC computed by using the specified message, HMAC KMS key, and MAC algorithm does not match the HMAC specified in the request. diff --git a/Sources/Services/AWSKMS/Sources/AWSKMS/Models.swift b/Sources/Services/AWSKMS/Sources/AWSKMS/Models.swift index bea45bd7dc2..ff6467306ad 100644 --- a/Sources/Services/AWSKMS/Sources/AWSKMS/Models.swift +++ b/Sources/Services/AWSKMS/Sources/AWSKMS/Models.swift @@ -1283,6 +1283,7 @@ extension KMSClientTypes { public enum GrantOperation: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { case creategrant case decrypt + case derivesharedsecret case describekey case encrypt case generatedatakey @@ -1303,6 +1304,7 @@ extension KMSClientTypes { return [ .creategrant, .decrypt, + .derivesharedsecret, .describekey, .encrypt, .generatedatakey, @@ -1329,6 +1331,7 @@ extension KMSClientTypes { switch self { case .creategrant: return "CreateGrant" case .decrypt: return "Decrypt" + case .derivesharedsecret: return "DeriveSharedSecret" case .describekey: return "DescribeKey" case .encrypt: return "Encrypt" case .generatedatakey: return "GenerateDataKey" @@ -1689,6 +1692,7 @@ extension KMSClientTypes { public enum KeyUsageType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { case encryptDecrypt case generateVerifyMac + case keyAgreement case signVerify case sdkUnknown(Swift.String) @@ -1696,6 +1700,7 @@ extension KMSClientTypes { return [ .encryptDecrypt, .generateVerifyMac, + .keyAgreement, .signVerify ] } @@ -1709,6 +1714,7 @@ extension KMSClientTypes { switch self { case .encryptDecrypt: return "ENCRYPT_DECRYPT" case .generateVerifyMac: return "GENERATE_VERIFY_MAC" + case .keyAgreement: return "KEY_AGREEMENT" case .signVerify: return "SIGN_VERIFY" case let .sdkUnknown(s): return s } @@ -1805,7 +1811,7 @@ public struct CreateKeyInput { /// /// /// - /// * Asymmetric RSA key pairs + /// * Asymmetric RSA key pairs (encryption and decryption -or- signing and verification) /// /// * RSA_2048 /// @@ -1816,7 +1822,7 @@ public struct CreateKeyInput { /// /// /// - /// * Asymmetric NIST-recommended elliptic curve key pairs + /// * Asymmetric NIST-recommended elliptic curve key pairs (signing and verification -or- deriving shared secrets) /// /// * ECC_NIST_P256 (secp256r1) /// @@ -1827,16 +1833,16 @@ public struct CreateKeyInput { /// /// /// - /// * Other asymmetric elliptic curve key pairs + /// * Other asymmetric elliptic curve key pairs (signing and verification) /// /// * ECC_SECG_P256K1 (secp256k1), commonly used for cryptocurrencies. /// /// /// /// - /// * SM2 key pairs (China Regions only) + /// * SM2 key pairs (encryption and decryption -or- signing and verification -or- deriving shared secrets) /// - /// * SM2 + /// * SM2 (China Regions only) public var keySpec: KMSClientTypes.KeySpec? /// Determines the [cryptographic operations](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations) for which you can use the KMS key. The default value is ENCRYPT_DECRYPT. This parameter is optional when you are creating a symmetric encryption KMS key; otherwise, it is required. You can't change the KeyUsage value after the KMS key is created. Select only one valid value. /// @@ -1844,11 +1850,13 @@ public struct CreateKeyInput { /// /// * For HMAC KMS keys (symmetric), specify GENERATE_VERIFY_MAC. /// - /// * For asymmetric KMS keys with RSA key material, specify ENCRYPT_DECRYPT or SIGN_VERIFY. + /// * For asymmetric KMS keys with RSA key pairs, specify ENCRYPT_DECRYPT or SIGN_VERIFY. /// - /// * For asymmetric KMS keys with ECC key material, specify SIGN_VERIFY. + /// * For asymmetric KMS keys with NIST-recommended elliptic curve key pairs, specify SIGN_VERIFY or KEY_AGREEMENT. /// - /// * For asymmetric KMS keys with SM2 key material (China Regions only), specify ENCRYPT_DECRYPT or SIGN_VERIFY. + /// * For asymmetric KMS keys with ECC_SECG_P256K1 key pairs specify SIGN_VERIFY. + /// + /// * For asymmetric KMS keys with SM2 key pairs (China Regions only), specify ENCRYPT_DECRYPT, SIGN_VERIFY, or KEY_AGREEMENT. public var keyUsage: KMSClientTypes.KeyUsageType? /// Creates a multi-Region primary key that you can replicate into other Amazon Web Services Regions. You cannot change this value after you create the KMS key. For a multi-Region key, set this parameter to True. For a single-Region KMS key, omit this parameter or set it to False. The default value is False. This operation supports multi-Region keys, an KMS feature that lets you create multiple interoperable KMS keys in different Amazon Web Services Regions. Because these KMS keys have the same key ID, key material, and other metadata, you can use them interchangeably to encrypt data in one Amazon Web Services Region and decrypt it in a different Amazon Web Services Region without re-encrypting the data or making a cross-Region call. For more information about multi-Region keys, see [Multi-Region keys in KMS](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) in the Key Management Service Developer Guide. This value creates a primary key, not a replica. To create a replica key, use the [ReplicateKey] operation. You can create a symmetric or asymmetric multi-Region key, and you can create a multi-Region key with imported key material. However, you cannot create a multi-Region key in a custom key store. public var multiRegion: Swift.Bool? @@ -1960,6 +1968,32 @@ extension KMSClientTypes { } } +extension KMSClientTypes { + + public enum KeyAgreementAlgorithmSpec: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case ecdh + case sdkUnknown(Swift.String) + + public static var allCases: [KeyAgreementAlgorithmSpec] { + return [ + .ecdh + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .ecdh: return "ECDH" + case let .sdkUnknown(s): return s + } + } + } +} + extension KMSClientTypes { public enum KeyManagerType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { @@ -2239,6 +2273,8 @@ extension KMSClientTypes { public var encryptionAlgorithms: [KMSClientTypes.EncryptionAlgorithmSpec]? /// Specifies whether the KMS key's key material expires. This value is present only when Origin is EXTERNAL, otherwise this value is omitted. public var expirationModel: KMSClientTypes.ExpirationModelType? + /// The key agreement algorithm used to derive a shared secret. + public var keyAgreementAlgorithms: [KMSClientTypes.KeyAgreementAlgorithmSpec]? /// The globally unique identifier for the KMS key. /// This member is required. public var keyId: Swift.String? @@ -2285,6 +2321,7 @@ extension KMSClientTypes { enabled: Swift.Bool = false, encryptionAlgorithms: [KMSClientTypes.EncryptionAlgorithmSpec]? = nil, expirationModel: KMSClientTypes.ExpirationModelType? = nil, + keyAgreementAlgorithms: [KMSClientTypes.KeyAgreementAlgorithmSpec]? = nil, keyId: Swift.String? = nil, keyManager: KMSClientTypes.KeyManagerType? = nil, keySpec: KMSClientTypes.KeySpec? = nil, @@ -2311,6 +2348,7 @@ extension KMSClientTypes { self.enabled = enabled self.encryptionAlgorithms = encryptionAlgorithms self.expirationModel = expirationModel + self.keyAgreementAlgorithms = keyAgreementAlgorithms self.keyId = keyId self.keyManager = keyManager self.keySpec = keySpec @@ -2642,7 +2680,7 @@ public struct InvalidCiphertextException: ClientRuntime.ModeledError, AWSClientR /// * The encryption algorithm or signing algorithm specified for the operation is incompatible with the type of key material in the KMS key (KeySpec). /// /// -/// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. +/// For encrypting, decrypting, re-encrypting, and generating data keys, the KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying messages, the KeyUsage must be SIGN_VERIFY. For generating and verifying message authentication codes (MACs), the KeyUsage must be GENERATE_VERIFY_MAC. For deriving key agreement secrets, the KeyUsage must be KEY_AGREEMENT. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To find the encryption or signing algorithms supported for a particular KMS key, use the [DescribeKey] operation. public struct InvalidKeyUsageException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { @@ -2864,6 +2902,85 @@ public struct DeleteImportedKeyMaterialInput { } } +public struct DeriveSharedSecretInput { + /// Checks if your request will succeed. DryRun is an optional parameter. To learn more about how to use this parameter, see [Testing your KMS API calls](https://docs.aws.amazon.com/kms/latest/developerguide/programming-dryrun.html) in the Key Management Service Developer Guide. + public var dryRun: Swift.Bool? + /// A list of grant tokens. Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved eventual consistency. For more information, see [Grant token](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token) and [Using a grant token](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token) in the Key Management Service Developer Guide. + public var grantTokens: [Swift.String]? + /// Specifies the key agreement algorithm used to derive the shared secret. The only valid value is ECDH. + /// This member is required. + public var keyAgreementAlgorithm: KMSClientTypes.KeyAgreementAlgorithmSpec? + /// Identifies an asymmetric NIST-recommended ECC or SM2 (China Regions only) KMS key. KMS uses the private key in the specified key pair to derive the shared secret. The key usage of the KMS key must be KEY_AGREEMENT. To find the KeyUsage of a KMS key, use the [DescribeKey] operation. To specify a KMS key, use its key ID, key ARN, alias name, or alias ARN. When using an alias name, prefix it with "alias/". To specify a KMS key in a different Amazon Web Services account, you must use the key ARN or alias ARN. For example: + /// + /// * Key ID: 1234abcd-12ab-34cd-56ef-1234567890ab + /// + /// * Key ARN: arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab + /// + /// * Alias name: alias/ExampleAlias + /// + /// * Alias ARN: arn:aws:kms:us-east-2:111122223333:alias/ExampleAlias + /// + /// + /// To get the key ID and key ARN for a KMS key, use [ListKeys] or [DescribeKey]. To get the alias name and alias ARN, use [ListAliases]. + /// This member is required. + public var keyId: Swift.String? + /// Specifies the public key in your peer's NIST-recommended elliptic curve (ECC) or SM2 (China Regions only) key pair. The public key must be a DER-encoded X.509 public key, also known as SubjectPublicKeyInfo (SPKI), as defined in [RFC 5280](https://tools.ietf.org/html/rfc5280). [GetPublicKey] returns the public key of an asymmetric KMS key pair in the required DER-encoded format. If you use [Amazon Web Services CLI version 1](https://docs.aws.amazon.com/cli/v1/userguide/cli-chap-welcome.html), you must provide the DER-encoded X.509 public key in a file. Otherwise, the Amazon Web Services CLI Base64-encodes the public key a second time, resulting in a ValidationException. You can specify the public key as binary data in a file using fileb (fileb://) or in-line using a Base64 encoded string. + /// This member is required. + public var publicKey: Foundation.Data? + /// A signed [attestation document](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave-how.html#term-attestdoc) from an Amazon Web Services Nitro enclave and the encryption algorithm to use with the enclave's public key. The only valid encryption algorithm is RSAES_OAEP_SHA_256. This parameter only supports attestation documents for Amazon Web Services Nitro Enclaves. To call DeriveSharedSecret for an Amazon Web Services Nitro Enclaves, use the [Amazon Web Services Nitro Enclaves SDK](https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk) to generate the attestation document and then use the Recipient parameter from any Amazon Web Services SDK to provide the attestation document for the enclave. When you use this parameter, instead of returning a plaintext copy of the shared secret, KMS encrypts the plaintext shared secret under the public key in the attestation document, and returns the resulting ciphertext in the CiphertextForRecipient field in the response. This ciphertext can be decrypted only with the private key in the enclave. The CiphertextBlob field in the response contains the encrypted shared secret derived from the KMS key specified by the KeyId parameter and public key specified by the PublicKey parameter. The SharedSecret field in the response is null or empty. For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see [How Amazon Web Services Nitro Enclaves uses KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html) in the Key Management Service Developer Guide. + public var recipient: KMSClientTypes.RecipientInfo? + + public init( + dryRun: Swift.Bool? = nil, + grantTokens: [Swift.String]? = nil, + keyAgreementAlgorithm: KMSClientTypes.KeyAgreementAlgorithmSpec? = nil, + keyId: Swift.String? = nil, + publicKey: Foundation.Data? = nil, + recipient: KMSClientTypes.RecipientInfo? = nil + ) + { + self.dryRun = dryRun + self.grantTokens = grantTokens + self.keyAgreementAlgorithm = keyAgreementAlgorithm + self.keyId = keyId + self.publicKey = publicKey + self.recipient = recipient + } +} + +public struct DeriveSharedSecretOutput { + /// The plaintext shared secret encrypted with the public key in the attestation document. This field is included in the response only when the Recipient parameter in the request includes a valid attestation document from an Amazon Web Services Nitro enclave. For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see [How Amazon Web Services Nitro Enclaves uses KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html) in the Key Management Service Developer Guide. + public var ciphertextForRecipient: Foundation.Data? + /// Identifies the key agreement algorithm used to derive the shared secret. + public var keyAgreementAlgorithm: KMSClientTypes.KeyAgreementAlgorithmSpec? + /// Identifies the KMS key used to derive the shared secret. + public var keyId: Swift.String? + /// The source of the key material for the specified KMS key. When this value is AWS_KMS, KMS created the key material. When this value is EXTERNAL, the key material was imported or the KMS key doesn't have any key material. The only valid values for DeriveSharedSecret are AWS_KMS and EXTERNAL. DeriveSharedSecret does not support KMS keys with a KeyOrigin value of AWS_CLOUDHSM or EXTERNAL_KEY_STORE. + public var keyOrigin: KMSClientTypes.OriginType? + /// The raw secret derived from the specified key agreement algorithm, private key in the asymmetric KMS key, and your peer's public key. If the response includes the CiphertextForRecipient field, the SharedSecret field is null or empty. + public var sharedSecret: Foundation.Data? + + public init( + ciphertextForRecipient: Foundation.Data? = nil, + keyAgreementAlgorithm: KMSClientTypes.KeyAgreementAlgorithmSpec? = nil, + keyId: Swift.String? = nil, + keyOrigin: KMSClientTypes.OriginType? = nil, + sharedSecret: Foundation.Data? = nil + ) + { + self.ciphertextForRecipient = ciphertextForRecipient + self.keyAgreementAlgorithm = keyAgreementAlgorithm + self.keyId = keyId + self.keyOrigin = keyOrigin + self.sharedSecret = sharedSecret + } +} + +extension DeriveSharedSecretOutput: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "DeriveSharedSecretOutput(ciphertextForRecipient: \(Swift.String(describing: ciphertextForRecipient)), keyAgreementAlgorithm: \(Swift.String(describing: keyAgreementAlgorithm)), keyId: \(Swift.String(describing: keyId)), keyOrigin: \(Swift.String(describing: keyOrigin)), sharedSecret: \"CONTENT_REDACTED\")"} +} + /// The request was rejected because the marker that specifies where pagination should next begin is not valid. public struct InvalidMarkerException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { @@ -3269,7 +3386,7 @@ public struct GenerateDataKeyPairInput { /// Determines the type of data key pair that is generated. The KMS rule that restricts the use of asymmetric RSA and SM2 KMS keys to encrypt and decrypt or to sign and verify (but not both), and the rule that permits you to use ECC KMS keys only to sign and verify, are not effective on data key pairs, which are used outside of KMS. The SM2 key spec is only available in China Regions. /// This member is required. public var keyPairSpec: KMSClientTypes.DataKeyPairSpec? - /// A signed [attestation document](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave-how.html#term-attestdoc) from an Amazon Web Services Nitro enclave and the encryption algorithm to use with the enclave's public key. The only valid encryption algorithm is RSAES_OAEP_SHA_256. This parameter only supports attestation documents for Amazon Web Services Nitro Enclaves. To include this parameter, use the [Amazon Web Services Nitro Enclaves SDK](https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk) or any Amazon Web Services SDK. When you use this parameter, instead of returning a plaintext copy of the private data key, KMS encrypts the plaintext private data key under the public key in the attestation document, and returns the resulting ciphertext in the CiphertextForRecipient field in the response. This ciphertext can be decrypted only with the private key in the enclave. The CiphertextBlob field in the response contains a copy of the private data key encrypted under the KMS key specified by the KeyId parameter. The PrivateKeyPlaintext field in the response is null or empty. For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see [How Amazon Web Services Nitro Enclaves uses KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html) in the Key Management Service Developer Guide. + /// A signed [attestation document](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave-how.html#term-attestdoc) from an Amazon Web Services Nitro enclave and the encryption algorithm to use with the enclave's public key. The only valid encryption algorithm is RSAES_OAEP_SHA_256. This parameter only supports attestation documents for Amazon Web Services Nitro Enclaves. To call DeriveSharedSecret for an Amazon Web Services Nitro Enclaves, use the [Amazon Web Services Nitro Enclaves SDK](https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk) to generate the attestation document and then use the Recipient parameter from any Amazon Web Services SDK to provide the attestation document for the enclave. When you use this parameter, instead of returning a plaintext copy of the private data key, KMS encrypts the plaintext private data key under the public key in the attestation document, and returns the resulting ciphertext in the CiphertextForRecipient field in the response. This ciphertext can be decrypted only with the private key in the enclave. The CiphertextBlob field in the response contains a copy of the private data key encrypted under the KMS key specified by the KeyId parameter. The PrivateKeyPlaintext field in the response is null or empty. For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see [How Amazon Web Services Nitro Enclaves uses KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html) in the Key Management Service Developer Guide. public var recipient: KMSClientTypes.RecipientInfo? public init( @@ -3683,7 +3800,7 @@ public struct GetParametersForImportInput { /// To get the key ID and key ARN for a KMS key, use [ListKeys] or [DescribeKey]. /// This member is required. public var keyId: Swift.String? - /// The algorithm you will use with the asymmetric public key (PublicKey) in the response to protect your key material during import. For more information, see [Select a wrapping algorithm] in the Key Management Service Developer Guide. For RSA_AES wrapping algorithms, you encrypt your key material with an AES key that you generate, then encrypt your AES key with the RSA public key from KMS. For RSAES wrapping algorithms, you encrypt your key material directly with the RSA public key from KMS. For SM2PKE wrapping algorithms, you encrypt your key material directly with the SM2 public key from KMS. The wrapping algorithms that you can use depend on the type of key material that you are importing. To import an RSA private key, you must use an RSA_AES wrapping algorithm, except in China Regions, where you must use the SM2PKE wrapping algorithm to import an RSA private key. The SM2PKE wrapping algorithm is available only in China Regions. The RSA_AES_KEY_WRAP_SHA_256 and RSA_AES_KEY_WRAP_SHA_1 wrapping algorithms are not supported in China Regions. + /// The algorithm you will use with the RSA public key (PublicKey) in the response to protect your key material during import. For more information, see [Select a wrapping algorithm] in the Key Management Service Developer Guide. For RSA_AES wrapping algorithms, you encrypt your key material with an AES key that you generate, then encrypt your AES key with the RSA public key from KMS. For RSAES wrapping algorithms, you encrypt your key material directly with the RSA public key from KMS. The wrapping algorithms that you can use depend on the type of key material that you are importing. To import an RSA private key, you must use an RSA_AES wrapping algorithm. /// /// * RSA_AES_KEY_WRAP_SHA_256 — Supported for wrapping RSA and ECC key material. /// @@ -3694,11 +3811,9 @@ public struct GetParametersForImportInput { /// * RSAES_OAEP_SHA_1 — Supported for all types of key material, except RSA key material (private key). You cannot use the RSAES_OAEP_SHA_1 wrapping algorithm with the RSA_2048 wrapping key spec to wrap ECC_NIST_P521 key material. /// /// * RSAES_PKCS1_V1_5 (Deprecated) — As of October 10, 2023, KMS does not support the RSAES_PKCS1_V1_5 wrapping algorithm. - /// - /// * SM2PKE (China Regions only) — supported for wrapping RSA, ECC, and SM2 key material. /// This member is required. public var wrappingAlgorithm: KMSClientTypes.AlgorithmSpec? - /// The type of public key to return in the response. You will use this wrapping key with the specified wrapping algorithm to protect your key material during import. Use the longest wrapping key that is practical. You cannot use an RSA_2048 public key to directly wrap an ECC_NIST_P521 private key. Instead, use an RSA_AES wrapping algorithm or choose a longer RSA public key. The SM2 wrapping key spec is available only in China Regions. + /// The type of RSA public key to return in the response. You will use this wrapping key with the specified wrapping algorithm to protect your key material during import. Use the longest RSA wrapping key that is practical. You cannot use an RSA_2048 public key to directly wrap an ECC_NIST_P521 private key. Instead, use an RSA_AES wrapping algorithm or choose a longer RSA public key. /// This member is required. public var wrappingKeySpec: KMSClientTypes.WrappingKeySpec? @@ -3777,11 +3892,13 @@ public struct GetPublicKeyOutput { public var customerMasterKeySpec: KMSClientTypes.CustomerMasterKeySpec? /// The encryption algorithms that KMS supports for this key. This information is critical. If a public key encrypts data outside of KMS by using an unsupported encryption algorithm, the ciphertext cannot be decrypted. This field appears in the response only when the KeyUsage of the public key is ENCRYPT_DECRYPT. public var encryptionAlgorithms: [KMSClientTypes.EncryptionAlgorithmSpec]? + /// The key agreement algorithm used to derive a shared secret. This field is present only when the KMS key has a KeyUsage value of KEY_AGREEMENT. + public var keyAgreementAlgorithms: [KMSClientTypes.KeyAgreementAlgorithmSpec]? /// The Amazon Resource Name ([key ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN)) of the asymmetric KMS key from which the public key was downloaded. public var keyId: Swift.String? /// The type of the of the public key that was downloaded. public var keySpec: KMSClientTypes.KeySpec? - /// The permitted use of the public key. Valid values are ENCRYPT_DECRYPT or SIGN_VERIFY. This information is critical. If a public key with SIGN_VERIFY key usage encrypts data outside of KMS, the ciphertext cannot be decrypted. + /// The permitted use of the public key. Valid values for asymmetric key pairs are ENCRYPT_DECRYPT, SIGN_VERIFY, and KEY_AGREEMENT. This information is critical. For example, if a public key with SIGN_VERIFY key usage encrypts data outside of KMS, the ciphertext cannot be decrypted. public var keyUsage: KMSClientTypes.KeyUsageType? /// The exported public key. The value is a DER-encoded X.509 public key, also known as SubjectPublicKeyInfo (SPKI), as defined in [RFC 5280](https://tools.ietf.org/html/rfc5280). When you use the HTTP API or the Amazon Web Services CLI, the value is Base64-encoded. Otherwise, it is not Base64-encoded. public var publicKey: Foundation.Data? @@ -3791,6 +3908,7 @@ public struct GetPublicKeyOutput { public init( customerMasterKeySpec: KMSClientTypes.CustomerMasterKeySpec? = nil, encryptionAlgorithms: [KMSClientTypes.EncryptionAlgorithmSpec]? = nil, + keyAgreementAlgorithms: [KMSClientTypes.KeyAgreementAlgorithmSpec]? = nil, keyId: Swift.String? = nil, keySpec: KMSClientTypes.KeySpec? = nil, keyUsage: KMSClientTypes.KeyUsageType? = nil, @@ -3800,6 +3918,7 @@ public struct GetPublicKeyOutput { { self.customerMasterKeySpec = customerMasterKeySpec self.encryptionAlgorithms = encryptionAlgorithms + self.keyAgreementAlgorithms = keyAgreementAlgorithms self.keyId = keyId self.keySpec = keySpec self.keyUsage = keyUsage @@ -5283,6 +5402,13 @@ extension DeleteImportedKeyMaterialInput { } } +extension DeriveSharedSecretInput { + + static func urlPathProvider(_ value: DeriveSharedSecretInput) -> Swift.String? { + return "/" + } +} + extension DescribeCustomKeyStoresInput { static func urlPathProvider(_ value: DescribeCustomKeyStoresInput) -> Swift.String? { @@ -5690,6 +5816,19 @@ extension DeleteImportedKeyMaterialInput { } } +extension DeriveSharedSecretInput { + + static func write(value: DeriveSharedSecretInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["DryRun"].write(value.dryRun) + try writer["GrantTokens"].writeList(value.grantTokens, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["KeyAgreementAlgorithm"].write(value.keyAgreementAlgorithm) + try writer["KeyId"].write(value.keyId) + try writer["PublicKey"].write(value.publicKey) + try writer["Recipient"].write(value.recipient, with: KMSClientTypes.RecipientInfo.write(value:to:)) + } +} + extension DescribeCustomKeyStoresInput { static func write(value: DescribeCustomKeyStoresInput?, to writer: SmithyJSON.Writer) throws { @@ -6235,6 +6374,22 @@ extension DeleteImportedKeyMaterialOutput { } } +extension DeriveSharedSecretOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DeriveSharedSecretOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = DeriveSharedSecretOutput() + value.ciphertextForRecipient = try reader["CiphertextForRecipient"].readIfPresent() + value.keyAgreementAlgorithm = try reader["KeyAgreementAlgorithm"].readIfPresent() + value.keyId = try reader["KeyId"].readIfPresent() + value.keyOrigin = try reader["KeyOrigin"].readIfPresent() + value.sharedSecret = try reader["SharedSecret"].readIfPresent() + return value + } +} + extension DescribeCustomKeyStoresOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DescribeCustomKeyStoresOutput { @@ -6450,6 +6605,7 @@ extension GetPublicKeyOutput { var value = GetPublicKeyOutput() value.customerMasterKeySpec = try reader["CustomerMasterKeySpec"].readIfPresent() value.encryptionAlgorithms = try reader["EncryptionAlgorithms"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosureBox().read(from:), memberNodeInfo: "member", isFlattened: false) + value.keyAgreementAlgorithms = try reader["KeyAgreementAlgorithms"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosureBox().read(from:), memberNodeInfo: "member", isFlattened: false) value.keyId = try reader["KeyId"].readIfPresent() value.keySpec = try reader["KeySpec"].readIfPresent() value.keyUsage = try reader["KeyUsage"].readIfPresent() @@ -6937,6 +7093,28 @@ enum DeleteImportedKeyMaterialOutputError { } } +enum DeriveSharedSecretOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.AWSJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "DependencyTimeout": return try DependencyTimeoutException.makeError(baseError: baseError) + case "Disabled": return try DisabledException.makeError(baseError: baseError) + case "DryRunOperation": return try DryRunOperationException.makeError(baseError: baseError) + case "InvalidGrantToken": return try InvalidGrantTokenException.makeError(baseError: baseError) + case "InvalidKeyUsage": return try InvalidKeyUsageException.makeError(baseError: baseError) + case "KeyUnavailable": return try KeyUnavailableException.makeError(baseError: baseError) + case "KMSInternal": return try KMSInternalException.makeError(baseError: baseError) + case "KMSInvalidStateException": return try KMSInvalidStateException.makeError(baseError: baseError) + case "NotFound": return try NotFoundException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum DescribeCustomKeyStoresOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -8428,6 +8606,7 @@ extension KMSClientTypes.KeyMetadata { value.keySpec = try reader["KeySpec"].readIfPresent() value.encryptionAlgorithms = try reader["EncryptionAlgorithms"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosureBox().read(from:), memberNodeInfo: "member", isFlattened: false) value.signingAlgorithms = try reader["SigningAlgorithms"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosureBox().read(from:), memberNodeInfo: "member", isFlattened: false) + value.keyAgreementAlgorithms = try reader["KeyAgreementAlgorithms"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosureBox().read(from:), memberNodeInfo: "member", isFlattened: false) value.multiRegion = try reader["MultiRegion"].readIfPresent() value.multiRegionConfiguration = try reader["MultiRegionConfiguration"].readIfPresent(with: KMSClientTypes.MultiRegionConfiguration.read(from:)) value.pendingDeletionWindowInDays = try reader["PendingDeletionWindowInDays"].readIfPresent() diff --git a/Sources/Services/AWSLocation/Sources/AWSLocation/LocationClient.swift b/Sources/Services/AWSLocation/Sources/AWSLocation/LocationClient.swift index 840e4029aff..1f91d3f462a 100644 --- a/Sources/Services/AWSLocation/Sources/AWSLocation/LocationClient.swift +++ b/Sources/Services/AWSLocation/Sources/AWSLocation/LocationClient.swift @@ -1599,6 +1599,58 @@ extension LocationClient { return result } + /// Performs the `ForecastGeofenceEvents` operation on the `LocationService` service. + /// + /// Evaluates device positions against geofence geometries from a given geofence collection. The event forecasts three states for which a device can be in relative to a geofence: ENTER: If a device is outside of a geofence, but would breach the fence if the device is moving at its current speed within time horizon window. EXIT: If a device is inside of a geofence, but would breach the fence if the device is moving at its current speed within time horizon window. IDLE: If a device is inside of a geofence, and the device is not moving. + /// + /// - Parameter ForecastGeofenceEventsInput : [no documentation found] + /// + /// - Returns: `ForecastGeofenceEventsOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The request was denied because of insufficient access or permissions. Check with an administrator to verify your permissions. + /// - `InternalServerException` : The request has failed to process because of an unknown server error, exception, or failure. + /// - `ResourceNotFoundException` : The resource that you've entered was not found in your AWS account. + /// - `ThrottlingException` : The request was denied because of request throttling. + /// - `ValidationException` : The input failed to meet the constraints specified by the AWS service. + public func forecastGeofenceEvents(input: ForecastGeofenceEventsInput) async throws -> ForecastGeofenceEventsOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "forecastGeofenceEvents") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "geo") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "forecastGeofenceEvents") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ForecastGeofenceEventsInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware(hostPrefix: "geofencing.")) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: ForecastGeofenceEventsInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ForecastGeofenceEventsOutput.httpOutput(from:), ForecastGeofenceEventsOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `GetDevicePosition` operation on the `LocationService` service. /// /// Retrieves a device's most recent position according to its sample time. Device positions are deleted after 30 days. @@ -1702,7 +1754,7 @@ extension LocationClient { /// Performs the `GetGeofence` operation on the `LocationService` service. /// - /// Retrieves the geofence details from a geofence collection. + /// Retrieves the geofence details from a geofence collection. The returned geometry will always match the geometry format used when the geofence was created. /// /// - Parameter GetGeofenceInput : [no documentation found] /// @@ -3141,4 +3193,56 @@ extension LocationClient { return result } + /// Performs the `VerifyDevicePosition` operation on the `LocationService` service. + /// + /// Verifies the integrity of the device's position by determining if it was reported behind a proxy, and by comparing it to an inferred position estimated based on the device's state. + /// + /// - Parameter VerifyDevicePositionInput : [no documentation found] + /// + /// - Returns: `VerifyDevicePositionOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : The request was denied because of insufficient access or permissions. Check with an administrator to verify your permissions. + /// - `InternalServerException` : The request has failed to process because of an unknown server error, exception, or failure. + /// - `ResourceNotFoundException` : The resource that you've entered was not found in your AWS account. + /// - `ThrottlingException` : The request was denied because of request throttling. + /// - `ValidationException` : The input failed to meet the constraints specified by the AWS service. + public func verifyDevicePosition(input: VerifyDevicePositionInput) async throws -> VerifyDevicePositionOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "verifyDevicePosition") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "geo") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "verifyDevicePosition") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(VerifyDevicePositionInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware(hostPrefix: "tracking.")) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: VerifyDevicePositionInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(VerifyDevicePositionOutput.httpOutput(from:), VerifyDevicePositionOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + } diff --git a/Sources/Services/AWSLocation/Sources/AWSLocation/Models.swift b/Sources/Services/AWSLocation/Sources/AWSLocation/Models.swift index 781d0476204..5c938cd04b2 100644 --- a/Sources/Services/AWSLocation/Sources/AWSLocation/Models.swift +++ b/Sources/Services/AWSLocation/Sources/AWSLocation/Models.swift @@ -1157,19 +1157,23 @@ extension LocationClientTypes.Circle: Swift.CustomDebugStringConvertible { } extension LocationClientTypes { - /// Contains the geofence geometry details. A geofence geometry is made up of either a polygon or a circle. Can be either a polygon or a circle. Including both will return a validation error. Amazon Location doesn't currently support polygons with holes, multipolygons, polygons that are wound clockwise, or that cross the antimeridian. + /// Contains the geofence geometry details. A geofence geometry is made up of either a polygon or a circle. Can be a polygon, a circle or a polygon encoded in Geobuf format. Including multiple selections will return a validation error. Amazon Location doesn't currently support polygons with holes, multipolygons, polygons that are wound clockwise, or that cross the antimeridian. public struct GeofenceGeometry { /// A circle on the earth, as defined by a center point and a radius. public var circle: LocationClientTypes.Circle? + /// Geobuf is a compact binary encoding for geographic data that provides lossless compression of GeoJSON polygons. The Geobuf must be Base64-encoded. A polygon in Geobuf format can have up to 100,000 vertices. + public var geobuf: Foundation.Data? /// A polygon is a list of linear rings which are each made up of a list of vertices. Each vertex is a 2-dimensional point of the form: [longitude, latitude]. This is represented as an array of doubles of length 2 (so [double, double]). An array of 4 or more vertices, where the first and last vertex are the same (to form a closed boundary), is called a linear ring. The linear ring vertices must be listed in counter-clockwise order around the ring’s interior. The linear ring is represented as an array of vertices, or an array of arrays of doubles ([[double, double], ...]). A geofence consists of a single linear ring. To allow for future expansion, the Polygon parameter takes an array of linear rings, which is represented as an array of arrays of arrays of doubles ([[[double, double], ...], ...]). A linear ring for use in geofences can consist of between 4 and 1,000 vertices. public var polygon: [[[Swift.Double]]]? public init( circle: LocationClientTypes.Circle? = nil, + geobuf: Foundation.Data? = nil, polygon: [[[Swift.Double]]]? = nil ) { self.circle = circle + self.geobuf = geobuf self.polygon = polygon } } @@ -1178,7 +1182,7 @@ extension LocationClientTypes { extension LocationClientTypes.GeofenceGeometry: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "GeofenceGeometry(polygon: \(Swift.String(describing: polygon)), circle: \"CONTENT_REDACTED\")"} + "GeofenceGeometry(polygon: \(Swift.String(describing: polygon)), circle: \"CONTENT_REDACTED\", geobuf: \"CONTENT_REDACTED\")"} } extension LocationClientTypes { @@ -1189,7 +1193,7 @@ extension LocationClientTypes { public var geofenceId: Swift.String? /// Associates one of more properties with the geofence. A property is a key-value pair stored with the geofence and added to any geofence event triggered with that geofence. Format: "key" : "value" public var geofenceProperties: [Swift.String: Swift.String]? - /// Contains the details of the position of the geofence. Can be either a polygon or a circle. Including both will return a validation error. Each [ geofence polygon](https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html) can have a maximum of 1,000 vertices. + /// Contains the details to specify the position of the geofence. Can be a polygon, a circle or a polygon encoded in Geobuf format. Including multiple selections will return a validation error. The [ geofence polygon](https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html) format supports a maximum of 1,000 vertices. The [Geofence geobuf](https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html) format supports a maximum of 100,000 vertices. /// This member is required. public var geometry: LocationClientTypes.GeofenceGeometry? @@ -2174,6 +2178,135 @@ public struct CalculateRouteMatrixOutput { } } +extension LocationClientTypes { + /// LTE local identification information (local ID). + public struct LteLocalId { + /// E-UTRA (Evolved Universal Terrestrial Radio Access) absolute radio frequency channel number (EARFCN). + /// This member is required. + public var earfcn: Swift.Int + /// Physical Cell ID (PCI). + /// This member is required. + public var pci: Swift.Int + + public init( + earfcn: Swift.Int = 0, + pci: Swift.Int = 0 + ) + { + self.earfcn = earfcn + self.pci = pci + } + } + +} + +extension LocationClientTypes { + /// LTE network measurements. + public struct LteNetworkMeasurements { + /// E-UTRAN Cell Identifier (ECI). + /// This member is required. + public var cellId: Swift.Int + /// E-UTRA (Evolved Universal Terrestrial Radio Access) absolute radio frequency channel number (EARFCN). + /// This member is required. + public var earfcn: Swift.Int + /// Physical Cell ID (PCI). + /// This member is required. + public var pci: Swift.Int + /// Signal power of the reference signal received, measured in dBm (decibel-milliwatts). + public var rsrp: Swift.Int? + /// Signal quality of the reference Signal received, measured in decibels (dB). + public var rsrq: Swift.Float? + + public init( + cellId: Swift.Int = 0, + earfcn: Swift.Int = 0, + pci: Swift.Int = 0, + rsrp: Swift.Int? = nil, + rsrq: Swift.Float? = nil + ) + { + self.cellId = cellId + self.earfcn = earfcn + self.pci = pci + self.rsrp = rsrp + self.rsrq = rsrq + } + } + +} + +extension LocationClientTypes { + /// Details about the Long-Term Evolution (LTE) network. + public struct LteCellDetails { + /// The E-UTRAN Cell Identifier (ECI). + /// This member is required. + public var cellId: Swift.Int + /// The LTE local identification information (local ID). + public var localId: LocationClientTypes.LteLocalId? + /// The Mobile Country Code (MCC). + /// This member is required. + public var mcc: Swift.Int? + /// The Mobile Network Code (MNC) + /// This member is required. + public var mnc: Swift.Int? + /// The network measurements. + public var networkMeasurements: [LocationClientTypes.LteNetworkMeasurements]? + /// Indicates whether the LTE object is capable of supporting NR (new radio). + public var nrCapable: Swift.Bool? + /// Signal power of the reference signal received, measured in decibel-milliwatts (dBm). + public var rsrp: Swift.Int? + /// Signal quality of the reference Signal received, measured in decibels (dB). + public var rsrq: Swift.Float? + /// LTE Tracking Area Code (TAC). + public var tac: Swift.Int? + /// Timing Advance (TA). + public var timingAdvance: Swift.Int? + + public init( + cellId: Swift.Int = 0, + localId: LocationClientTypes.LteLocalId? = nil, + mcc: Swift.Int? = nil, + mnc: Swift.Int? = nil, + networkMeasurements: [LocationClientTypes.LteNetworkMeasurements]? = nil, + nrCapable: Swift.Bool? = nil, + rsrp: Swift.Int? = nil, + rsrq: Swift.Float? = nil, + tac: Swift.Int? = nil, + timingAdvance: Swift.Int? = nil + ) + { + self.cellId = cellId + self.localId = localId + self.mcc = mcc + self.mnc = mnc + self.networkMeasurements = networkMeasurements + self.nrCapable = nrCapable + self.rsrp = rsrp + self.rsrq = rsrq + self.tac = tac + self.timingAdvance = timingAdvance + } + } + +} + +extension LocationClientTypes { + /// The cellular network communication infrastructure that the device uses. + public struct CellSignals { + /// Information about the Long-Term Evolution (LTE) network the device is connected to. + /// This member is required. + public var lteCellDetails: [LocationClientTypes.LteCellDetails]? + + public init( + lteCellDetails: [LocationClientTypes.LteCellDetails]? = nil + ) + { + self.lteCellDetails = lteCellDetails + } + } + +} + public struct CreateGeofenceCollectionInput { /// A custom name for the geofence collection. Requirements: /// @@ -2245,13 +2378,13 @@ public struct CreateGeofenceCollectionOutput { extension LocationClientTypes { /// Specifies the map tile style selected from an available provider. public struct MapConfiguration { - /// Specifies the custom layers for the style. Leave unset to not enable any custom layer, or, for styles that support custom layers, you can enable layer(s), such as POI layer for the VectorEsriNavigation style. Default is unset. Currenlty only VectorEsriNavigation supports CustomLayers. For more information, see [Custom Layers](https://docs.aws.amazon.com/location/latest/developerguide/map-concepts.html#map-custom-layers). + /// Specifies the custom layers for the style. Leave unset to not enable any custom layer, or, for styles that support custom layers, you can enable layer(s), such as POI layer for the VectorEsriNavigation style. Default is unset. Not all map resources or styles support custom layers. See Custom Layers for more information. public var customLayers: [Swift.String]? /// Specifies the political view for the style. Leave unset to not use a political view, or, for styles that support specific political views, you can choose a view, such as IND for the Indian view. Default is unset. Not all map resources or styles support political view styles. See [Political views](https://docs.aws.amazon.com/location/latest/developerguide/map-concepts.html#political-views) for more information. public var politicalView: Swift.String? /// Specifies the map style selected from an available data provider. Valid [Esri map styles](https://docs.aws.amazon.com/location/latest/developerguide/esri.html): /// - /// * VectorEsriNavigation – The Esri Navigation map style, which provides a detailed basemap for the world symbolized with a custom navigation map style that's designed for use during the day in mobile devices. It also includes a richer set of places, such as shops, services, restaurants, attractions, and other points of interest. Enable the POI layer by setting it in CustomLayers to leverage the additional places data. + /// * VectorEsriDarkGrayCanvas – The Esri Dark Gray Canvas map style. A vector basemap with a dark gray, neutral background with minimal colors, labels, and features that's designed to draw attention to your thematic content. /// /// * RasterEsriImagery – The Esri Imagery map style. A raster basemap that provides one meter or better satellite and aerial imagery in many parts of the world and lower resolution satellite imagery worldwide. /// @@ -2261,21 +2394,21 @@ extension LocationClientTypes { /// /// * VectorEsriStreets – The Esri Street Map style, which provides a detailed vector basemap for the world symbolized with a classic Esri street map style. The vector tile layer is similar in content and style to the World Street Map raster map. /// - /// * VectorEsriDarkGrayCanvas – The Esri Dark Gray Canvas map style. A vector basemap with a dark gray, neutral background with minimal colors, labels, and features that's designed to draw attention to your thematic content. + /// * VectorEsriNavigation – The Esri Navigation map style, which provides a detailed basemap for the world symbolized with a custom navigation map style that's designed for use during the day in mobile devices. /// /// /// Valid [HERE Technologies map styles](https://docs.aws.amazon.com/location/latest/developerguide/HERE.html): /// + /// * VectorHereContrast – The HERE Contrast (Berlin) map style is a high contrast detailed base map of the world that blends 3D and 2D rendering. The VectorHereContrast style has been renamed from VectorHereBerlin. VectorHereBerlin has been deprecated, but will continue to work in applications that use it. + /// /// * VectorHereExplore – A default HERE map style containing a neutral, global map and its features including roads, buildings, landmarks, and water features. It also now includes a fully designed map of Japan. /// + /// * VectorHereExploreTruck – A global map containing truck restrictions and attributes (e.g. width / height / HAZMAT) symbolized with highlighted segments and icons on top of HERE Explore to support use cases within transport and logistics. + /// /// * RasterHereExploreSatellite – A global map containing high resolution satellite imagery. /// /// * HybridHereExploreSatellite – A global map displaying the road network, street names, and city labels over satellite imagery. This style will automatically retrieve both raster and vector tiles, and your charges will be based on total tiles retrieved. Hybrid styles use both vector and raster tiles when rendering the map that you see. This means that more tiles are retrieved than when using either vector or raster tiles alone. Your charges will include all tiles retrieved. /// - /// * VectorHereContrast – The HERE Contrast (Berlin) map style is a high contrast detailed base map of the world that blends 3D and 2D rendering. The VectorHereContrast style has been renamed from VectorHereBerlin. VectorHereBerlin has been deprecated, but will continue to work in applications that use it. - /// - /// * VectorHereExploreTruck – A global map containing truck restrictions and attributes (e.g. width / height / HAZMAT) symbolized with highlighted segments and icons on top of HERE Explore to support use cases within transport and logistics. - /// /// /// Valid [GrabMaps map styles](https://docs.aws.amazon.com/location/latest/developerguide/grab.html): /// @@ -3154,6 +3287,76 @@ public struct DescribeTrackerOutput { } } +extension LocationClientTypes { + /// Wi-Fi access point. + public struct WiFiAccessPoint { + /// Medium access control address (Mac). + /// This member is required. + public var macAddress: Swift.String? + /// Received signal strength (dBm) of the WLAN measurement data. + /// This member is required. + public var rss: Swift.Int? + + public init( + macAddress: Swift.String? = nil, + rss: Swift.Int? = nil + ) + { + self.macAddress = macAddress + self.rss = rss + } + } + +} + +extension LocationClientTypes { + /// The device's position, IP address, and Wi-Fi access points. + public struct DeviceState { + /// Defines the level of certainty of the position. + public var accuracy: LocationClientTypes.PositionalAccuracy? + /// The cellular network infrastructure that the device is connected to. + public var cellSignals: LocationClientTypes.CellSignals? + /// The device identifier. + /// This member is required. + public var deviceId: Swift.String? + /// The device's Ipv4 address. + public var ipv4Address: Swift.String? + /// The last known device position. + /// This member is required. + public var position: [Swift.Double]? + /// The timestamp at which the device's position was determined. Uses [ ISO 8601 ](https://www.iso.org/iso-8601-date-and-time-format.html) format: YYYY-MM-DDThh:mm:ss.sssZ. + /// This member is required. + public var sampleTime: Foundation.Date? + /// The Wi-Fi access points the device is using. + public var wiFiAccessPoints: [LocationClientTypes.WiFiAccessPoint]? + + public init( + accuracy: LocationClientTypes.PositionalAccuracy? = nil, + cellSignals: LocationClientTypes.CellSignals? = nil, + deviceId: Swift.String? = nil, + ipv4Address: Swift.String? = nil, + position: [Swift.Double]? = nil, + sampleTime: Foundation.Date? = nil, + wiFiAccessPoints: [LocationClientTypes.WiFiAccessPoint]? = nil + ) + { + self.accuracy = accuracy + self.cellSignals = cellSignals + self.deviceId = deviceId + self.ipv4Address = ipv4Address + self.position = position + self.sampleTime = sampleTime + self.wiFiAccessPoints = wiFiAccessPoints + } + } + +} + +extension LocationClientTypes.DeviceState: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "DeviceState(accuracy: \(Swift.String(describing: accuracy)), cellSignals: \(Swift.String(describing: cellSignals)), deviceId: \(Swift.String(describing: deviceId)), ipv4Address: \(Swift.String(describing: ipv4Address)), sampleTime: \(Swift.String(describing: sampleTime)), wiFiAccessPoints: \(Swift.String(describing: wiFiAccessPoints)), position: \"CONTENT_REDACTED\")"} +} + public struct DisassociateTrackerConsumerInput { /// The Amazon Resource Name (ARN) for the geofence collection to be disassociated from the tracker resource. Used when you need to specify a resource across all Amazon Web Services. /// @@ -3179,6 +3382,211 @@ public struct DisassociateTrackerConsumerOutput { public init() { } } +extension LocationClientTypes { + + public enum ForecastedGeofenceEventType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + /// This event type signifies that a device is forecasted to enter the geofence + case enter + /// This event type signifies that a device is forecasted to exit the geofence + case exit + /// This event type signifies that a device is stationary in the geofence and an exit/enter cannot be forecasted + case idle + case sdkUnknown(Swift.String) + + public static var allCases: [ForecastedGeofenceEventType] { + return [ + .enter, + .exit, + .idle + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .enter: return "ENTER" + case .exit: return "EXIT" + case .idle: return "IDLE" + case let .sdkUnknown(s): return s + } + } + } +} + +extension LocationClientTypes { + /// A forecasted event represents a geofence event in relation to the requested device state, that may occur given the provided device state and time horizon. + public struct ForecastedEvent { + /// The forecasted event identifier. + /// This member is required. + public var eventId: Swift.String? + /// The event type, forecasting three states for which a device can be in relative to a geofence: ENTER: If a device is outside of a geofence, but would breach the fence if the device is moving at its current speed within time horizon window. EXIT: If a device is inside of a geofence, but would breach the fence if the device is moving at its current speed within time horizon window. IDLE: If a device is inside of a geofence, and the device is not moving. + /// This member is required. + public var eventType: LocationClientTypes.ForecastedGeofenceEventType? + /// The forecasted time the device will breach the geofence in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format: YYYY-MM-DDThh:mm:ss.sssZ + public var forecastedBreachTime: Foundation.Date? + /// The geofence identifier pertaining to the forecasted event. + /// This member is required. + public var geofenceId: Swift.String? + /// The geofence properties. + public var geofenceProperties: [Swift.String: Swift.String]? + /// Indicates if the device is located within the geofence. + /// This member is required. + public var isDeviceInGeofence: Swift.Bool? + /// The closest distance from the device's position to the geofence. + /// This member is required. + public var nearestDistance: Swift.Double + + public init( + eventId: Swift.String? = nil, + eventType: LocationClientTypes.ForecastedGeofenceEventType? = nil, + forecastedBreachTime: Foundation.Date? = nil, + geofenceId: Swift.String? = nil, + geofenceProperties: [Swift.String: Swift.String]? = nil, + isDeviceInGeofence: Swift.Bool? = nil, + nearestDistance: Swift.Double = 0.0 + ) + { + self.eventId = eventId + self.eventType = eventType + self.forecastedBreachTime = forecastedBreachTime + self.geofenceId = geofenceId + self.geofenceProperties = geofenceProperties + self.isDeviceInGeofence = isDeviceInGeofence + self.nearestDistance = nearestDistance + } + } + +} + +extension LocationClientTypes.ForecastedEvent: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "ForecastedEvent(eventId: \(Swift.String(describing: eventId)), eventType: \(Swift.String(describing: eventType)), forecastedBreachTime: \(Swift.String(describing: forecastedBreachTime)), geofenceId: \(Swift.String(describing: geofenceId)), isDeviceInGeofence: \(Swift.String(describing: isDeviceInGeofence)), nearestDistance: \(Swift.String(describing: nearestDistance)), geofenceProperties: \"CONTENT_REDACTED\")"} +} + +extension LocationClientTypes { + /// The device's position, IP address, and WiFi access points. + public struct ForecastGeofenceEventsDeviceState { + /// The device's position. + /// This member is required. + public var position: [Swift.Double]? + /// The device's speed. + public var speed: Swift.Double? + + public init( + position: [Swift.Double]? = nil, + speed: Swift.Double? = nil + ) + { + self.position = position + self.speed = speed + } + } + +} + +extension LocationClientTypes.ForecastGeofenceEventsDeviceState: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "ForecastGeofenceEventsDeviceState(speed: \(Swift.String(describing: speed)), position: \"CONTENT_REDACTED\")"} +} + +extension LocationClientTypes { + + public enum SpeedUnit: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case kilometersperhour + case milesperhour + case sdkUnknown(Swift.String) + + public static var allCases: [SpeedUnit] { + return [ + .kilometersperhour, + .milesperhour + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .kilometersperhour: return "KilometersPerHour" + case .milesperhour: return "MilesPerHour" + case let .sdkUnknown(s): return s + } + } + } +} + +public struct ForecastGeofenceEventsInput { + /// The name of the geofence collection. + /// This member is required. + public var collectionName: Swift.String? + /// The device's state, including current position and speed. + /// This member is required. + public var deviceState: LocationClientTypes.ForecastGeofenceEventsDeviceState? + /// The distance unit used for the NearestDistance property returned in a forecasted event. The measurement system must match for DistanceUnit and SpeedUnit; if Kilometers is specified for DistanceUnit, then SpeedUnit must be KilometersPerHour. Default Value: Kilometers + public var distanceUnit: LocationClientTypes.DistanceUnit? + /// An optional limit for the number of resources returned in a single call. Default value: 20 + public var maxResults: Swift.Int? + /// The pagination token specifying which page of results to return in the response. If no token is provided, the default page is the first page. Default value: null + public var nextToken: Swift.String? + /// The speed unit for the device captured by the device state. The measurement system must match for DistanceUnit and SpeedUnit; if Kilometers is specified for DistanceUnit, then SpeedUnit must be KilometersPerHour. Default Value: KilometersPerHour. + public var speedUnit: LocationClientTypes.SpeedUnit? + /// Specifies the time horizon in minutes for the forecasted events. + public var timeHorizonMinutes: Swift.Double? + + public init( + collectionName: Swift.String? = nil, + deviceState: LocationClientTypes.ForecastGeofenceEventsDeviceState? = nil, + distanceUnit: LocationClientTypes.DistanceUnit? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + speedUnit: LocationClientTypes.SpeedUnit? = nil, + timeHorizonMinutes: Swift.Double? = nil + ) + { + self.collectionName = collectionName + self.deviceState = deviceState + self.distanceUnit = distanceUnit + self.maxResults = maxResults + self.nextToken = nextToken + self.speedUnit = speedUnit + self.timeHorizonMinutes = timeHorizonMinutes + } +} + +public struct ForecastGeofenceEventsOutput { + /// The distance unit for the forecasted events. + /// This member is required. + public var distanceUnit: LocationClientTypes.DistanceUnit? + /// The list of forecasted events. + /// This member is required. + public var forecastedEvents: [LocationClientTypes.ForecastedEvent]? + /// The pagination token specifying which page of results to return in the response. If no token is provided, the default page is the first page. + public var nextToken: Swift.String? + /// The speed unit for the forecasted events. + /// This member is required. + public var speedUnit: LocationClientTypes.SpeedUnit? + + public init( + distanceUnit: LocationClientTypes.DistanceUnit? = nil, + forecastedEvents: [LocationClientTypes.ForecastedEvent]? = nil, + nextToken: Swift.String? = nil, + speedUnit: LocationClientTypes.SpeedUnit? = nil + ) + { + self.distanceUnit = distanceUnit + self.forecastedEvents = forecastedEvents + self.nextToken = nextToken + self.speedUnit = speedUnit + } +} + public struct ListTagsForResourceInput { /// The Amazon Resource Name (ARN) of the resource whose tags you want to retrieve. /// @@ -3357,7 +3765,7 @@ public struct ListGeofenceCollectionsInput { } extension LocationClientTypes { - /// Contains the geofence collection details. + /// Contains the geofence collection details. The returned geometry will always match the geometry format used when the geofence was created. public struct ListGeofenceCollectionsResponseEntry { /// The name of the geofence collection. /// This member is required. @@ -3427,7 +3835,7 @@ public struct ListGeofencesInput { } extension LocationClientTypes { - /// Contains a list of geofences stored in a given geofence collection. + /// Contains a list of geofences stored in a given geofence collection. The returned geometry will always match the geometry format used when the geofence was created. public struct ListGeofenceResponseEntry { /// The timestamp for when the geofence was stored in a geofence collection in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format: YYYY-MM-DDThh:mm:ss.sssZ /// This member is required. @@ -3508,7 +3916,7 @@ public struct PutGeofenceInput { public var geofenceId: Swift.String? /// Associates one of more properties with the geofence. A property is a key-value pair stored with the geofence and added to any geofence event triggered with that geofence. Format: "key" : "value" public var geofenceProperties: [Swift.String: Swift.String]? - /// Contains the details to specify the position of the geofence. Can be either a polygon or a circle. Including both will return a validation error. Each [ geofence polygon](https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html) can have a maximum of 1,000 vertices. + /// Contains the details to specify the position of the geofence. Can be a polygon, a circle or a polygon encoded in Geobuf format. Including multiple selections will return a validation error. The [ geofence polygon](https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html) format supports a maximum of 1,000 vertices. The [Geofence Geobuf](https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html) format supports a maximum of 100,000 vertices. /// This member is required. public var geometry: LocationClientTypes.GeofenceGeometry? @@ -3624,7 +4032,7 @@ public struct GetDevicePositionOutput { public var position: [Swift.Double]? /// The properties associated with the position. public var positionProperties: [Swift.String: Swift.String]? - /// The timestamp for when the tracker resource received the device position in [ ISO 8601 ](https://www.iso.org/iso-8601-date-and-time-format.html) format: YYYY-MM-DDThh:mm:ss.sssZ. + /// The timestamp for when the tracker resource received the device position. Uses [ ISO 8601 ](https://www.iso.org/iso-8601-date-and-time-format.html) format: YYYY-MM-DDThh:mm:ss.sssZ. /// This member is required. public var receivedTime: Foundation.Date? /// The timestamp at which the device's position was determined. Uses [ ISO 8601 ](https://www.iso.org/iso-8601-date-and-time-format.html) format: YYYY-MM-DDThh:mm:ss.sssZ. @@ -3720,7 +4128,7 @@ public struct GetMapGlyphsInput { /// /// * VectorEsriStreets – Arial Regular | Arial Italic | Arial Bold /// - /// * VectorEsriNavigation – Arial Regular | Arial Italic | Arial Bold | Arial Unicode MS Bold | Arial Unicode MS Regular + /// * VectorEsriNavigation – Arial Regular | Arial Italic | Arial Bold /// /// /// Valid font stacks for [HERE Technologies](https://docs.aws.amazon.com/location/latest/developerguide/HERE.html) styles: @@ -3956,17 +4364,7 @@ public struct GetPlaceInput { public var key: Swift.String? /// The preferred language used to return results. The value must be a valid [BCP 47](https://tools.ietf.org/search/bcp47) language tag, for example, en for English. This setting affects the languages used in the results, but not the results themselves. If no language is specified, or not supported for a particular result, the partner automatically chooses a language for the result. For an example, we'll use the Greek language. You search for a location around Athens, Greece, with the language parameter set to en. The city in the results will most likely be returned as Athens. If you set the language parameter to el, for Greek, then the city in the results will more likely be returned as Αθήνα. If the data provider does not have a value for Greek, the result will be in a language that the provider does support. public var language: Swift.String? - /// The identifier of the place to find. While you can use PlaceID in subsequent requests, PlaceID is not intended to be a permanent identifier and the ID can change between consecutive API calls. Please see the following PlaceID behaviour for each data provider: - /// - /// * Esri: Place IDs will change every quarter at a minimum. The typical time period for these changes would be March, June, September, and December. Place IDs might also change between the typical quarterly change but that will be much less frequent. - /// - /// * HERE: We recommend that you cache data for no longer than a week to keep your data data fresh. You can assume that less than 1% ID shifts will release over release which is approximately 1 - 2 times per week. - /// - /// * Grab: Place IDs can expire or become invalid in the following situations. - /// - /// * Data operations: The POI may be removed from Grab POI database by Grab Map Ops based on the ground-truth, such as being closed in the real world, being detected as a duplicate POI, or having incorrect information. Grab will synchronize data to the Waypoint environment on weekly basis. - /// - /// * Interpolated POI: Interpolated POI is a temporary POI generated in real time when serving a request, and it will be marked as derived in the place.result_type field in the response. The information of interpolated POIs will be retained for at least 30 days, which means that within 30 days, you are able to obtain POI details by Place ID from Place Details API. After 30 days, the interpolated POIs(both Place ID and details) may expire and inaccessible from the Places Details API. + /// The identifier of the place to find. /// This member is required. public var placeId: Swift.String? @@ -4061,7 +4459,7 @@ extension LocationClientTypes { public var region: Swift.String? /// The name for a street or a road to identify a location. For example, Main Street. public var street: Swift.String? - /// An area that's part of a larger municipality. For example, Blissville is a submunicipality in the Queen County in New York. This property is only returned for a place index that uses Esri as a data provider. The property is represented as a district. For more information about data providers, see [Amazon Location Service data providers](https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html). + /// An area that's part of a larger municipality. For example, Blissville is a submunicipality in the Queen County in New York. This property supported by Esri and OpenData. The Esri property is district, and the OpenData property is borough. public var subMunicipality: Swift.String? /// A county, or an area that's part of a larger region. For example, Metro Vancouver. public var subRegion: Swift.String? @@ -4069,9 +4467,9 @@ extension LocationClientTypes { public var supplementalCategories: [Swift.String]? /// The time zone in which the Place is located. Returned only when using HERE or Grab as the selected partner. public var timeZone: LocationClientTypes.TimeZone? - /// For addresses with multiple units, the unit identifier. Can include numbers and letters, for example 3B or Unit 123. This property is returned only for a place index that uses Esri or Grab as a data provider. It is not returned for SearchPlaceIndexForPosition. + /// For addresses with multiple units, the unit identifier. Can include numbers and letters, for example 3B or Unit 123. Returned only for a place index that uses Esri or Grab as a data provider. Is not returned for SearchPlaceIndexForPosition. public var unitNumber: Swift.String? - /// For addresses with a UnitNumber, the type of unit. For example, Apartment. This property is returned only for a place index that uses Esri as a data provider. + /// For addresses with a UnitNumber, the type of unit. For example, Apartment. Returned only for a place index that uses Esri as a data provider. public var unitType: Swift.String? public init( @@ -4129,6 +4527,40 @@ public struct GetPlaceOutput { } } +extension LocationClientTypes { + /// The inferred state of the device, given the provided position, IP address, cellular signals, and Wi-Fi- access points. + public struct InferredState { + /// The level of certainty of the inferred position. + public var accuracy: LocationClientTypes.PositionalAccuracy? + /// The distance between the inferred position and the device's self-reported position. + public var deviationDistance: Swift.Double? + /// The device position inferred by the provided position, IP address, cellular signals, and Wi-Fi- access points. + public var position: [Swift.Double]? + /// Indicates if a proxy was used. + /// This member is required. + public var proxyDetected: Swift.Bool? + + public init( + accuracy: LocationClientTypes.PositionalAccuracy? = nil, + deviationDistance: Swift.Double? = nil, + position: [Swift.Double]? = nil, + proxyDetected: Swift.Bool? = nil + ) + { + self.accuracy = accuracy + self.deviationDistance = deviationDistance + self.position = position + self.proxyDetected = proxyDetected + } + } + +} + +extension LocationClientTypes.InferredState: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "InferredState(accuracy: \(Swift.String(describing: accuracy)), deviationDistance: \(Swift.String(describing: deviationDistance)), proxyDetected: \(Swift.String(describing: proxyDetected)), position: \"CONTENT_REDACTED\")"} +} + extension LocationClientTypes { /// The geomerty used to filter device positions. public struct TrackingFilterGeometry { @@ -4565,7 +4997,7 @@ public struct ListTrackersOutput { extension LocationClientTypes { /// Specifies the political view for the style. public struct MapConfigurationUpdate { - /// Specifies the custom layers for the style. Leave unset to not enable any custom layer, or, for styles that support custom layers, you can enable layer(s), such as POI layer for the VectorEsriNavigation style. Default is unset. Currenlty only VectorEsriNavigation supports CustomLayers. For more information, see [Custom Layers](https://docs.aws.amazon.com/location/latest/developerguide/map-concepts.html#map-custom-layers). + /// Specifies the custom layers for the style. Leave unset to not enable any custom layer, or, for styles that support custom layers, you can enable layer(s), such as POI layer for the VectorEsriNavigation style. Default is unset. Not all map resources or styles support custom layers. See Custom Layers for more information. public var customLayers: [Swift.String]? /// Specifies the political view for the style. Set to an empty string to not use a political view, or, for styles that support specific political views, you can choose a view, such as IND for the Indian view. Not all map resources or styles support political view styles. See [Political views](https://docs.aws.amazon.com/location/latest/developerguide/map-concepts.html#political-views) for more information. public var politicalView: Swift.String? @@ -4809,17 +5241,7 @@ extension LocationClientTypes { public struct SearchForSuggestionsResult { /// The Amazon Location categories that describe the Place. For more information about using categories, including a list of Amazon Location categories, see [Categories and filtering](https://docs.aws.amazon.com/location/latest/developerguide/category-filtering.html), in the Amazon Location Service Developer Guide. public var categories: [Swift.String]? - /// The unique identifier of the Place. You can use this with the GetPlace operation to find the place again later, or to get full information for the Place. The GetPlace request must use the same PlaceIndex resource as the SearchPlaceIndexForSuggestions that generated the Place ID. For SearchPlaceIndexForSuggestions operations, the PlaceId is returned by place indexes that use Esri, Grab, or HERE as data providers. While you can use PlaceID in subsequent requests, PlaceID is not intended to be a permanent identifier and the ID can change between consecutive API calls. Please see the following PlaceID behaviour for each data provider: - /// - /// * Esri: Place IDs will change every quarter at a minimum. The typical time period for these changes would be March, June, September, and December. Place IDs might also change between the typical quarterly change but that will be much less frequent. - /// - /// * HERE: We recommend that you cache data for no longer than a week to keep your data data fresh. You can assume that less than 1% ID shifts will release over release which is approximately 1 - 2 times per week. - /// - /// * Grab: Place IDs can expire or become invalid in the following situations. - /// - /// * Data operations: The POI may be removed from Grab POI database by Grab Map Ops based on the ground-truth, such as being closed in the real world, being detected as a duplicate POI, or having incorrect information. Grab will synchronize data to the Waypoint environment on weekly basis. - /// - /// * Interpolated POI: Interpolated POI is a temporary POI generated in real time when serving a request, and it will be marked as derived in the place.result_type field in the response. The information of interpolated POIs will be retained for at least 30 days, which means that within 30 days, you are able to obtain POI details by Place ID from Place Details API. After 30 days, the interpolated POIs(both Place ID and details) may expire and inaccessible from the Places Details API. + /// The unique identifier of the Place. You can use this with the GetPlace operation to find the place again later, or to get full information for the Place. The GetPlace request must use the same PlaceIndex resource as the SearchPlaceIndexForSuggestions that generated the Place ID. For SearchPlaceIndexForSuggestions operations, the PlaceId is returned by place indexes that use Esri, Grab, or HERE as data providers. public var placeId: Swift.String? /// Categories from the data provider that describe the Place that are not mapped to any Amazon Location categories. public var supplementalCategories: [Swift.String]? @@ -5233,6 +5655,61 @@ public struct UpdateTrackerOutput { } } +public struct VerifyDevicePositionInput { + /// The device's state, including position, IP address, cell signals and Wi-Fi access points. + /// This member is required. + public var deviceState: LocationClientTypes.DeviceState? + /// The distance unit for the verification request. Default Value: Kilometers + public var distanceUnit: LocationClientTypes.DistanceUnit? + /// The name of the tracker resource to be associated with verification request. + /// This member is required. + public var trackerName: Swift.String? + + public init( + deviceState: LocationClientTypes.DeviceState? = nil, + distanceUnit: LocationClientTypes.DistanceUnit? = nil, + trackerName: Swift.String? = nil + ) + { + self.deviceState = deviceState + self.distanceUnit = distanceUnit + self.trackerName = trackerName + } +} + +public struct VerifyDevicePositionOutput { + /// The device identifier. + /// This member is required. + public var deviceId: Swift.String? + /// The distance unit for the verification response. + /// This member is required. + public var distanceUnit: LocationClientTypes.DistanceUnit? + /// The inferred state of the device, given the provided position, IP address, cellular signals, and Wi-Fi- access points. + /// This member is required. + public var inferredState: LocationClientTypes.InferredState? + /// The timestamp for when the tracker resource received the device position in [ ISO 8601 ](https://www.iso.org/iso-8601-date-and-time-format.html) format: YYYY-MM-DDThh:mm:ss.sssZ. + /// This member is required. + public var receivedTime: Foundation.Date? + /// The timestamp at which the device's position was determined. Uses [ ISO 8601 ](https://www.iso.org/iso-8601-date-and-time-format.html) format: YYYY-MM-DDThh:mm:ss.sssZ. + /// This member is required. + public var sampleTime: Foundation.Date? + + public init( + deviceId: Swift.String? = nil, + distanceUnit: LocationClientTypes.DistanceUnit? = nil, + inferredState: LocationClientTypes.InferredState? = nil, + receivedTime: Foundation.Date? = nil, + sampleTime: Foundation.Date? = nil + ) + { + self.deviceId = deviceId + self.distanceUnit = distanceUnit + self.inferredState = inferredState + self.receivedTime = receivedTime + self.sampleTime = sampleTime + } +} + extension AssociateTrackerConsumerInput { static func urlPathProvider(_ value: AssociateTrackerConsumerInput) -> Swift.String? { @@ -5534,6 +6011,16 @@ extension DisassociateTrackerConsumerInput { } } +extension ForecastGeofenceEventsInput { + + static func urlPathProvider(_ value: ForecastGeofenceEventsInput) -> Swift.String? { + guard let collectionName = value.collectionName else { + return nil + } + return "/geofencing/v0/collections/\(collectionName.urlPercentEncoding())/forecast-geofence-events" + } +} + extension GetDevicePositionInput { static func urlPathProvider(_ value: GetDevicePositionInput) -> Swift.String? { @@ -5965,6 +6452,16 @@ extension UpdateTrackerInput { } } +extension VerifyDevicePositionInput { + + static func urlPathProvider(_ value: VerifyDevicePositionInput) -> Swift.String? { + guard let trackerName = value.trackerName else { + return nil + } + return "/tracking/v0/trackers/\(trackerName.urlPercentEncoding())/positions/verify" + } +} + extension AssociateTrackerConsumerInput { static func write(value: AssociateTrackerConsumerInput?, to writer: SmithyJSON.Writer) throws { @@ -6127,6 +6624,19 @@ extension CreateTrackerInput { } } +extension ForecastGeofenceEventsInput { + + static func write(value: ForecastGeofenceEventsInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["DeviceState"].write(value.deviceState, with: LocationClientTypes.ForecastGeofenceEventsDeviceState.write(value:to:)) + try writer["DistanceUnit"].write(value.distanceUnit) + try writer["MaxResults"].write(value.maxResults) + try writer["NextToken"].write(value.nextToken) + try writer["SpeedUnit"].write(value.speedUnit) + try writer["TimeHorizonMinutes"].write(value.timeHorizonMinutes) + } +} + extension GetDevicePositionHistoryInput { static func write(value: GetDevicePositionHistoryInput?, to writer: SmithyJSON.Writer) throws { @@ -6333,6 +6843,15 @@ extension UpdateTrackerInput { } } +extension VerifyDevicePositionInput { + + static func write(value: VerifyDevicePositionInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["DeviceState"].write(value.deviceState, with: LocationClientTypes.DeviceState.write(value:to:)) + try writer["DistanceUnit"].write(value.distanceUnit) + } +} + extension AssociateTrackerConsumerOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> AssociateTrackerConsumerOutput { @@ -6692,6 +7211,21 @@ extension DisassociateTrackerConsumerOutput { } } +extension ForecastGeofenceEventsOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ForecastGeofenceEventsOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ForecastGeofenceEventsOutput() + value.distanceUnit = try reader["DistanceUnit"].readIfPresent() + value.forecastedEvents = try reader["ForecastedEvents"].readListIfPresent(memberReadingClosure: LocationClientTypes.ForecastedEvent.read(from:), memberNodeInfo: "member", isFlattened: false) + value.nextToken = try reader["NextToken"].readIfPresent() + value.speedUnit = try reader["SpeedUnit"].readIfPresent() + return value + } +} + extension GetDevicePositionOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetDevicePositionOutput { @@ -7119,6 +7653,22 @@ extension UpdateTrackerOutput { } } +extension VerifyDevicePositionOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> VerifyDevicePositionOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = VerifyDevicePositionOutput() + value.deviceId = try reader["DeviceId"].readIfPresent() + value.distanceUnit = try reader["DistanceUnit"].readIfPresent() + value.inferredState = try reader["InferredState"].readIfPresent(with: LocationClientTypes.InferredState.read(from:)) + value.receivedTime = try reader["ReceivedTime"].readTimestampIfPresent(format: .dateTime) + value.sampleTime = try reader["SampleTime"].readTimestampIfPresent(format: .dateTime) + return value + } +} + enum AssociateTrackerConsumerOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -7631,6 +8181,24 @@ enum DisassociateTrackerConsumerOutputError { } } +enum ForecastGeofenceEventsOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum GetDevicePositionOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -8165,6 +8733,24 @@ enum UpdateTrackerOutputError { } } +enum VerifyDevicePositionOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + extension ServiceQuotaExceededException { static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ServiceQuotaExceededException { @@ -8521,11 +9107,28 @@ extension LocationClientTypes.DataSourceConfiguration { } } +extension LocationClientTypes.ForecastedEvent { + + static func read(from reader: SmithyJSON.Reader) throws -> LocationClientTypes.ForecastedEvent { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = LocationClientTypes.ForecastedEvent() + value.eventId = try reader["EventId"].readIfPresent() + value.geofenceId = try reader["GeofenceId"].readIfPresent() + value.isDeviceInGeofence = try reader["IsDeviceInGeofence"].readIfPresent() + value.nearestDistance = try reader["NearestDistance"].readIfPresent() ?? 0 + value.eventType = try reader["EventType"].readIfPresent() + value.forecastedBreachTime = try reader["ForecastedBreachTime"].readTimestampIfPresent(format: .dateTime) + value.geofenceProperties = try reader["GeofenceProperties"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + return value + } +} + extension LocationClientTypes.GeofenceGeometry { static func write(value: LocationClientTypes.GeofenceGeometry?, to writer: SmithyJSON.Writer) throws { guard let value else { return } try writer["Circle"].write(value.circle, with: LocationClientTypes.Circle.write(value:to:)) + try writer["Geobuf"].write(value.geobuf) try writer["Polygon"].writeList(value.polygon, memberWritingClosure: SmithyReadWrite.listWritingClosure(memberWritingClosure: SmithyReadWrite.listWritingClosure(memberWritingClosure: SmithyReadWrite.WritingClosures.writeDouble(value:to:), memberNodeInfo: "member", isFlattened: false), memberNodeInfo: "member", isFlattened: false), memberNodeInfo: "member", isFlattened: false) } @@ -8534,6 +9137,7 @@ extension LocationClientTypes.GeofenceGeometry { var value = LocationClientTypes.GeofenceGeometry() value.polygon = try reader["Polygon"].readListIfPresent(memberReadingClosure: SmithyReadWrite.listReadingClosure(memberReadingClosure: SmithyReadWrite.listReadingClosure(memberReadingClosure: SmithyReadWrite.ReadingClosures.readDouble(from:), memberNodeInfo: "member", isFlattened: false), memberNodeInfo: "member", isFlattened: false), memberNodeInfo: "member", isFlattened: false) value.circle = try reader["Circle"].readIfPresent(with: LocationClientTypes.Circle.read(from:)) + value.geobuf = try reader["Geobuf"].readIfPresent() return value } } @@ -8800,6 +9404,19 @@ extension LocationClientTypes.SearchForTextResult { } } +extension LocationClientTypes.InferredState { + + static func read(from reader: SmithyJSON.Reader) throws -> LocationClientTypes.InferredState { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = LocationClientTypes.InferredState() + value.position = try reader["Position"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readDouble(from:), memberNodeInfo: "member", isFlattened: false) + value.accuracy = try reader["Accuracy"].readIfPresent(with: LocationClientTypes.PositionalAccuracy.read(from:)) + value.deviationDistance = try reader["DeviationDistance"].readIfPresent() + value.proxyDetected = try reader["ProxyDetected"].readIfPresent() + return value + } +} + extension LocationClientTypes.ValidationExceptionField { static func read(from reader: SmithyJSON.Reader) throws -> LocationClientTypes.ValidationExceptionField { @@ -8873,6 +9490,15 @@ extension LocationClientTypes.TruckDimensions { } } +extension LocationClientTypes.ForecastGeofenceEventsDeviceState { + + static func write(value: LocationClientTypes.ForecastGeofenceEventsDeviceState?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Position"].writeList(value.position, memberWritingClosure: SmithyReadWrite.WritingClosures.writeDouble(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["Speed"].write(value.speed) + } +} + extension LocationClientTypes.TrackingFilterGeometry { static func write(value: LocationClientTypes.TrackingFilterGeometry?, to writer: SmithyJSON.Writer) throws { @@ -8898,4 +9524,73 @@ extension LocationClientTypes.MapConfigurationUpdate { } } +extension LocationClientTypes.DeviceState { + + static func write(value: LocationClientTypes.DeviceState?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Accuracy"].write(value.accuracy, with: LocationClientTypes.PositionalAccuracy.write(value:to:)) + try writer["CellSignals"].write(value.cellSignals, with: LocationClientTypes.CellSignals.write(value:to:)) + try writer["DeviceId"].write(value.deviceId) + try writer["Ipv4Address"].write(value.ipv4Address) + try writer["Position"].writeList(value.position, memberWritingClosure: SmithyReadWrite.WritingClosures.writeDouble(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["SampleTime"].writeTimestamp(value.sampleTime, format: .dateTime) + try writer["WiFiAccessPoints"].writeList(value.wiFiAccessPoints, memberWritingClosure: LocationClientTypes.WiFiAccessPoint.write(value:to:), memberNodeInfo: "member", isFlattened: false) + } +} + +extension LocationClientTypes.CellSignals { + + static func write(value: LocationClientTypes.CellSignals?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["LteCellDetails"].writeList(value.lteCellDetails, memberWritingClosure: LocationClientTypes.LteCellDetails.write(value:to:), memberNodeInfo: "member", isFlattened: false) + } +} + +extension LocationClientTypes.LteCellDetails { + + static func write(value: LocationClientTypes.LteCellDetails?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["CellId"].write(value.cellId) + try writer["LocalId"].write(value.localId, with: LocationClientTypes.LteLocalId.write(value:to:)) + try writer["Mcc"].write(value.mcc) + try writer["Mnc"].write(value.mnc) + try writer["NetworkMeasurements"].writeList(value.networkMeasurements, memberWritingClosure: LocationClientTypes.LteNetworkMeasurements.write(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["NrCapable"].write(value.nrCapable) + try writer["Rsrp"].write(value.rsrp) + try writer["Rsrq"].write(value.rsrq) + try writer["Tac"].write(value.tac) + try writer["TimingAdvance"].write(value.timingAdvance) + } +} + +extension LocationClientTypes.LteNetworkMeasurements { + + static func write(value: LocationClientTypes.LteNetworkMeasurements?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["CellId"].write(value.cellId) + try writer["Earfcn"].write(value.earfcn) + try writer["Pci"].write(value.pci) + try writer["Rsrp"].write(value.rsrp) + try writer["Rsrq"].write(value.rsrq) + } +} + +extension LocationClientTypes.LteLocalId { + + static func write(value: LocationClientTypes.LteLocalId?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Earfcn"].write(value.earfcn) + try writer["Pci"].write(value.pci) + } +} + +extension LocationClientTypes.WiFiAccessPoint { + + static func write(value: LocationClientTypes.WiFiAccessPoint?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["MacAddress"].write(value.macAddress) + try writer["Rss"].write(value.rss) + } +} + public enum LocationClientTypes {} diff --git a/Sources/Services/AWSMacie2/Sources/AWSMacie2/Macie2Client.swift b/Sources/Services/AWSMacie2/Sources/AWSMacie2/Macie2Client.swift index 434ce42fb00..63cd745c695 100644 --- a/Sources/Services/AWSMacie2/Sources/AWSMacie2/Macie2Client.swift +++ b/Sources/Services/AWSMacie2/Sources/AWSMacie2/Macie2Client.swift @@ -265,6 +265,58 @@ extension Macie2Client { return result } + /// Performs the `BatchUpdateAutomatedDiscoveryAccounts` operation on the `Macie2` service. + /// + /// Changes the status of automated sensitive data discovery for one or more accounts. + /// + /// - Parameter BatchUpdateAutomatedDiscoveryAccountsInput : [no documentation found] + /// + /// - Returns: `BatchUpdateAutomatedDiscoveryAccountsOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : Provides information about an error that occurred due to insufficient access to a specified resource. + /// - `ConflictException` : Provides information about an error that occurred due to a versioning conflict for a specified resource. + /// - `InternalServerException` : Provides information about an error that occurred due to an unknown internal server error, exception, or failure. + /// - `ThrottlingException` : Provides information about an error that occurred because too many requests were sent during a certain amount of time. + /// - `ValidationException` : Provides information about an error that occurred due to a syntax error in a request. + public func batchUpdateAutomatedDiscoveryAccounts(input: BatchUpdateAutomatedDiscoveryAccountsInput) async throws -> BatchUpdateAutomatedDiscoveryAccountsOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .patch) + .withServiceName(value: serviceName) + .withOperation(value: "batchUpdateAutomatedDiscoveryAccounts") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "macie2") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "batchUpdateAutomatedDiscoveryAccounts") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(BatchUpdateAutomatedDiscoveryAccountsInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: BatchUpdateAutomatedDiscoveryAccountsInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(BatchUpdateAutomatedDiscoveryAccountsOutput.httpOutput(from:), BatchUpdateAutomatedDiscoveryAccountsOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `CreateAllowList` operation on the `Macie2` service. /// /// Creates and defines the settings for an allow list. @@ -1582,7 +1634,7 @@ extension Macie2Client { /// Performs the `GetAutomatedDiscoveryConfiguration` operation on the `Macie2` service. /// - /// Retrieves the configuration settings and status of automated sensitive data discovery for an account. + /// Retrieves the configuration settings and status of automated sensitive data discovery for an organization or standalone account. /// /// - Parameter GetAutomatedDiscoveryConfigurationInput : [no documentation found] /// @@ -2648,6 +2700,56 @@ extension Macie2Client { return result } + /// Performs the `ListAutomatedDiscoveryAccounts` operation on the `Macie2` service. + /// + /// Retrieves the status of automated sensitive data discovery for one or more accounts. + /// + /// - Parameter ListAutomatedDiscoveryAccountsInput : [no documentation found] + /// + /// - Returns: `ListAutomatedDiscoveryAccountsOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : Provides information about an error that occurred due to insufficient access to a specified resource. + /// - `InternalServerException` : Provides information about an error that occurred due to an unknown internal server error, exception, or failure. + /// - `ResourceNotFoundException` : Provides information about an error that occurred because a specified resource wasn't found. + /// - `ThrottlingException` : Provides information about an error that occurred because too many requests were sent during a certain amount of time. + /// - `ValidationException` : Provides information about an error that occurred due to a syntax error in a request. + public func listAutomatedDiscoveryAccounts(input: ListAutomatedDiscoveryAccountsInput) async throws -> ListAutomatedDiscoveryAccountsOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listAutomatedDiscoveryAccounts") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "macie2") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listAutomatedDiscoveryAccounts") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListAutomatedDiscoveryAccountsInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListAutomatedDiscoveryAccountsInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListAutomatedDiscoveryAccountsOutput.httpOutput(from:), ListAutomatedDiscoveryAccountsOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + /// Performs the `ListClassificationJobs` operation on the `Macie2` service. /// /// Retrieves a subset of information about one or more classification jobs. @@ -2913,7 +3015,7 @@ extension Macie2Client { /// Performs the `ListInvitations` operation on the `Macie2` service. /// - /// Retrieves information about the Amazon Macie membership invitations that were received by an account. + /// Retrieves information about Amazon Macie membership invitations that were received by an account. /// /// - Parameter ListInvitationsInput : [no documentation found] /// @@ -3112,7 +3214,7 @@ extension Macie2Client { /// Performs the `ListResourceProfileArtifacts` operation on the `Macie2` service. /// - /// Retrieves information about objects that were selected from an S3 bucket for automated sensitive data discovery. + /// Retrieves information about objects that Amazon Macie selected from an S3 bucket for automated sensitive data discovery. /// /// - Parameter ListResourceProfileArtifactsInput : [no documentation found] /// @@ -3303,7 +3405,7 @@ extension Macie2Client { /// Performs the `PutClassificationExportConfiguration` operation on the `Macie2` service. /// - /// Creates or updates the configuration settings for storing data classification results. + /// Adds or updates the configuration settings for storing data classification results. /// /// - Parameter PutClassificationExportConfigurationInput : [no documentation found] /// @@ -3509,7 +3611,7 @@ extension Macie2Client { /// Performs the `TestCustomDataIdentifier` operation on the `Macie2` service. /// - /// Tests a custom data identifier. + /// Tests criteria for a custom data identifier. /// /// - Parameter TestCustomDataIdentifierInput : [no documentation found] /// @@ -3656,7 +3758,7 @@ extension Macie2Client { /// Performs the `UpdateAutomatedDiscoveryConfiguration` operation on the `Macie2` service. /// - /// Enables or disables automated sensitive data discovery for an account. + /// Changes the configuration settings and status of automated sensitive data discovery for an organization or standalone account. /// /// - Parameter UpdateAutomatedDiscoveryConfigurationInput : [no documentation found] /// diff --git a/Sources/Services/AWSMacie2/Sources/AWSMacie2/Models.swift b/Sources/Services/AWSMacie2/Sources/AWSMacie2/Models.swift index 9edcb8b6931..108b6266e2c 100644 --- a/Sources/Services/AWSMacie2/Sources/AWSMacie2/Models.swift +++ b/Sources/Services/AWSMacie2/Sources/AWSMacie2/Models.swift @@ -105,6 +105,126 @@ extension Macie2ClientTypes { } +extension Macie2ClientTypes { + + /// The status of automated sensitive data discovery for an Amazon Macie account. Valid values are: + public enum AutomatedDiscoveryAccountStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case disabled + case enabled + case sdkUnknown(Swift.String) + + public static var allCases: [AutomatedDiscoveryAccountStatus] { + return [ + .disabled, + .enabled + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .disabled: return "DISABLED" + case .enabled: return "ENABLED" + case let .sdkUnknown(s): return s + } + } + } +} + +extension Macie2ClientTypes { + /// Provides information about the status of automated sensitive data discovery for an Amazon Macie account. + public struct AutomatedDiscoveryAccount { + /// The Amazon Web Services account ID for the account. + public var accountId: Swift.String? + /// The current status of automated sensitive data discovery for the account. Possible values are: ENABLED, perform automated sensitive data discovery activities for the account; and, DISABLED, don't perform automated sensitive data discovery activities for the account. + public var status: Macie2ClientTypes.AutomatedDiscoveryAccountStatus? + + public init( + accountId: Swift.String? = nil, + status: Macie2ClientTypes.AutomatedDiscoveryAccountStatus? = nil + ) + { + self.accountId = accountId + self.status = status + } + } + +} + +extension Macie2ClientTypes { + /// Changes the status of automated sensitive data discovery for an Amazon Macie account. + public struct AutomatedDiscoveryAccountUpdate { + /// The Amazon Web Services account ID for the account. + public var accountId: Swift.String? + /// The new status of automated sensitive data discovery for the account. Valid values are: ENABLED, perform automated sensitive data discovery activities for the account; and, DISABLED, don't perform automated sensitive data discovery activities for the account. + public var status: Macie2ClientTypes.AutomatedDiscoveryAccountStatus? + + public init( + accountId: Swift.String? = nil, + status: Macie2ClientTypes.AutomatedDiscoveryAccountStatus? = nil + ) + { + self.accountId = accountId + self.status = status + } + } + +} + +extension Macie2ClientTypes { + + /// The error code that indicates why a request failed to change the status of automated sensitive data discovery for an Amazon Macie account. Possible values are: + public enum AutomatedDiscoveryAccountUpdateErrorCode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case accountNotFound + case accountPaused + case sdkUnknown(Swift.String) + + public static var allCases: [AutomatedDiscoveryAccountUpdateErrorCode] { + return [ + .accountNotFound, + .accountPaused + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .accountNotFound: return "ACCOUNT_NOT_FOUND" + case .accountPaused: return "ACCOUNT_PAUSED" + case let .sdkUnknown(s): return s + } + } + } +} + +extension Macie2ClientTypes { + /// Provides information about a request that failed to change the status of automated sensitive data discovery for an Amazon Macie account. + public struct AutomatedDiscoveryAccountUpdateError { + /// The Amazon Web Services account ID for the account that the request applied to. + public var accountId: Swift.String? + /// The error code for the error that caused the request to fail for the account (accountId). Possible values are: ACCOUNT_NOT_FOUND, the account doesn’t exist or you're not the Amazon Macie administrator for the account; and, ACCOUNT_PAUSED, Macie isn’t enabled for the account in the current Amazon Web Services Region. + public var errorCode: Macie2ClientTypes.AutomatedDiscoveryAccountUpdateErrorCode? + + public init( + accountId: Swift.String? = nil, + errorCode: Macie2ClientTypes.AutomatedDiscoveryAccountUpdateErrorCode? = nil + ) + { + self.accountId = accountId + self.errorCode = errorCode + } + } + +} + extension Macie2ClientTypes { /// Provides information about a custom data identifier. public struct BatchGetCustomDataIdentifierSummary { @@ -175,7 +295,37 @@ extension Macie2ClientTypes { extension Macie2ClientTypes { - /// The error code for an error that prevented Amazon Macie from retrieving and processing metadata from Amazon S3 for an S3 bucket and the bucket's objects. + /// Specifies whether automated sensitive data discovery is currently configured to analyze objects in an S3 bucket. Possible values are: + public enum AutomatedDiscoveryMonitoringStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case monitored + case notMonitored + case sdkUnknown(Swift.String) + + public static var allCases: [AutomatedDiscoveryMonitoringStatus] { + return [ + .monitored, + .notMonitored + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .monitored: return "MONITORED" + case .notMonitored: return "NOT_MONITORED" + case let .sdkUnknown(s): return s + } + } + } +} + +extension Macie2ClientTypes { + + /// The error code for an error that prevented Amazon Macie from retrieving and processing information about an S3 bucket and the bucket's objects. public enum BucketMetadataErrorCode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { case accessDenied case sdkUnknown(Swift.String) @@ -265,9 +415,9 @@ extension Macie2ClientTypes { } extension Macie2ClientTypes { - /// Specifies whether any one-time or recurring classification jobs are configured to analyze data in an S3 bucket, and, if so, the details of the job that ran most recently. + /// Specifies whether any one-time or recurring classification jobs are configured to analyze objects in an S3 bucket, and, if so, the details of the job that ran most recently. public struct JobDetails { - /// Specifies whether any one-time or recurring jobs are configured to analyze data in the bucket. Possible values are: + /// Specifies whether any one-time or recurring jobs are configured to analyze objects in the bucket. Possible values are: /// /// * TRUE - The bucket is explicitly included in the bucket definition (S3BucketDefinitionForJob) for one or more jobs and at least one of those jobs has a status other than CANCELLED. Or the bucket matched the bucket criteria (S3BucketCriteriaForJob) for at least one job that previously ran. /// @@ -275,7 +425,7 @@ extension Macie2ClientTypes { /// /// * UNKNOWN - An exception occurred when Amazon Macie attempted to retrieve job data for the bucket. public var isDefinedInJob: Macie2ClientTypes.IsDefinedInJob? - /// Specifies whether any recurring jobs are configured to analyze data in the bucket. Possible values are: + /// Specifies whether any recurring jobs are configured to analyze objects in the bucket. Possible values are: /// /// * TRUE - The bucket is explicitly included in the bucket definition (S3BucketDefinitionForJob) for one or more recurring jobs or the bucket matches the bucket criteria (S3BucketCriteriaForJob) for one or more recurring jobs. At least one of those jobs has a status other than CANCELLED. /// @@ -283,7 +433,7 @@ extension Macie2ClientTypes { /// /// * UNKNOWN - An exception occurred when Amazon Macie attempted to retrieve job data for the bucket. public var isMonitoredByJob: Macie2ClientTypes.IsMonitoredByJob? - /// The unique identifier for the job that ran most recently and is configured to analyze data in the bucket, either the latest run of a recurring job or the only run of a one-time job. This value is typically null if the value for the isDefinedInJob property is FALSE or UNKNOWN. + /// The unique identifier for the job that ran most recently and is configured to analyze objects in the bucket, either the latest run of a recurring job or the only run of a one-time job. This value is typically null if the value for the isDefinedInJob property is FALSE or UNKNOWN. public var lastJobId: Swift.String? /// The date and time, in UTC and extended ISO 8601 format, when the job (lastJobId) started. If the job is a recurring job, this value indicates when the most recent run started. This value is typically null if the value for the isDefinedInJob property is FALSE or UNKNOWN. public var lastJobRunTime: Foundation.Date? @@ -704,6 +854,8 @@ extension Macie2ClientTypes { /// /// Valid server-side encryption headers are: x-amz-server-side-encryption with a value of AES256 or aws:kms, and x-amz-server-side-encryption-customer-algorithm with a value of AES256. public var allowsUnencryptedObjectUploads: Macie2ClientTypes.AllowsUnencryptedObjectUploads? + /// Specifies whether automated sensitive data discovery is currently configured to analyze objects in the bucket. Possible values are: MONITORED, the bucket is included in analyses; and, NOT_MONITORED, the bucket is excluded from analyses. If automated sensitive data discovery is disabled for your account, this value is NOT_MONITORED. + public var automatedDiscoveryMonitoringStatus: Macie2ClientTypes.AutomatedDiscoveryMonitoringStatus? /// The Amazon Resource Name (ARN) of the bucket. public var bucketArn: Swift.String? /// The date and time, in UTC and extended ISO 8601 format, when the bucket was created. This value can also indicate when changes such as edits to the bucket's policy were most recently made to the bucket. @@ -718,9 +870,9 @@ extension Macie2ClientTypes { public var errorCode: Macie2ClientTypes.BucketMetadataErrorCode? /// A brief description of the error (errorCode) that prevented Amazon Macie from retrieving and processing information about the bucket and the bucket's objects. This value is null if Macie was able to retrieve and process the information. public var errorMessage: Swift.String? - /// Specifies whether any one-time or recurring classification jobs are configured to analyze data in the bucket, and, if so, the details of the job that ran most recently. + /// Specifies whether any one-time or recurring classification jobs are configured to analyze objects in the bucket, and, if so, the details of the job that ran most recently. public var jobDetails: Macie2ClientTypes.JobDetails? - /// The date and time, in UTC and extended ISO 8601 format, when Amazon Macie most recently analyzed data in the bucket while performing automated sensitive data discovery for your account. This value is null if automated sensitive data discovery is currently disabled for your account. + /// The date and time, in UTC and extended ISO 8601 format, when Amazon Macie most recently analyzed objects in the bucket while performing automated sensitive data discovery. This value is null if automated sensitive data discovery is disabled for your account. public var lastAutomatedDiscoveryTime: Foundation.Date? /// The date and time, in UTC and extended ISO 8601 format, when Amazon Macie most recently retrieved bucket or object metadata from Amazon S3 for the bucket. public var lastUpdated: Foundation.Date? @@ -734,7 +886,7 @@ extension Macie2ClientTypes { public var region: Swift.String? /// Specifies whether the bucket is configured to replicate one or more objects to buckets for other Amazon Web Services accounts and, if so, which accounts. public var replicationDetails: Macie2ClientTypes.ReplicationDetails? - /// The sensitivity score for the bucket, ranging from -1 (classification error) to 100 (sensitive). This value is null if automated sensitive data discovery is currently disabled for your account. + /// The sensitivity score for the bucket, ranging from -1 (classification error) to 100 (sensitive).If automated sensitive data discovery has never been enabled for your account or it’s been disabled for your organization or your standalone account for more than 30 days, possible values are: 1, the bucket is empty; or, 50, the bucket stores objects but it’s been excluded from recent analyses. public var sensitivityScore: Swift.Int? /// The default server-side encryption settings for the bucket. public var serverSideEncryption: Macie2ClientTypes.BucketServerSideEncryption? @@ -767,6 +919,7 @@ extension Macie2ClientTypes { public init( accountId: Swift.String? = nil, allowsUnencryptedObjectUploads: Macie2ClientTypes.AllowsUnencryptedObjectUploads? = nil, + automatedDiscoveryMonitoringStatus: Macie2ClientTypes.AutomatedDiscoveryMonitoringStatus? = nil, bucketArn: Swift.String? = nil, bucketCreatedAt: Foundation.Date? = nil, bucketName: Swift.String? = nil, @@ -795,6 +948,7 @@ extension Macie2ClientTypes { { self.accountId = accountId self.allowsUnencryptedObjectUploads = allowsUnencryptedObjectUploads + self.automatedDiscoveryMonitoringStatus = automatedDiscoveryMonitoringStatus self.bucketArn = bucketArn self.bucketCreatedAt = bucketCreatedAt self.bucketName = bucketName @@ -1103,7 +1257,7 @@ extension Macie2ClientTypes { } extension Macie2ClientTypes { - /// Provides information about a type of sensitive data that Amazon Macie found in an S3 bucket while performing automated sensitive data discovery for the bucket. The information also specifies the custom data identifier or managed data identifier that detected the data. This information is available only if automated sensitive data discovery is currently enabled for your account. + /// Provides information about a type of sensitive data that Amazon Macie found in an S3 bucket while performing automated sensitive data discovery for an account. The information also specifies the custom or managed data identifier that detected the data. This information is available only if automated sensitive data discovery has been enabled for the account. public struct Detection { /// If the sensitive data was detected by a custom data identifier, the Amazon Resource Name (ARN) of the custom data identifier that detected the data. Otherwise, this value is null. public var arn: Swift.String? @@ -2115,9 +2269,9 @@ extension Macie2ClientTypes { public struct FindingActor { /// The domain name of the device that the entity used to perform the action on the affected resource. public var domainDetails: Macie2ClientTypes.DomainDetails? - /// The IP address of the device that the entity used to perform the action on the affected resource. This object also provides information such as the owner and geographic location for the IP address. + /// The IP address and related details about the device that the entity used to perform the action on the affected resource. The details can include information such as the owner and geographic location of the IP address. public var ipAddressDetails: Macie2ClientTypes.IpAddressDetails? - /// The type and other characteristics of the entity that performed the action on the affected resource. + /// The type and other characteristics of the entity that performed the action on the affected resource. This value is null if the action was performed by an anonymous (unauthenticated) entity. public var userIdentity: Macie2ClientTypes.UserIdentity? public init( @@ -3302,6 +3456,8 @@ extension Macie2ClientTypes { public struct MatchingBucket { /// The unique identifier for the Amazon Web Services account that owns the bucket. public var accountId: Swift.String? + /// Specifies whether automated sensitive data discovery is currently configured to analyze objects in the bucket. Possible values are: MONITORED, the bucket is included in analyses; and, NOT_MONITORED, the bucket is excluded from analyses. If automated sensitive data discovery is disabled for your account, this value is NOT_MONITORED. + public var automatedDiscoveryMonitoringStatus: Macie2ClientTypes.AutomatedDiscoveryMonitoringStatus? /// The name of the bucket. public var bucketName: Swift.String? /// The total number of objects that Amazon Macie can analyze in the bucket. These objects use a supported storage class and have a file name extension for a supported file or storage format. @@ -3314,13 +3470,13 @@ extension Macie2ClientTypes { public var errorMessage: Swift.String? /// Specifies whether any one-time or recurring classification jobs are configured to analyze objects in the bucket, and, if so, the details of the job that ran most recently. public var jobDetails: Macie2ClientTypes.JobDetails? - /// The date and time, in UTC and extended ISO 8601 format, when Amazon Macie most recently analyzed data in the bucket while performing automated sensitive data discovery for your account. This value is null if automated sensitive data discovery is currently disabled for your account. + /// The date and time, in UTC and extended ISO 8601 format, when Amazon Macie most recently analyzed objects in the bucket while performing automated sensitive data discovery. This value is null if automated sensitive data discovery is disabled for your account. public var lastAutomatedDiscoveryTime: Foundation.Date? /// The total number of objects in the bucket. public var objectCount: Swift.Int? /// The total number of objects in the bucket, grouped by server-side encryption type. This includes a grouping that reports the total number of objects that aren't encrypted or use client-side encryption. public var objectCountByEncryptionType: Macie2ClientTypes.ObjectCountByEncryptionType? - /// The current sensitivity score for the bucket, ranging from -1 (classification error) to 100 (sensitive). This value is null if automated sensitive data discovery is currently disabled for your account. + /// The sensitivity score for the bucket, ranging from -1 (classification error) to 100 (sensitive).If automated sensitive data discovery has never been enabled for your account or it’s been disabled for your organization or your standalone account for more than 30 days, possible values are: 1, the bucket is empty; or, 50, the bucket stores objects but it’s been excluded from recent analyses. public var sensitivityScore: Swift.Int? /// The total storage size, in bytes, of the bucket. If versioning is enabled for the bucket, Amazon Macie calculates this value based on the size of the latest version of each object in the bucket. This value doesn't reflect the storage size of all versions of each object in the bucket. public var sizeInBytes: Swift.Int? @@ -3333,6 +3489,7 @@ extension Macie2ClientTypes { public init( accountId: Swift.String? = nil, + automatedDiscoveryMonitoringStatus: Macie2ClientTypes.AutomatedDiscoveryMonitoringStatus? = nil, bucketName: Swift.String? = nil, classifiableObjectCount: Swift.Int? = nil, classifiableSizeInBytes: Swift.Int? = nil, @@ -3350,6 +3507,7 @@ extension Macie2ClientTypes { ) { self.accountId = accountId + self.automatedDiscoveryMonitoringStatus = automatedDiscoveryMonitoringStatus self.bucketName = bucketName self.classifiableObjectCount = classifiableObjectCount self.classifiableSizeInBytes = classifiableSizeInBytes @@ -3434,7 +3592,7 @@ extension Macie2ClientTypes { } extension Macie2ClientTypes { - /// Provides information about an S3 object that Amazon Macie selected for analysis while performing automated sensitive data discovery for an S3 bucket, and the status and results of the analysis. This information is available only if automated sensitive data discovery is currently enabled for your account. + /// Provides information about an S3 object that Amazon Macie selected for analysis while performing automated sensitive data discovery for an account, and the status and results of the analysis. This information is available only if automated sensitive data discovery has been enabled for the account. public struct ResourceProfileArtifact { /// The Amazon Resource Name (ARN) of the object. /// This member is required. @@ -3500,6 +3658,7 @@ extension Macie2ClientTypes { /// The property to use in a condition that filters the query results. Valid values are: public enum SearchResourcesSimpleCriterionKey: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { case accountId + case automatedDiscoveryMonitoringStatus case s3BucketEffectivePermission case s3BucketName case s3BucketSharedAccess @@ -3508,6 +3667,7 @@ extension Macie2ClientTypes { public static var allCases: [SearchResourcesSimpleCriterionKey] { return [ .accountId, + .automatedDiscoveryMonitoringStatus, .s3BucketEffectivePermission, .s3BucketName, .s3BucketSharedAccess @@ -3522,6 +3682,7 @@ extension Macie2ClientTypes { public var rawValue: Swift.String { switch self { case .accountId: return "ACCOUNT_ID" + case .automatedDiscoveryMonitoringStatus: return "AUTOMATED_DISCOVERY_MONITORING_STATUS" case .s3BucketEffectivePermission: return "S3_BUCKET_EFFECTIVE_PERMISSION" case .s3BucketName: return "S3_BUCKET_NAME" case .s3BucketSharedAccess: return "S3_BUCKET_SHARED_ACCESS" @@ -3542,6 +3703,8 @@ extension Macie2ClientTypes { /// /// * ACCOUNT_ID - A string that represents the unique identifier for the Amazon Web Services account that owns the resource. /// + /// * AUTOMATED_DISCOVERY_MONITORING_STATUS - A string that represents an enumerated value that Macie defines for the [BucketMetadata.automatedDiscoveryMonitoringStatus](https://docs.aws.amazon.com/macie/latest/APIReference/datasources-s3.html#datasources-s3-prop-bucketmetadata-automateddiscoverymonitoringstatus) property of an S3 bucket. + /// /// * S3_BUCKET_EFFECTIVE_PERMISSION - A string that represents an enumerated value that Macie defines for the [BucketPublicAccess.effectivePermission](https://docs.aws.amazon.com/macie/latest/APIReference/datasources-s3.html#datasources-s3-prop-bucketpublicaccess-effectivepermission) property of an S3 bucket. /// /// * S3_BUCKET_NAME - A string that represents the name of an S3 bucket. @@ -3627,7 +3790,7 @@ extension Macie2ClientTypes { } extension Macie2ClientTypes { - /// Provides information about the sensitivity inspection template for an Amazon Macie account. Macie uses the template's settings when it performs automated sensitive data discovery for the account. + /// Provides information about the sensitivity inspection template for an Amazon Macie account. public struct SensitivityInspectionTemplatesEntry { /// The unique identifier for the sensitivity inspection template. public var id: Swift.String? @@ -3923,7 +4086,7 @@ extension Macie2ClientTypes { public struct UsageRecord { /// The unique identifier for the Amazon Web Services account that the data applies to. public var accountId: Swift.String? - /// The date and time, in UTC and extended ISO 8601 format, when the free trial of automated sensitive data discovery started for the account. If the account is a member account in an organization, this value is the same as the value for the organization's Amazon Macie administrator account. + /// The date and time, in UTC and extended ISO 8601 format, when the free trial of automated sensitive data discovery started for the account. This value is null if automated sensitive data discovery hasn't been enabled for the account. public var automatedDiscoveryFreeTrialStartDate: Foundation.Date? /// The date and time, in UTC and extended ISO 8601 format, when the Amazon Macie free trial started for the account. public var freeTrialStartDate: Foundation.Date? @@ -4435,7 +4598,40 @@ extension Macie2ClientTypes { extension Macie2ClientTypes { - /// The status of the automated sensitive data discovery configuration for an Amazon Macie account. Valid values are: + /// Specifies whether to automatically enable automated sensitive data discovery for accounts that are part of an organization in Amazon Macie. Valid values are: + public enum AutoEnableMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case all + case new + case `none` + case sdkUnknown(Swift.String) + + public static var allCases: [AutoEnableMode] { + return [ + .all, + .new, + .none + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .all: return "ALL" + case .new: return "NEW" + case .none: return "NONE" + case let .sdkUnknown(s): return s + } + } + } +} + +extension Macie2ClientTypes { + + /// The status of the automated sensitive data discovery configuration for an organization in Amazon Macie or a standalone Macie account. Valid values are: public enum AutomatedDiscoveryStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { case disabled case enabled @@ -4521,6 +4717,30 @@ public struct BatchGetCustomDataIdentifiersOutput { } } +public struct BatchUpdateAutomatedDiscoveryAccountsInput { + /// An array of objects, one for each account to change the status of automated sensitive data discovery for. Each object specifies the Amazon Web Services account ID for an account and a new status for that account. + public var accounts: [Macie2ClientTypes.AutomatedDiscoveryAccountUpdate]? + + public init( + accounts: [Macie2ClientTypes.AutomatedDiscoveryAccountUpdate]? = nil + ) + { + self.accounts = accounts + } +} + +public struct BatchUpdateAutomatedDiscoveryAccountsOutput { + /// An array of objects, one for each account whose status wasn’t changed. Each object identifies the account and explains why the status of automated sensitive data discovery wasn’t changed for the account. This value is null if the request succeeded for all specified accounts. + public var errors: [Macie2ClientTypes.AutomatedDiscoveryAccountUpdateError]? + + public init( + errors: [Macie2ClientTypes.AutomatedDiscoveryAccountUpdateError]? = nil + ) + { + self.errors = errors + } +} + extension Macie2ClientTypes { /// Provides information about the number of S3 buckets that are publicly accessible due to a combination of permissions settings for each bucket. public struct BucketCountByEffectivePermission { @@ -4777,7 +4997,7 @@ extension Macie2ClientTypes { extension Macie2ClientTypes { /// Specifies an S3 bucket to store data classification results in, and the encryption settings to use when storing results in that bucket. public struct S3Destination { - /// The name of the bucket. + /// The name of the bucket. This must be the name of an existing general purpose bucket. /// This member is required. public var bucketName: Swift.String? /// The path prefix to use in the path to the location in the bucket. This prefix specifies where to store classification results in the bucket. @@ -4801,7 +5021,7 @@ extension Macie2ClientTypes { } extension Macie2ClientTypes { - /// Specifies where to store data classification results, and the encryption settings to use when storing results in that location. The location must be an S3 bucket. + /// Specifies where to store data classification results, and the encryption settings to use when storing results in that location. The location must be an S3 general purpose bucket. public struct ClassificationExportConfiguration { /// The S3 bucket to store data classification results in, and the encryption settings to use when storing results in that bucket. public var s3Destination: Macie2ClientTypes.S3Destination? @@ -5120,7 +5340,7 @@ public struct CreateClassificationJobInput { /// /// * ONE_TIME - Run the job only once. If you specify this value, don't specify a value for the scheduleFrequency property. /// - /// * SCHEDULED - Run the job on a daily, weekly, or monthly basis. If you specify this value, use the scheduleFrequency property to define the recurrence pattern for the job. + /// * SCHEDULED - Run the job on a daily, weekly, or monthly basis. If you specify this value, use the scheduleFrequency property to specify the recurrence pattern for the job. /// This member is required. public var jobType: Macie2ClientTypes.JobType? /// An array of unique identifiers, one for each managed data identifier for the job to include (use) or exclude (not use) when it analyzes data. Inclusion or exclusion depends on the managed data identifier selection type that you specify for the job (managedDataIdentifierSelector). To retrieve a list of valid values for this property, use the ListManagedDataIdentifiers operation. @@ -5138,7 +5358,7 @@ public struct CreateClassificationJobInput { /// * RECOMMENDED (default) - Use the recommended set of managed data identifiers. If you specify this value, don't specify any values for the managedDataIdentifierIds property. /// /// - /// If you don't specify a value for this property, the job uses the recommended set of managed data identifiers. If the job is a recurring job and you specify ALL or EXCLUDE, each job run automatically uses new managed data identifiers that are released. If you don't specify a value for this property or you specify RECOMMENDED for a recurring job, each job run automatically uses all the managed data identifiers that are in the recommended set when the run starts. For information about individual managed data identifiers or to determine which ones are in the recommended set, see [Using managed data identifiers](https://docs.aws.amazon.com/macie/latest/user/managed-data-identifiers.html) and [Recommended managed data identifiers](https://docs.aws.amazon.com/macie/latest/user/discovery-jobs-mdis-recommended.html) in the Amazon Macie User Guide. + /// If you don't specify a value for this property, the job uses the recommended set of managed data identifiers. If the job is a recurring job and you specify ALL or EXCLUDE, each job run automatically uses new managed data identifiers that are released. If you don't specify a value for this property or you specify RECOMMENDED for a recurring job, each job run automatically uses all the managed data identifiers that are in the recommended set when the run starts. To learn about individual managed data identifiers or determine which ones are in the recommended set, see [Using managed data identifiers](https://docs.aws.amazon.com/macie/latest/user/managed-data-identifiers.html) or [Recommended managed data identifiers](https://docs.aws.amazon.com/macie/latest/user/discovery-jobs-mdis-recommended.html) in the Amazon Macie User Guide. public var managedDataIdentifierSelector: Macie2ClientTypes.ManagedDataIdentifierSelector? /// A custom name for the job. The name can contain as many as 500 characters. /// This member is required. @@ -5704,13 +5924,13 @@ extension Macie2ClientTypes { } public struct DescribeClassificationJobOutput { - /// An array of unique identifiers, one for each allow list that the job uses when it analyzes data. + /// An array of unique identifiers, one for each allow list that the job is configured to use when it analyzes data. public var allowListIds: [Swift.String]? /// The token that was provided to ensure the idempotency of the request to create the job. public var clientToken: Swift.String? /// The date and time, in UTC and extended ISO 8601 format, when the job was created. public var createdAt: Foundation.Date? - /// An array of unique identifiers, one for each custom data identifier that the job uses when it analyzes data. This value is null if the job uses only managed data identifiers to analyze data. + /// An array of unique identifiers, one for each custom data identifier that the job is configured to use when it analyzes data. This value is null if the job is configured to use only managed data identifiers to analyze data. public var customDataIdentifierIds: [Swift.String]? /// The custom description of the job. public var description: Swift.String? @@ -5759,7 +5979,7 @@ public struct DescribeClassificationJobOutput { /// * RECOMMENDED (default) - Use the recommended set of managed data identifiers. /// /// - /// If this value is null, the job uses the recommended set of managed data identifiers. If the job is a recurring job and this value is ALL or EXCLUDE, each job run automatically uses new managed data identifiers that are released. If this value is null or RECOMMENDED for a recurring job, each job run uses all the managed data identifiers that are in the recommended set when the run starts. For information about individual managed data identifiers or to determine which ones are in the recommended set, see [Using managed data identifiers](https://docs.aws.amazon.com/macie/latest/user/managed-data-identifiers.html) and [Recommended managed data identifiers](https://docs.aws.amazon.com/macie/latest/user/discovery-jobs-mdis-recommended.html) in the Amazon Macie User Guide. + /// If this value is null, the job uses the recommended set of managed data identifiers. If the job is a recurring job and this value is ALL or EXCLUDE, each job run automatically uses new managed data identifiers that are released. If this value is null or RECOMMENDED for a recurring job, each job run uses all the managed data identifiers that are in the recommended set when the run starts. To learn about individual managed data identifiers or determine which ones are in the recommended set, see [Using managed data identifiers](https://docs.aws.amazon.com/macie/latest/user/managed-data-identifiers.html) or [Recommended managed data identifiers](https://docs.aws.amazon.com/macie/latest/user/discovery-jobs-mdis-recommended.html) in the Amazon Macie User Guide. public var managedDataIdentifierSelector: Macie2ClientTypes.ManagedDataIdentifierSelector? /// The custom name of the job. public var name: Swift.String? @@ -5771,7 +5991,7 @@ public struct DescribeClassificationJobOutput { public var scheduleFrequency: Macie2ClientTypes.JobScheduleFrequency? /// The number of times that the job has run and processing statistics for the job's current run. public var statistics: Macie2ClientTypes.Statistics? - /// A map of key-value pairs that specifies which tags (keys and values) are associated with the classification job. + /// A map of key-value pairs that specifies which tags (keys and values) are associated with the job. public var tags: [Swift.String: Swift.String]? /// If the current status of the job is USER_PAUSED, specifies when the job was paused and when the job or job run will expire and be cancelled if it isn't resumed. This value is present only if the value for jobStatus is USER_PAUSED. public var userPausedDetails: Macie2ClientTypes.UserPausedDetails? @@ -6151,20 +6371,23 @@ public struct GetAutomatedDiscoveryConfigurationInput { } public struct GetAutomatedDiscoveryConfigurationOutput { - /// The unique identifier for the classification scope that's used when performing automated sensitive data discovery for the account. The classification scope specifies S3 buckets to exclude from automated sensitive data discovery. + /// Specifies whether automated sensitive data discovery is enabled automatically for accounts in the organization. Possible values are: ALL, enable it for all existing accounts and new member accounts; NEW, enable it only for new member accounts; and, NONE, don't enable it for any accounts. + public var autoEnableOrganizationMembers: Macie2ClientTypes.AutoEnableMode? + /// The unique identifier for the classification scope that's used when performing automated sensitive data discovery. The classification scope specifies S3 buckets to exclude from analyses. public var classificationScopeId: Swift.String? - /// The date and time, in UTC and extended ISO 8601 format, when automated sensitive data discovery was most recently disabled for the account. This value is null if automated sensitive data discovery wasn't enabled and subsequently disabled for the account. + /// The date and time, in UTC and extended ISO 8601 format, when automated sensitive data discovery was most recently disabled. This value is null if automated sensitive data discovery is currently enabled. public var disabledAt: Foundation.Date? - /// The date and time, in UTC and extended ISO 8601 format, when automated sensitive data discovery was initially enabled for the account. This value is null if automated sensitive data discovery has never been enabled for the account. + /// The date and time, in UTC and extended ISO 8601 format, when automated sensitive data discovery was initially enabled. This value is null if automated sensitive data discovery has never been enabled. public var firstEnabledAt: Foundation.Date? - /// The date and time, in UTC and extended ISO 8601 format, when automated sensitive data discovery was most recently enabled or disabled for the account. + /// The date and time, in UTC and extended ISO 8601 format, when the configuration settings or status of automated sensitive data discovery was most recently changed. public var lastUpdatedAt: Foundation.Date? - /// The unique identifier for the sensitivity inspection template that's used when performing automated sensitive data discovery for the account. The template specifies which allow lists, custom data identifiers, and managed data identifiers to use when analyzing data. + /// The unique identifier for the sensitivity inspection template that's used when performing automated sensitive data discovery. The template specifies which allow lists, custom data identifiers, and managed data identifiers to use when analyzing data. public var sensitivityInspectionTemplateId: Swift.String? - /// The current status of the automated sensitive data discovery configuration for the account. Possible values are: ENABLED, use the specified settings to perform automated sensitive data discovery activities for the account; and, DISABLED, don't perform automated sensitive data discovery activities for the account. + /// The current status of automated sensitive data discovery for the organization or account. Possible values are: ENABLED, use the specified settings to perform automated sensitive data discovery activities; and, DISABLED, don't perform automated sensitive data discovery activities. public var status: Macie2ClientTypes.AutomatedDiscoveryStatus? public init( + autoEnableOrganizationMembers: Macie2ClientTypes.AutoEnableMode? = nil, classificationScopeId: Swift.String? = nil, disabledAt: Foundation.Date? = nil, firstEnabledAt: Foundation.Date? = nil, @@ -6173,6 +6396,7 @@ public struct GetAutomatedDiscoveryConfigurationOutput { status: Macie2ClientTypes.AutomatedDiscoveryStatus? = nil ) { + self.autoEnableOrganizationMembers = autoEnableOrganizationMembers self.classificationScopeId = classificationScopeId self.disabledAt = disabledAt self.firstEnabledAt = firstEnabledAt @@ -6770,7 +6994,7 @@ public struct GetResourceProfileInput { } extension Macie2ClientTypes { - /// Provides statistical data for sensitive data discovery metrics that apply to an S3 bucket that Amazon Macie monitors and analyzes for your account. The statistics capture the results of automated sensitive data discovery activities that Macie has performed for the bucket. The data is available only if automated sensitive data discovery is currently enabled for your account. + /// Provides statistical data for sensitive data discovery metrics that apply to an S3 bucket that Amazon Macie monitors and analyzes for an account, if automated sensitive data discovery has been enabled for the account. The data captures the results of automated sensitive data discovery activities that Macie has performed for the bucket. public struct ResourceStatistics { /// The total amount of data, in bytes, that Amazon Macie has analyzed in the bucket. public var totalBytesClassified: Swift.Int? @@ -7156,7 +7380,7 @@ public struct GetSensitivityInspectionTemplateInput { } extension Macie2ClientTypes { - /// Specifies managed data identifiers to exclude (not use) when performing automated sensitive data discovery for an Amazon Macie account. For information about the managed data identifiers that Amazon Macie currently provides, see [Using managed data identifiers](https://docs.aws.amazon.com/macie/latest/user/managed-data-identifiers.html) in the Amazon Macie User Guide. + /// Specifies managed data identifiers to exclude (not use) when performing automated sensitive data discovery. For information about the managed data identifiers that Amazon Macie currently provides, see [Using managed data identifiers](https://docs.aws.amazon.com/macie/latest/user/managed-data-identifiers.html) in the Amazon Macie User Guide. public struct SensitivityInspectionTemplateExcludes { /// An array of unique identifiers, one for each managed data identifier to exclude. To retrieve a list of valid values, use the ListManagedDataIdentifiers operation. public var managedDataIdentifierIds: [Swift.String]? @@ -7172,7 +7396,7 @@ extension Macie2ClientTypes { } extension Macie2ClientTypes { - /// Specifies the allow lists, custom data identifiers, and managed data identifiers to include (use) when performing automated sensitive data discovery for an Amazon Macie account. The configuration must specify at least one custom data identifier or managed data identifier. For information about the managed data identifiers that Amazon Macie currently provides, see [Using managed data identifiers](https://docs.aws.amazon.com/macie/latest/user/managed-data-identifiers.html) in the Amazon Macie User Guide. + /// Specifies the allow lists, custom data identifiers, and managed data identifiers to include (use) when performing automated sensitive data discovery. The configuration must specify at least one custom data identifier or managed data identifier. For information about the managed data identifiers that Amazon Macie currently provides, see [Using managed data identifiers](https://docs.aws.amazon.com/macie/latest/user/managed-data-identifiers.html) in the Amazon Macie User Guide. public struct SensitivityInspectionTemplateIncludes { /// An array of unique identifiers, one for each allow list to include. public var allowListIds: [Swift.String]? @@ -7198,9 +7422,9 @@ extension Macie2ClientTypes { public struct GetSensitivityInspectionTemplateOutput { /// The custom description of the template. public var description: Swift.String? - /// The managed data identifiers that are explicitly excluded (not used) when analyzing data. + /// The managed data identifiers that are explicitly excluded (not used) when performing automated sensitive data discovery. public var excludes: Macie2ClientTypes.SensitivityInspectionTemplateExcludes? - /// The allow lists, custom data identifiers, and managed data identifiers that are explicitly included (used) when analyzing data. + /// The allow lists, custom data identifiers, and managed data identifiers that are explicitly included (used) when performing automated sensitive data discovery. public var includes: Macie2ClientTypes.SensitivityInspectionTemplateIncludes? /// The name of the template: automated-sensitive-data-discovery. public var name: Swift.String? @@ -7417,6 +7641,42 @@ public struct ListAllowListsOutput { } } +public struct ListAutomatedDiscoveryAccountsInput { + /// The Amazon Web Services account ID for each account, for as many as 50 accounts. To retrieve the status for multiple accounts, append the accountIds parameter and argument for each account, separated by an ampersand (&). To retrieve the status for all the accounts in an organization, omit this parameter. + public var accountIds: [Swift.String]? + /// The maximum number of items to include in each page of a paginated response. + public var maxResults: Swift.Int? + /// The nextToken string that specifies which page of results to return in a paginated response. + public var nextToken: Swift.String? + + public init( + accountIds: [Swift.String]? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.accountIds = accountIds + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +public struct ListAutomatedDiscoveryAccountsOutput { + /// An array of objects, one for each account specified in the request. Each object specifies the Amazon Web Services account ID for an account and the current status of automated sensitive data discovery for that account. + public var items: [Macie2ClientTypes.AutomatedDiscoveryAccount]? + /// The string to use in a subsequent request to get the next page of results in a paginated response. This value is null if there are no additional pages. + public var nextToken: Swift.String? + + public init( + items: [Macie2ClientTypes.AutomatedDiscoveryAccount]? = nil, + nextToken: Swift.String? = nil + ) + { + self.items = items + self.nextToken = nextToken + } +} + extension Macie2ClientTypes { /// Specifies criteria for filtering the results of a request for information about classification jobs. public struct ListJobsFilterCriteria { @@ -8234,14 +8494,18 @@ public struct UpdateAllowListOutput { } public struct UpdateAutomatedDiscoveryConfigurationInput { - /// The new status of automated sensitive data discovery for the account. Valid values are: ENABLED, start or resume automated sensitive data discovery activities for the account; and, DISABLED, stop performing automated sensitive data discovery activities for the account. When you enable automated sensitive data discovery for the first time, Amazon Macie uses default configuration settings to determine which data sources to analyze and which managed data identifiers to use. To change these settings, use the UpdateClassificationScope and UpdateSensitivityInspectionTemplate operations, respectively. If you change the settings and subsequently disable the configuration, Amazon Macie retains your changes. + /// Specifies whether to automatically enable automated sensitive data discovery for accounts in the organization. Valid values are: ALL (default), enable it for all existing accounts and new member accounts; NEW, enable it only for new member accounts; and, NONE, don't enable it for any accounts. If you specify NEW or NONE, automated sensitive data discovery continues to be enabled for any existing accounts that it's currently enabled for. To enable or disable it for individual member accounts, specify NEW or NONE, and then enable or disable it for each account by using the BatchUpdateAutomatedDiscoveryAccounts operation. + public var autoEnableOrganizationMembers: Macie2ClientTypes.AutoEnableMode? + /// The new status of automated sensitive data discovery for the organization or account. Valid values are: ENABLED, start or resume all automated sensitive data discovery activities; and, DISABLED, stop performing all automated sensitive data discovery activities. If you specify DISABLED for an administrator account, you also disable automated sensitive data discovery for all member accounts in the organization. /// This member is required. public var status: Macie2ClientTypes.AutomatedDiscoveryStatus? public init( + autoEnableOrganizationMembers: Macie2ClientTypes.AutoEnableMode? = nil, status: Macie2ClientTypes.AutomatedDiscoveryStatus? = nil ) { + self.autoEnableOrganizationMembers = autoEnableOrganizationMembers self.status = status } } @@ -8445,7 +8709,7 @@ public struct UpdateMemberSessionOutput { } public struct UpdateOrganizationConfigurationInput { - /// Specifies whether to enable Amazon Macie automatically for an account when the account is added to the organization in Organizations. + /// Specifies whether to enable Amazon Macie automatically for accounts that are added to the organization in Organizations. /// This member is required. public var autoEnable: Swift.Bool? @@ -8563,12 +8827,12 @@ public struct UpdateRevealConfigurationOutput { public struct UpdateSensitivityInspectionTemplateInput { /// A custom description of the template. The description can contain as many as 200 characters. public var description: Swift.String? - /// The managed data identifiers to explicitly exclude (not use) when analyzing data. To exclude an allow list or custom data identifier that's currently included by the template, update the values for the SensitivityInspectionTemplateIncludes.allowListIds and SensitivityInspectionTemplateIncludes.customDataIdentifierIds properties, respectively. + /// The managed data identifiers to explicitly exclude (not use) when performing automated sensitive data discovery. To exclude an allow list or custom data identifier that's currently included by the template, update the values for the SensitivityInspectionTemplateIncludes.allowListIds and SensitivityInspectionTemplateIncludes.customDataIdentifierIds properties, respectively. public var excludes: Macie2ClientTypes.SensitivityInspectionTemplateExcludes? /// The unique identifier for the Amazon Macie resource that the request applies to. /// This member is required. public var id: Swift.String? - /// The allow lists, custom data identifiers, and managed data identifiers to explicitly include (use) when analyzing data. + /// The allow lists, custom data identifiers, and managed data identifiers to explicitly include (use) when performing automated sensitive data discovery. public var includes: Macie2ClientTypes.SensitivityInspectionTemplateIncludes? public init( @@ -8604,6 +8868,13 @@ extension BatchGetCustomDataIdentifiersInput { } } +extension BatchUpdateAutomatedDiscoveryAccountsInput { + + static func urlPathProvider(_ value: BatchUpdateAutomatedDiscoveryAccountsInput) -> Swift.String? { + return "/automated-discovery/accounts" + } +} + extension CreateAllowListInput { static func urlPathProvider(_ value: CreateAllowListInput) -> Swift.String? { @@ -9036,6 +9307,35 @@ extension ListAllowListsInput { } } +extension ListAutomatedDiscoveryAccountsInput { + + static func urlPathProvider(_ value: ListAutomatedDiscoveryAccountsInput) -> Swift.String? { + return "/automated-discovery/accounts" + } +} + +extension ListAutomatedDiscoveryAccountsInput { + + static func queryItemProvider(_ value: ListAutomatedDiscoveryAccountsInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let accountIds = value.accountIds { + accountIds.forEach { queryItemValue in + let queryItem = Smithy.URIQueryItem(name: "accountIds".urlPercentEncoding(), value: Swift.String(queryItemValue).urlPercentEncoding()) + items.append(queryItem) + } + } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + return items + } +} + extension ListClassificationJobsInput { static func urlPathProvider(_ value: ListClassificationJobsInput) -> Swift.String? { @@ -9482,6 +9782,14 @@ extension BatchGetCustomDataIdentifiersInput { } } +extension BatchUpdateAutomatedDiscoveryAccountsInput { + + static func write(value: BatchUpdateAutomatedDiscoveryAccountsInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["accounts"].writeList(value.accounts, memberWritingClosure: Macie2ClientTypes.AutomatedDiscoveryAccountUpdate.write(value:to:), memberNodeInfo: "member", isFlattened: false) + } +} + extension CreateAllowListInput { static func write(value: CreateAllowListInput?, to writer: SmithyJSON.Writer) throws { @@ -9758,6 +10066,7 @@ extension UpdateAutomatedDiscoveryConfigurationInput { static func write(value: UpdateAutomatedDiscoveryConfigurationInput?, to writer: SmithyJSON.Writer) throws { guard let value else { return } + try writer["autoEnableOrganizationMembers"].write(value.autoEnableOrganizationMembers) try writer["status"].write(value.status) } } @@ -9871,6 +10180,18 @@ extension BatchGetCustomDataIdentifiersOutput { } } +extension BatchUpdateAutomatedDiscoveryAccountsOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> BatchUpdateAutomatedDiscoveryAccountsOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = BatchUpdateAutomatedDiscoveryAccountsOutput() + value.errors = try reader["errors"].readListIfPresent(memberReadingClosure: Macie2ClientTypes.AutomatedDiscoveryAccountUpdateError.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + extension CreateAllowListOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CreateAllowListOutput { @@ -10151,6 +10472,7 @@ extension GetAutomatedDiscoveryConfigurationOutput { let responseReader = try SmithyJSON.Reader.from(data: data) let reader = responseReader var value = GetAutomatedDiscoveryConfigurationOutput() + value.autoEnableOrganizationMembers = try reader["autoEnableOrganizationMembers"].readIfPresent() value.classificationScopeId = try reader["classificationScopeId"].readIfPresent() value.disabledAt = try reader["disabledAt"].readTimestampIfPresent(format: .dateTime) value.firstEnabledAt = try reader["firstEnabledAt"].readTimestampIfPresent(format: .dateTime) @@ -10461,6 +10783,19 @@ extension ListAllowListsOutput { } } +extension ListAutomatedDiscoveryAccountsOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListAutomatedDiscoveryAccountsOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListAutomatedDiscoveryAccountsOutput() + value.items = try reader["items"].readListIfPresent(memberReadingClosure: Macie2ClientTypes.AutomatedDiscoveryAccount.read(from:), memberNodeInfo: "member", isFlattened: false) + value.nextToken = try reader["nextToken"].readIfPresent() + return value + } +} + extension ListClassificationJobsOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListClassificationJobsOutput { @@ -10829,6 +11164,24 @@ enum BatchGetCustomDataIdentifiersOutputError { } } +enum BatchUpdateAutomatedDiscoveryAccountsOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum CreateAllowListOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -11727,6 +12080,24 @@ enum ListAllowListsOutputError { } } +enum ListAutomatedDiscoveryAccountsOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum ListClassificationJobsOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -12416,6 +12787,17 @@ extension Macie2ClientTypes.BatchGetCustomDataIdentifierSummary { } } +extension Macie2ClientTypes.AutomatedDiscoveryAccountUpdateError { + + static func read(from reader: SmithyJSON.Reader) throws -> Macie2ClientTypes.AutomatedDiscoveryAccountUpdateError { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = Macie2ClientTypes.AutomatedDiscoveryAccountUpdateError() + value.accountId = try reader["accountId"].readIfPresent() + value.errorCode = try reader["errorCode"].readIfPresent() + return value + } +} + extension Macie2ClientTypes.UnprocessedAccount { static func read(from reader: SmithyJSON.Reader) throws -> Macie2ClientTypes.UnprocessedAccount { @@ -12435,6 +12817,7 @@ extension Macie2ClientTypes.BucketMetadata { var value = Macie2ClientTypes.BucketMetadata() value.accountId = try reader["accountId"].readIfPresent() value.allowsUnencryptedObjectUploads = try reader["allowsUnencryptedObjectUploads"].readIfPresent() + value.automatedDiscoveryMonitoringStatus = try reader["automatedDiscoveryMonitoringStatus"].readIfPresent() value.bucketArn = try reader["bucketArn"].readIfPresent() value.bucketCreatedAt = try reader["bucketCreatedAt"].readTimestampIfPresent(format: .dateTime) value.bucketName = try reader["bucketName"].readIfPresent() @@ -13887,6 +14270,17 @@ extension Macie2ClientTypes.AllowListSummary { } } +extension Macie2ClientTypes.AutomatedDiscoveryAccount { + + static func read(from reader: SmithyJSON.Reader) throws -> Macie2ClientTypes.AutomatedDiscoveryAccount { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = Macie2ClientTypes.AutomatedDiscoveryAccount() + value.accountId = try reader["accountId"].readIfPresent() + value.status = try reader["status"].readIfPresent() + return value + } +} + extension Macie2ClientTypes.JobSummary { static func read(from reader: SmithyJSON.Reader) throws -> Macie2ClientTypes.JobSummary { @@ -14038,6 +14432,7 @@ extension Macie2ClientTypes.MatchingBucket { guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } var value = Macie2ClientTypes.MatchingBucket() value.accountId = try reader["accountId"].readIfPresent() + value.automatedDiscoveryMonitoringStatus = try reader["automatedDiscoveryMonitoringStatus"].readIfPresent() value.bucketName = try reader["bucketName"].readIfPresent() value.classifiableObjectCount = try reader["classifiableObjectCount"].readIfPresent() value.classifiableSizeInBytes = try reader["classifiableSizeInBytes"].readIfPresent() @@ -14056,6 +14451,15 @@ extension Macie2ClientTypes.MatchingBucket { } } +extension Macie2ClientTypes.AutomatedDiscoveryAccountUpdate { + + static func write(value: Macie2ClientTypes.AutomatedDiscoveryAccountUpdate?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["accountId"].write(value.accountId) + try writer["status"].write(value.status) + } +} + extension Macie2ClientTypes.AccountDetail { static func write(value: Macie2ClientTypes.AccountDetail?, to writer: SmithyJSON.Writer) throws { diff --git a/Sources/Services/AWSMacie2/Sources/AWSMacie2/Paginators.swift b/Sources/Services/AWSMacie2/Sources/AWSMacie2/Paginators.swift index ca9c961ceb9..c7f20596704 100644 --- a/Sources/Services/AWSMacie2/Sources/AWSMacie2/Paginators.swift +++ b/Sources/Services/AWSMacie2/Sources/AWSMacie2/Paginators.swift @@ -98,6 +98,37 @@ extension PaginatorSequence where OperationStackInput == ListAllowListsInput, Op return try await self.asyncCompactMap { item in item.allowLists } } } +extension Macie2Client { + /// Paginate over `[ListAutomatedDiscoveryAccountsOutput]` results. + /// + /// When this operation is called, an `AsyncSequence` is created. AsyncSequences are lazy so no service + /// calls are made until the sequence is iterated over. This also means there is no guarantee that the request is valid + /// until then. If there are errors in your request, you will see the failures only after you start iterating. + /// - Parameters: + /// - input: A `[ListAutomatedDiscoveryAccountsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListAutomatedDiscoveryAccountsOutput` + public func listAutomatedDiscoveryAccountsPaginated(input: ListAutomatedDiscoveryAccountsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \.nextToken, outputKey: \.nextToken, paginationFunction: self.listAutomatedDiscoveryAccounts(input:)) + } +} + +extension ListAutomatedDiscoveryAccountsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListAutomatedDiscoveryAccountsInput { + return ListAutomatedDiscoveryAccountsInput( + accountIds: self.accountIds, + maxResults: self.maxResults, + nextToken: token + )} +} + +extension PaginatorSequence where OperationStackInput == ListAutomatedDiscoveryAccountsInput, OperationStackOutput == ListAutomatedDiscoveryAccountsOutput { + /// This paginator transforms the `AsyncSequence` returned by `listAutomatedDiscoveryAccountsPaginated` + /// to access the nested member `[Macie2ClientTypes.AutomatedDiscoveryAccount]` + /// - Returns: `[Macie2ClientTypes.AutomatedDiscoveryAccount]` + public func items() async throws -> [Macie2ClientTypes.AutomatedDiscoveryAccount] { + return try await self.asyncCompactMap { item in item.items } + } +} extension Macie2Client { /// Paginate over `[ListClassificationJobsOutput]` results. /// diff --git a/Sources/Services/AWSMediaConvert/Sources/AWSMediaConvert/MediaConvertClient.swift b/Sources/Services/AWSMediaConvert/Sources/AWSMediaConvert/MediaConvertClient.swift index 45c546d7827..38cf2d98429 100644 --- a/Sources/Services/AWSMediaConvert/Sources/AWSMediaConvert/MediaConvertClient.swift +++ b/Sources/Services/AWSMediaConvert/Sources/AWSMediaConvert/MediaConvertClient.swift @@ -705,7 +705,7 @@ extension MediaConvertClient { /// Performs the `DescribeEndpoints` operation on the `MediaConvert` service. /// - /// Send an request with an empty body to the regional API endpoint to get your account API endpoint. + /// Send a request with an empty body to the regional API endpoint to get your account API endpoint. Note that DescribeEndpoints is no longer required. We recommend that you send your requests directly to the regional endpoint instead. @available(*, deprecated, message: "DescribeEndpoints and account specific endpoints are no longer required. We recommend that you send your requests directly to the regional endpoint instead.") /// /// - Parameter DescribeEndpointsInput : [no documentation found] @@ -1403,6 +1403,60 @@ extension MediaConvertClient { return try await op.execute(input: input) } + /// Performs the `SearchJobs` operation on the `MediaConvert` service. + /// + /// Retrieve a JSON array that includes job details for up to twenty of your most recent jobs. Optionally filter results further according to input file, queue, or status. To retrieve the twenty next most recent jobs, use the nextToken string returned with the array. + /// + /// - Parameter SearchJobsInput : [no documentation found] + /// + /// - Returns: `SearchJobsOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `BadRequestException` : The service can't process your request because of a problem in the request. Please check your request form and syntax. + /// - `ConflictException` : The service couldn't complete your request because there is a conflict with the current state of the resource. + /// - `ForbiddenException` : You don't have permissions for this action with the credentials you sent. + /// - `InternalServerErrorException` : The service encountered an unexpected condition and can't fulfill your request. + /// - `NotFoundException` : The resource you requested doesn't exist. + /// - `TooManyRequestsException` : Too many requests have been sent in too short of a time. The service limits the rate at which it will accept requests. + public func searchJobs(input: SearchJobsInput) async throws -> SearchJobsOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "searchJobs") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "mediaconvert") + .withSigningRegion(value: config.signingRegion) + .build() + let builder = ClientRuntime.OrchestratorBuilder() + builder.interceptors.add(ClientRuntime.URLPathMiddleware(SearchJobsInput.urlPathProvider(_:))) + builder.interceptors.add(ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + builder.applyEndpoint(AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + builder.interceptors.add(AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + builder.selectAuthScheme(ClientRuntime.AuthSchemeMiddleware()) + builder.serialize(ClientRuntime.QueryItemMiddleware(SearchJobsInput.queryItemProvider(_:))) + builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) + builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) + builder.applySigner(ClientRuntime.SignerMiddleware()) + builder.deserialize(ClientRuntime.DeserializeMiddleware(SearchJobsOutput.httpOutput(from:), SearchJobsOutputError.httpError(from:))) + builder.interceptors.add(ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let op = builder.attributes(context) + .executeRequest(client) + .build() + return try await op.execute(input: input) + } + /// Performs the `TagResource` operation on the `MediaConvert` service. /// /// Add tags to a MediaConvert queue, preset, or job template. For information about tagging, see the User Guide at https://docs.aws.amazon.com/mediaconvert/latest/ug/tagging-resources.html diff --git a/Sources/Services/AWSMediaConvert/Sources/AWSMediaConvert/Models.swift b/Sources/Services/AWSMediaConvert/Sources/AWSMediaConvert/Models.swift index c661f993c6d..238a92479e1 100644 --- a/Sources/Services/AWSMediaConvert/Sources/AWSMediaConvert/Models.swift +++ b/Sources/Services/AWSMediaConvert/Sources/AWSMediaConvert/Models.swift @@ -6262,14 +6262,30 @@ extension MediaConvertClientTypes { extension MediaConvertClientTypes { /// When you include Video generator, MediaConvert creates a video input with black frames. Use this setting if you do not have a video input or if you want to add black video frames before, or after, other inputs. You can specify Video generator, or you can specify an Input file, but you cannot specify both. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/video-generator.html public struct InputVideoGenerator { - /// Specify an integer value for Black video duration from 50 to 86400000 to generate a black video input for that many milliseconds. Required when you include Video generator. + /// Specify the number of audio channels to include in your video generator input. MediaConvert creates these audio channels as silent audio within a single audio track. Enter an integer from 1 to 32. + public var channels: Swift.Int? + /// Specify the duration, in milliseconds, for your video generator input. Enter an integer from 50 to 86400000. public var duration: Swift.Int? + /// Specify the denominator of the fraction that represents the frame rate for your video generator input. When you do, you must also specify a value for Frame rate numerator. MediaConvert uses a default frame rate of 29.97 when you leave Frame rate numerator and Frame rate denominator blank. + public var framerateDenominator: Swift.Int? + /// Specify the numerator of the fraction that represents the frame rate for your video generator input. When you do, you must also specify a value for Frame rate denominator. MediaConvert uses a default frame rate of 29.97 when you leave Frame rate numerator and Frame rate denominator blank. + public var framerateNumerator: Swift.Int? + /// Specify the audio sample rate, in Hz, for the silent audio in your video generator input. Enter an integer from 32000 to 48000. + public var sampleRate: Swift.Int? public init( - duration: Swift.Int? = nil + channels: Swift.Int? = nil, + duration: Swift.Int? = nil, + framerateDenominator: Swift.Int? = nil, + framerateNumerator: Swift.Int? = nil, + sampleRate: Swift.Int? = nil ) { + self.channels = channels self.duration = duration + self.framerateDenominator = framerateDenominator + self.framerateNumerator = framerateNumerator + self.sampleRate = sampleRate } } @@ -8674,6 +8690,8 @@ extension MediaConvertClientTypes { public var clientCache: MediaConvertClientTypes.CmafClientCache? /// Specification to use (RFC-6381 or the default RFC-4281) during m3u8 playlist generation. public var codecSpecification: MediaConvertClientTypes.CmafCodecSpecification? + /// Specify whether MediaConvert generates I-frame only video segments for DASH trick play, also known as trick mode. When specified, the I-frame only video segments are included within an additional AdaptationSet in your DASH output manifest. To generate I-frame only video segments: Enter a name as a text string, up to 256 character long. This name is appended to the end of this output group's base filename, that you specify as part of your destination URI, and used for the I-frame only video segment files. You may also include format identifiers. For more information, see: https://docs.aws.amazon.com/mediaconvert/latest/ug/using-variables-in-your-job-settings.html#using-settings-variables-with-streaming-outputs To not generate I-frame only video segments: Leave blank. + public var dashIFrameTrickPlayNameModifier: Swift.String? /// Specify how MediaConvert writes SegmentTimeline in your output DASH manifest. To write a SegmentTimeline in each video Representation: Keep the default value, Basic. To write a common SegmentTimeline in the video AdaptationSet: Choose Compact. Note that MediaConvert will still write a SegmentTimeline in any Representation that does not share a common timeline. To write a video AdaptationSet for each different output framerate, and a common SegmentTimeline in each AdaptationSet: Choose Distinct. public var dashManifestStyle: MediaConvertClientTypes.DashManifestStyle? /// Use Destination to specify the S3 output location and the output filename base. Destination accepts format identifiers. If you do not specify the base filename in the URI, the service will use the filename of the input file. If your job has multiple inputs, the service uses the filename of the first input file. @@ -8726,6 +8744,7 @@ extension MediaConvertClientTypes { baseUrl: Swift.String? = nil, clientCache: MediaConvertClientTypes.CmafClientCache? = nil, codecSpecification: MediaConvertClientTypes.CmafCodecSpecification? = nil, + dashIFrameTrickPlayNameModifier: Swift.String? = nil, dashManifestStyle: MediaConvertClientTypes.DashManifestStyle? = nil, destination: Swift.String? = nil, destinationSettings: MediaConvertClientTypes.DestinationSettings? = nil, @@ -8755,6 +8774,7 @@ extension MediaConvertClientTypes { self.baseUrl = baseUrl self.clientCache = clientCache self.codecSpecification = codecSpecification + self.dashIFrameTrickPlayNameModifier = dashIFrameTrickPlayNameModifier self.dashManifestStyle = dashManifestStyle self.destination = destination self.destinationSettings = destinationSettings @@ -9242,6 +9262,8 @@ extension MediaConvertClientTypes { public var audioChannelConfigSchemeIdUri: MediaConvertClientTypes.DashIsoGroupAudioChannelConfigSchemeIdUri? /// A partial URI prefix that will be put in the manifest (.mpd) file at the top level BaseURL element. Can be used if streams are delivered from a different URL than the manifest file. public var baseUrl: Swift.String? + /// Specify whether MediaConvert generates I-frame only video segments for DASH trick play, also known as trick mode. When specified, the I-frame only video segments are included within an additional AdaptationSet in your DASH output manifest. To generate I-frame only video segments: Enter a name as a text string, up to 256 character long. This name is appended to the end of this output group's base filename, that you specify as part of your destination URI, and used for the I-frame only video segment files. You may also include format identifiers. For more information, see: https://docs.aws.amazon.com/mediaconvert/latest/ug/using-variables-in-your-job-settings.html#using-settings-variables-with-streaming-outputs To not generate I-frame only video segments: Leave blank. + public var dashIFrameTrickPlayNameModifier: Swift.String? /// Specify how MediaConvert writes SegmentTimeline in your output DASH manifest. To write a SegmentTimeline in each video Representation: Keep the default value, Basic. To write a common SegmentTimeline in the video AdaptationSet: Choose Compact. Note that MediaConvert will still write a SegmentTimeline in any Representation that does not share a common timeline. To write a video AdaptationSet for each different output framerate, and a common SegmentTimeline in each AdaptationSet: Choose Distinct. public var dashManifestStyle: MediaConvertClientTypes.DashManifestStyle? /// Use Destination to specify the S3 output location and the output filename base. Destination accepts format identifiers. If you do not specify the base filename in the URI, the service will use the filename of the input file. If your job has multiple inputs, the service uses the filename of the first input file. @@ -9283,6 +9305,7 @@ extension MediaConvertClientTypes { additionalManifests: [MediaConvertClientTypes.DashAdditionalManifest]? = nil, audioChannelConfigSchemeIdUri: MediaConvertClientTypes.DashIsoGroupAudioChannelConfigSchemeIdUri? = nil, baseUrl: Swift.String? = nil, + dashIFrameTrickPlayNameModifier: Swift.String? = nil, dashManifestStyle: MediaConvertClientTypes.DashManifestStyle? = nil, destination: Swift.String? = nil, destinationSettings: MediaConvertClientTypes.DestinationSettings? = nil, @@ -9306,6 +9329,7 @@ extension MediaConvertClientTypes { self.additionalManifests = additionalManifests self.audioChannelConfigSchemeIdUri = audioChannelConfigSchemeIdUri self.baseUrl = baseUrl + self.dashIFrameTrickPlayNameModifier = dashIFrameTrickPlayNameModifier self.dashManifestStyle = dashManifestStyle self.destination = destination self.destinationSettings = destinationSettings @@ -22395,6 +22419,54 @@ public struct PutPolicyOutput { } } +public struct SearchJobsInput { + /// Optional. Provide your input file URL or your partial input file name. The maximum length for an input file is 300 characters. + public var inputFile: Swift.String? + /// Optional. Number of jobs, up to twenty, that will be returned at one time. + public var maxResults: Swift.Int? + /// Optional. Use this string, provided with the response to a previous request, to request the next batch of jobs. + public var nextToken: Swift.String? + /// Optional. When you request lists of resources, you can specify whether they are sorted in ASCENDING or DESCENDING order. Default varies by resource. + public var order: MediaConvertClientTypes.Order? + /// Optional. Provide a queue name, or a queue ARN, to return only jobs from that queue. + public var queue: Swift.String? + /// Optional. A job's status can be SUBMITTED, PROGRESSING, COMPLETE, CANCELED, or ERROR. + public var status: MediaConvertClientTypes.JobStatus? + + public init( + inputFile: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + order: MediaConvertClientTypes.Order? = nil, + queue: Swift.String? = nil, + status: MediaConvertClientTypes.JobStatus? = nil + ) + { + self.inputFile = inputFile + self.maxResults = maxResults + self.nextToken = nextToken + self.order = order + self.queue = queue + self.status = status + } +} + +public struct SearchJobsOutput { + /// List of jobs. + public var jobs: [MediaConvertClientTypes.Job]? + /// Use this string to request the next batch of jobs. + public var nextToken: Swift.String? + + public init( + jobs: [MediaConvertClientTypes.Job]? = nil, + nextToken: Swift.String? = nil + ) + { + self.jobs = jobs + self.nextToken = nextToken + } +} + public struct TagResourceInput { /// The Amazon Resource Name (ARN) of the resource that you want to tag. To get the ARN, send a GET request with the resource name. /// This member is required. @@ -22870,6 +22942,45 @@ extension PutPolicyInput { } } +extension SearchJobsInput { + + static func urlPathProvider(_ value: SearchJobsInput) -> Swift.String? { + return "/2017-08-29/search" + } +} + +extension SearchJobsInput { + + static func queryItemProvider(_ value: SearchJobsInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let order = value.order { + let orderQueryItem = Smithy.URIQueryItem(name: "order".urlPercentEncoding(), value: Swift.String(order.rawValue).urlPercentEncoding()) + items.append(orderQueryItem) + } + if let status = value.status { + let statusQueryItem = Smithy.URIQueryItem(name: "status".urlPercentEncoding(), value: Swift.String(status.rawValue).urlPercentEncoding()) + items.append(statusQueryItem) + } + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + if let queue = value.queue { + let queueQueryItem = Smithy.URIQueryItem(name: "queue".urlPercentEncoding(), value: Swift.String(queue).urlPercentEncoding()) + items.append(queueQueryItem) + } + if let inputFile = value.inputFile { + let inputFileQueryItem = Smithy.URIQueryItem(name: "inputFile".urlPercentEncoding(), value: Swift.String(inputFile).urlPercentEncoding()) + items.append(inputFileQueryItem) + } + return items + } +} + extension TagResourceInput { static func urlPathProvider(_ value: TagResourceInput) -> Swift.String? { @@ -23303,6 +23414,19 @@ extension PutPolicyOutput { } } +extension SearchJobsOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> SearchJobsOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = SearchJobsOutput() + value.jobs = try reader["jobs"].readListIfPresent(memberReadingClosure: MediaConvertClientTypes.Job.read(from:), memberNodeInfo: "member", isFlattened: false) + value.nextToken = try reader["nextToken"].readIfPresent() + return value + } +} + extension TagResourceOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> TagResourceOutput { @@ -23790,6 +23914,25 @@ enum PutPolicyOutputError { } } +enum SearchJobsOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "BadRequestException": return try BadRequestException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "ForbiddenException": return try ForbiddenException.makeError(baseError: baseError) + case "InternalServerErrorException": return try InternalServerErrorException.makeError(baseError: baseError) + case "NotFoundException": return try NotFoundException.makeError(baseError: baseError) + case "TooManyRequestsException": return try TooManyRequestsException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum TagResourceOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { @@ -27080,6 +27223,7 @@ extension MediaConvertClientTypes.DashIsoGroupSettings { try writer["additionalManifests"].writeList(value.additionalManifests, memberWritingClosure: MediaConvertClientTypes.DashAdditionalManifest.write(value:to:), memberNodeInfo: "member", isFlattened: false) try writer["audioChannelConfigSchemeIdUri"].write(value.audioChannelConfigSchemeIdUri) try writer["baseUrl"].write(value.baseUrl) + try writer["dashIFrameTrickPlayNameModifier"].write(value.dashIFrameTrickPlayNameModifier) try writer["dashManifestStyle"].write(value.dashManifestStyle) try writer["destination"].write(value.destination) try writer["destinationSettings"].write(value.destinationSettings, with: MediaConvertClientTypes.DestinationSettings.write(value:to:)) @@ -27106,6 +27250,7 @@ extension MediaConvertClientTypes.DashIsoGroupSettings { value.additionalManifests = try reader["additionalManifests"].readListIfPresent(memberReadingClosure: MediaConvertClientTypes.DashAdditionalManifest.read(from:), memberNodeInfo: "member", isFlattened: false) value.audioChannelConfigSchemeIdUri = try reader["audioChannelConfigSchemeIdUri"].readIfPresent() value.baseUrl = try reader["baseUrl"].readIfPresent() + value.dashIFrameTrickPlayNameModifier = try reader["dashIFrameTrickPlayNameModifier"].readIfPresent() value.dashManifestStyle = try reader["dashManifestStyle"].readIfPresent() value.destination = try reader["destination"].readIfPresent() value.destinationSettings = try reader["destinationSettings"].readIfPresent(with: MediaConvertClientTypes.DestinationSettings.read(from:)) @@ -27195,6 +27340,7 @@ extension MediaConvertClientTypes.CmafGroupSettings { try writer["baseUrl"].write(value.baseUrl) try writer["clientCache"].write(value.clientCache) try writer["codecSpecification"].write(value.codecSpecification) + try writer["dashIFrameTrickPlayNameModifier"].write(value.dashIFrameTrickPlayNameModifier) try writer["dashManifestStyle"].write(value.dashManifestStyle) try writer["destination"].write(value.destination) try writer["destinationSettings"].write(value.destinationSettings, with: MediaConvertClientTypes.DestinationSettings.write(value:to:)) @@ -27227,6 +27373,7 @@ extension MediaConvertClientTypes.CmafGroupSettings { value.baseUrl = try reader["baseUrl"].readIfPresent() value.clientCache = try reader["clientCache"].readIfPresent() value.codecSpecification = try reader["codecSpecification"].readIfPresent() + value.dashIFrameTrickPlayNameModifier = try reader["dashIFrameTrickPlayNameModifier"].readIfPresent() value.dashManifestStyle = try reader["dashManifestStyle"].readIfPresent() value.destination = try reader["destination"].readIfPresent() value.destinationSettings = try reader["destinationSettings"].readIfPresent(with: MediaConvertClientTypes.DestinationSettings.read(from:)) @@ -27782,13 +27929,21 @@ extension MediaConvertClientTypes.InputVideoGenerator { static func write(value: MediaConvertClientTypes.InputVideoGenerator?, to writer: SmithyJSON.Writer) throws { guard let value else { return } + try writer["channels"].write(value.channels) try writer["duration"].write(value.duration) + try writer["framerateDenominator"].write(value.framerateDenominator) + try writer["framerateNumerator"].write(value.framerateNumerator) + try writer["sampleRate"].write(value.sampleRate) } static func read(from reader: SmithyJSON.Reader) throws -> MediaConvertClientTypes.InputVideoGenerator { guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } var value = MediaConvertClientTypes.InputVideoGenerator() + value.channels = try reader["channels"].readIfPresent() value.duration = try reader["duration"].readIfPresent() + value.framerateDenominator = try reader["framerateDenominator"].readIfPresent() + value.framerateNumerator = try reader["framerateNumerator"].readIfPresent() + value.sampleRate = try reader["sampleRate"].readIfPresent() return value } } diff --git a/Sources/Services/AWSMediaConvert/Sources/AWSMediaConvert/Paginators.swift b/Sources/Services/AWSMediaConvert/Sources/AWSMediaConvert/Paginators.swift index ed11fea0f13..afbbdbbc1ea 100644 --- a/Sources/Services/AWSMediaConvert/Sources/AWSMediaConvert/Paginators.swift +++ b/Sources/Services/AWSMediaConvert/Sources/AWSMediaConvert/Paginators.swift @@ -165,3 +165,37 @@ extension PaginatorSequence where OperationStackInput == ListQueuesInput, Operat return try await self.asyncCompactMap { item in item.queues } } } +extension MediaConvertClient { + /// Paginate over `[SearchJobsOutput]` results. + /// + /// When this operation is called, an `AsyncSequence` is created. AsyncSequences are lazy so no service + /// calls are made until the sequence is iterated over. This also means there is no guarantee that the request is valid + /// until then. If there are errors in your request, you will see the failures only after you start iterating. + /// - Parameters: + /// - input: A `[SearchJobsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `SearchJobsOutput` + public func searchJobsPaginated(input: SearchJobsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \.nextToken, outputKey: \.nextToken, paginationFunction: self.searchJobs(input:)) + } +} + +extension SearchJobsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> SearchJobsInput { + return SearchJobsInput( + inputFile: self.inputFile, + maxResults: self.maxResults, + nextToken: token, + order: self.order, + queue: self.queue, + status: self.status + )} +} + +extension PaginatorSequence where OperationStackInput == SearchJobsInput, OperationStackOutput == SearchJobsOutput { + /// This paginator transforms the `AsyncSequence` returned by `searchJobsPaginated` + /// to access the nested member `[MediaConvertClientTypes.Job]` + /// - Returns: `[MediaConvertClientTypes.Job]` + public func jobs() async throws -> [MediaConvertClientTypes.Job] { + return try await self.asyncCompactMap { item in item.jobs } + } +} diff --git a/Sources/Services/AWSMediaPackageV2/Sources/AWSMediaPackageV2/Models.swift b/Sources/Services/AWSMediaPackageV2/Sources/AWSMediaPackageV2/Models.swift index 20fb7ed52cc..300f478027c 100644 --- a/Sources/Services/AWSMediaPackageV2/Sources/AWSMediaPackageV2/Models.swift +++ b/Sources/Services/AWSMediaPackageV2/Sources/AWSMediaPackageV2/Models.swift @@ -288,10 +288,12 @@ extension MediaPackageV2ClientTypes { case noneModeWithTimingSource case numManifestsHigh case numManifestsLow + case onlyCmafInputTypeAllowForceEndpointErrorConfiguration case periodTriggersNoneSpecifiedWithAdditionalValues case roleArnInvalidFormat case roleArnLengthOutOfRange case roleArnNotAssumable + case sourceDisruptionsEnabledIncorrectly case timingSourceMissing case tsContainerTypeWithDashManifest case updatePeriodSmallerThanSegmentDuration @@ -337,10 +339,12 @@ extension MediaPackageV2ClientTypes { .noneModeWithTimingSource, .numManifestsHigh, .numManifestsLow, + .onlyCmafInputTypeAllowForceEndpointErrorConfiguration, .periodTriggersNoneSpecifiedWithAdditionalValues, .roleArnInvalidFormat, .roleArnLengthOutOfRange, .roleArnNotAssumable, + .sourceDisruptionsEnabledIncorrectly, .timingSourceMissing, .tsContainerTypeWithDashManifest, .updatePeriodSmallerThanSegmentDuration, @@ -392,10 +396,12 @@ extension MediaPackageV2ClientTypes { case .noneModeWithTimingSource: return "NONE_MODE_WITH_TIMING_SOURCE" case .numManifestsHigh: return "NUM_MANIFESTS_HIGH" case .numManifestsLow: return "NUM_MANIFESTS_LOW" + case .onlyCmafInputTypeAllowForceEndpointErrorConfiguration: return "ONLY_CMAF_INPUT_TYPE_ALLOW_FORCE_ENDPOINT_ERROR_CONFIGURATION" case .periodTriggersNoneSpecifiedWithAdditionalValues: return "PERIOD_TRIGGERS_NONE_SPECIFIED_WITH_ADDITIONAL_VALUES" case .roleArnInvalidFormat: return "ROLE_ARN_INVALID_FORMAT" case .roleArnLengthOutOfRange: return "ROLE_ARN_LENGTH_OUT_OF_RANGE" case .roleArnNotAssumable: return "ROLE_ARN_NOT_ASSUMABLE" + case .sourceDisruptionsEnabledIncorrectly: return "SOURCE_DISRUPTIONS_ENABLED_INCORRECTLY" case .timingSourceMissing: return "TIMING_SOURCE_MISSING" case .tsContainerTypeWithDashManifest: return "TS_CONTAINER_TYPE_WITH_DASH_MANIFEST" case .updatePeriodSmallerThanSegmentDuration: return "UPDATE_PERIOD_SMALLER_THAN_SEGMENT_DURATION" @@ -618,6 +624,35 @@ public struct ServiceQuotaExceededException: ClientRuntime.ModeledError, AWSClie } } +extension MediaPackageV2ClientTypes { + + public enum InputType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case cmaf + case hls + case sdkUnknown(Swift.String) + + public static var allCases: [InputType] { + return [ + .cmaf, + .hls + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .cmaf: return "CMAF" + case .hls: return "HLS" + case let .sdkUnknown(s): return s + } + } + } +} + public struct CreateChannelInput { /// The name that describes the channel group. The name is the primary identifier for the channel group, and must be unique for your account in the AWS Region. /// This member is required. @@ -629,6 +664,12 @@ public struct CreateChannelInput { public var clientToken: Swift.String? /// Enter any descriptive text that helps you to identify the channel. public var description: Swift.String? + /// The input type will be an immutable field which will be used to define whether the channel will allow CMAF ingest or HLS ingest. If unprovided, it will default to HLS to preserve current behavior. The allowed values are: + /// + /// * HLS - The HLS streaming specification (which defines M3U8 manifests and TS segments). + /// + /// * CMAF - The DASH-IF CMAF Ingest specification (which defines CMAF segments with optional DASH manifests). + public var inputType: MediaPackageV2ClientTypes.InputType? /// A comma-separated list of tag key:value pairs that you define. For example: "Key1": "Value1", /// "Key2": "Value2" public var tags: [Swift.String: Swift.String]? @@ -638,6 +679,7 @@ public struct CreateChannelInput { channelName: Swift.String? = nil, clientToken: Swift.String? = nil, description: Swift.String? = nil, + inputType: MediaPackageV2ClientTypes.InputType? = nil, tags: [Swift.String: Swift.String]? = nil ) { @@ -645,6 +687,7 @@ public struct CreateChannelInput { self.channelName = channelName self.clientToken = clientToken self.description = description + self.inputType = inputType self.tags = tags } } @@ -688,6 +731,12 @@ public struct CreateChannelOutput { public var eTag: Swift.String? /// The list of ingest endpoints. public var ingestEndpoints: [MediaPackageV2ClientTypes.IngestEndpoint]? + /// The input type will be an immutable field which will be used to define whether the channel will allow CMAF ingest or HLS ingest. If unprovided, it will default to HLS to preserve current behavior. The allowed values are: + /// + /// * HLS - The HLS streaming specification (which defines M3U8 manifests and TS segments). + /// + /// * CMAF - The DASH-IF CMAF Ingest specification (which defines CMAF segments with optional DASH manifests). + public var inputType: MediaPackageV2ClientTypes.InputType? /// The date and time the channel was modified. /// This member is required. public var modifiedAt: Foundation.Date? @@ -702,6 +751,7 @@ public struct CreateChannelOutput { description: Swift.String? = nil, eTag: Swift.String? = nil, ingestEndpoints: [MediaPackageV2ClientTypes.IngestEndpoint]? = nil, + inputType: MediaPackageV2ClientTypes.InputType? = nil, modifiedAt: Foundation.Date? = nil, tags: [Swift.String: Swift.String]? = nil ) @@ -713,6 +763,7 @@ public struct CreateChannelOutput { self.description = description self.eTag = eTag self.ingestEndpoints = ingestEndpoints + self.inputType = inputType self.modifiedAt = modifiedAt self.tags = tags } @@ -778,6 +829,12 @@ public struct GetChannelOutput { public var eTag: Swift.String? /// The list of ingest endpoints. public var ingestEndpoints: [MediaPackageV2ClientTypes.IngestEndpoint]? + /// The input type will be an immutable field which will be used to define whether the channel will allow CMAF ingest or HLS ingest. If unprovided, it will default to HLS to preserve current behavior. The allowed values are: + /// + /// * HLS - The HLS streaming specification (which defines M3U8 manifests and TS segments). + /// + /// * CMAF - The DASH-IF CMAF Ingest specification (which defines CMAF segments with optional DASH manifests). + public var inputType: MediaPackageV2ClientTypes.InputType? /// The date and time the channel was modified. /// This member is required. public var modifiedAt: Foundation.Date? @@ -792,6 +849,7 @@ public struct GetChannelOutput { description: Swift.String? = nil, eTag: Swift.String? = nil, ingestEndpoints: [MediaPackageV2ClientTypes.IngestEndpoint]? = nil, + inputType: MediaPackageV2ClientTypes.InputType? = nil, modifiedAt: Foundation.Date? = nil, tags: [Swift.String: Swift.String]? = nil ) @@ -803,6 +861,7 @@ public struct GetChannelOutput { self.description = description self.eTag = eTag self.ingestEndpoints = ingestEndpoints + self.inputType = inputType self.modifiedAt = modifiedAt self.tags = tags } @@ -846,6 +905,12 @@ extension MediaPackageV2ClientTypes { public var createdAt: Foundation.Date? /// Any descriptive information that you want to add to the channel for future identification purposes. public var description: Swift.String? + /// The input type will be an immutable field which will be used to define whether the channel will allow CMAF ingest or HLS ingest. If unprovided, it will default to HLS to preserve current behavior. The allowed values are: + /// + /// * HLS - The HLS streaming specification (which defines M3U8 manifests and TS segments). + /// + /// * CMAF - The DASH-IF CMAF Ingest specification (which defines CMAF segments with optional DASH manifests). + public var inputType: MediaPackageV2ClientTypes.InputType? /// The date and time the channel was modified. /// This member is required. public var modifiedAt: Foundation.Date? @@ -856,6 +921,7 @@ extension MediaPackageV2ClientTypes { channelName: Swift.String? = nil, createdAt: Foundation.Date? = nil, description: Swift.String? = nil, + inputType: MediaPackageV2ClientTypes.InputType? = nil, modifiedAt: Foundation.Date? = nil ) { @@ -864,6 +930,7 @@ extension MediaPackageV2ClientTypes { self.channelName = channelName self.createdAt = createdAt self.description = description + self.inputType = inputType self.modifiedAt = modifiedAt } } @@ -1170,6 +1237,65 @@ extension MediaPackageV2ClientTypes { } +extension MediaPackageV2ClientTypes { + + public enum EndpointErrorCondition: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case incompleteManifest + case missingDrmKey + case slateInput + case staleManifest + case sdkUnknown(Swift.String) + + public static var allCases: [EndpointErrorCondition] { + return [ + .incompleteManifest, + .missingDrmKey, + .slateInput, + .staleManifest + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .incompleteManifest: return "INCOMPLETE_MANIFEST" + case .missingDrmKey: return "MISSING_DRM_KEY" + case .slateInput: return "SLATE_INPUT" + case .staleManifest: return "STALE_MANIFEST" + case let .sdkUnknown(s): return s + } + } + } +} + +extension MediaPackageV2ClientTypes { + /// The failover settings for the endpoint. + public struct ForceEndpointErrorConfiguration { + /// The failover conditions for the endpoint. The options are: + /// + /// * STALE_MANIFEST - The manifest stalled and there are no new segments or parts. + /// + /// * INCOMPLETE_MANIFEST - There is a gap in the manifest. + /// + /// * MISSING_DRM_KEY - Key rotation is enabled but we're unable to fetch the key for the current key period. + /// + /// * SLATE_INPUT - The segments which contain slate content are considered to be missing content. + public var endpointErrorConditions: [MediaPackageV2ClientTypes.EndpointErrorCondition]? + + public init( + endpointErrorConditions: [MediaPackageV2ClientTypes.EndpointErrorCondition]? = nil + ) + { + self.endpointErrorConditions = endpointErrorConditions + } + } + +} + extension MediaPackageV2ClientTypes { /// The SCTE configuration. public struct ScteHls { @@ -1707,6 +1833,8 @@ public struct CreateOriginEndpointInput { public var dashManifests: [MediaPackageV2ClientTypes.CreateDashManifestConfiguration]? /// Enter any descriptive text that helps you to identify the origin endpoint. public var description: Swift.String? + /// The failover settings for the endpoint. + public var forceEndpointErrorConfiguration: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration? /// An HTTP live streaming (HLS) manifest configuration. public var hlsManifests: [MediaPackageV2ClientTypes.CreateHlsManifestConfiguration]? /// A low-latency HLS manifest configuration. @@ -1729,6 +1857,7 @@ public struct CreateOriginEndpointInput { containerType: MediaPackageV2ClientTypes.ContainerType? = nil, dashManifests: [MediaPackageV2ClientTypes.CreateDashManifestConfiguration]? = nil, description: Swift.String? = nil, + forceEndpointErrorConfiguration: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration? = nil, hlsManifests: [MediaPackageV2ClientTypes.CreateHlsManifestConfiguration]? = nil, lowLatencyHlsManifests: [MediaPackageV2ClientTypes.CreateLowLatencyHlsManifestConfiguration]? = nil, originEndpointName: Swift.String? = nil, @@ -1743,6 +1872,7 @@ public struct CreateOriginEndpointInput { self.containerType = containerType self.dashManifests = dashManifests self.description = description + self.forceEndpointErrorConfiguration = forceEndpointErrorConfiguration self.hlsManifests = hlsManifests self.lowLatencyHlsManifests = lowLatencyHlsManifests self.originEndpointName = originEndpointName @@ -1922,6 +2052,8 @@ public struct CreateOriginEndpointOutput { public var description: Swift.String? /// The current Entity Tag (ETag) associated with this resource. The entity tag can be used to safely make concurrent updates to the resource. public var eTag: Swift.String? + /// The failover settings for the endpoint. + public var forceEndpointErrorConfiguration: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration? /// An HTTP live streaming (HLS) manifest configuration. public var hlsManifests: [MediaPackageV2ClientTypes.GetHlsManifestConfiguration]? /// A low-latency HLS manifest configuration. @@ -1949,6 +2081,7 @@ public struct CreateOriginEndpointOutput { dashManifests: [MediaPackageV2ClientTypes.GetDashManifestConfiguration]? = nil, description: Swift.String? = nil, eTag: Swift.String? = nil, + forceEndpointErrorConfiguration: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration? = nil, hlsManifests: [MediaPackageV2ClientTypes.GetHlsManifestConfiguration]? = nil, lowLatencyHlsManifests: [MediaPackageV2ClientTypes.GetLowLatencyHlsManifestConfiguration]? = nil, modifiedAt: Foundation.Date? = nil, @@ -1966,6 +2099,7 @@ public struct CreateOriginEndpointOutput { self.dashManifests = dashManifests self.description = description self.eTag = eTag + self.forceEndpointErrorConfiguration = forceEndpointErrorConfiguration self.hlsManifests = hlsManifests self.lowLatencyHlsManifests = lowLatencyHlsManifests self.modifiedAt = modifiedAt @@ -2049,6 +2183,8 @@ public struct GetOriginEndpointOutput { public var description: Swift.String? /// The current Entity Tag (ETag) associated with this resource. The entity tag can be used to safely make concurrent updates to the resource. public var eTag: Swift.String? + /// The failover settings for the endpoint. + public var forceEndpointErrorConfiguration: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration? /// An HTTP live streaming (HLS) manifest configuration. public var hlsManifests: [MediaPackageV2ClientTypes.GetHlsManifestConfiguration]? /// A low-latency HLS manifest configuration. @@ -2076,6 +2212,7 @@ public struct GetOriginEndpointOutput { dashManifests: [MediaPackageV2ClientTypes.GetDashManifestConfiguration]? = nil, description: Swift.String? = nil, eTag: Swift.String? = nil, + forceEndpointErrorConfiguration: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration? = nil, hlsManifests: [MediaPackageV2ClientTypes.GetHlsManifestConfiguration]? = nil, lowLatencyHlsManifests: [MediaPackageV2ClientTypes.GetLowLatencyHlsManifestConfiguration]? = nil, modifiedAt: Foundation.Date? = nil, @@ -2093,6 +2230,7 @@ public struct GetOriginEndpointOutput { self.dashManifests = dashManifests self.description = description self.eTag = eTag + self.forceEndpointErrorConfiguration = forceEndpointErrorConfiguration self.hlsManifests = hlsManifests self.lowLatencyHlsManifests = lowLatencyHlsManifests self.modifiedAt = modifiedAt @@ -2221,6 +2359,8 @@ extension MediaPackageV2ClientTypes { public var dashManifests: [MediaPackageV2ClientTypes.ListDashManifestConfiguration]? /// Any descriptive information that you want to add to the origin endpoint for future identification purposes. public var description: Swift.String? + /// The failover settings for the endpoint. + public var forceEndpointErrorConfiguration: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration? /// An HTTP live streaming (HLS) manifest configuration. public var hlsManifests: [MediaPackageV2ClientTypes.ListHlsManifestConfiguration]? /// A low-latency HLS manifest configuration. @@ -2239,6 +2379,7 @@ extension MediaPackageV2ClientTypes { createdAt: Foundation.Date? = nil, dashManifests: [MediaPackageV2ClientTypes.ListDashManifestConfiguration]? = nil, description: Swift.String? = nil, + forceEndpointErrorConfiguration: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration? = nil, hlsManifests: [MediaPackageV2ClientTypes.ListHlsManifestConfiguration]? = nil, lowLatencyHlsManifests: [MediaPackageV2ClientTypes.ListLowLatencyHlsManifestConfiguration]? = nil, modifiedAt: Foundation.Date? = nil, @@ -2252,6 +2393,7 @@ extension MediaPackageV2ClientTypes { self.createdAt = createdAt self.dashManifests = dashManifests self.description = description + self.forceEndpointErrorConfiguration = forceEndpointErrorConfiguration self.hlsManifests = hlsManifests self.lowLatencyHlsManifests = lowLatencyHlsManifests self.modifiedAt = modifiedAt @@ -2405,6 +2547,8 @@ public struct UpdateOriginEndpointInput { public var description: Swift.String? /// The expected current Entity Tag (ETag) for the resource. If the specified ETag does not match the resource's current entity tag, the update request will be rejected. public var eTag: Swift.String? + /// The failover settings for the endpoint. + public var forceEndpointErrorConfiguration: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration? /// An HTTP live streaming (HLS) manifest configuration. public var hlsManifests: [MediaPackageV2ClientTypes.CreateHlsManifestConfiguration]? /// A low-latency HLS manifest configuration. @@ -2424,6 +2568,7 @@ public struct UpdateOriginEndpointInput { dashManifests: [MediaPackageV2ClientTypes.CreateDashManifestConfiguration]? = nil, description: Swift.String? = nil, eTag: Swift.String? = nil, + forceEndpointErrorConfiguration: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration? = nil, hlsManifests: [MediaPackageV2ClientTypes.CreateHlsManifestConfiguration]? = nil, lowLatencyHlsManifests: [MediaPackageV2ClientTypes.CreateLowLatencyHlsManifestConfiguration]? = nil, originEndpointName: Swift.String? = nil, @@ -2437,6 +2582,7 @@ public struct UpdateOriginEndpointInput { self.dashManifests = dashManifests self.description = description self.eTag = eTag + self.forceEndpointErrorConfiguration = forceEndpointErrorConfiguration self.hlsManifests = hlsManifests self.lowLatencyHlsManifests = lowLatencyHlsManifests self.originEndpointName = originEndpointName @@ -2467,6 +2613,8 @@ public struct UpdateOriginEndpointOutput { public var description: Swift.String? /// The current Entity Tag (ETag) associated with this resource. The entity tag can be used to safely make concurrent updates to the resource. public var eTag: Swift.String? + /// The failover settings for the endpoint. + public var forceEndpointErrorConfiguration: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration? /// An HTTP live streaming (HLS) manifest configuration. public var hlsManifests: [MediaPackageV2ClientTypes.GetHlsManifestConfiguration]? /// A low-latency HLS manifest configuration. @@ -2494,6 +2642,7 @@ public struct UpdateOriginEndpointOutput { dashManifests: [MediaPackageV2ClientTypes.GetDashManifestConfiguration]? = nil, description: Swift.String? = nil, eTag: Swift.String? = nil, + forceEndpointErrorConfiguration: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration? = nil, hlsManifests: [MediaPackageV2ClientTypes.GetHlsManifestConfiguration]? = nil, lowLatencyHlsManifests: [MediaPackageV2ClientTypes.GetLowLatencyHlsManifestConfiguration]? = nil, modifiedAt: Foundation.Date? = nil, @@ -2511,6 +2660,7 @@ public struct UpdateOriginEndpointOutput { self.dashManifests = dashManifests self.description = description self.eTag = eTag + self.forceEndpointErrorConfiguration = forceEndpointErrorConfiguration self.hlsManifests = hlsManifests self.lowLatencyHlsManifests = lowLatencyHlsManifests self.modifiedAt = modifiedAt @@ -2566,6 +2716,12 @@ public struct UpdateChannelOutput { public var eTag: Swift.String? /// The list of ingest endpoints. public var ingestEndpoints: [MediaPackageV2ClientTypes.IngestEndpoint]? + /// The input type will be an immutable field which will be used to define whether the channel will allow CMAF ingest or HLS ingest. If unprovided, it will default to HLS to preserve current behavior. The allowed values are: + /// + /// * HLS - The HLS streaming specification (which defines M3U8 manifests and TS segments). + /// + /// * CMAF - The DASH-IF CMAF Ingest specification (which defines CMAF segments with optional DASH manifests). + public var inputType: MediaPackageV2ClientTypes.InputType? /// The date and time the channel was modified. /// This member is required. public var modifiedAt: Foundation.Date? @@ -2580,6 +2736,7 @@ public struct UpdateChannelOutput { description: Swift.String? = nil, eTag: Swift.String? = nil, ingestEndpoints: [MediaPackageV2ClientTypes.IngestEndpoint]? = nil, + inputType: MediaPackageV2ClientTypes.InputType? = nil, modifiedAt: Foundation.Date? = nil, tags: [Swift.String: Swift.String]? = nil ) @@ -2591,6 +2748,7 @@ public struct UpdateChannelOutput { self.description = description self.eTag = eTag self.ingestEndpoints = ingestEndpoints + self.inputType = inputType self.modifiedAt = modifiedAt self.tags = tags } @@ -3332,6 +3490,7 @@ extension CreateChannelInput { guard let value else { return } try writer["ChannelName"].write(value.channelName) try writer["Description"].write(value.description) + try writer["InputType"].write(value.inputType) try writer["tags"].writeMap(value.tags, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) } } @@ -3353,6 +3512,7 @@ extension CreateOriginEndpointInput { try writer["ContainerType"].write(value.containerType) try writer["DashManifests"].writeList(value.dashManifests, memberWritingClosure: MediaPackageV2ClientTypes.CreateDashManifestConfiguration.write(value:to:), memberNodeInfo: "member", isFlattened: false) try writer["Description"].write(value.description) + try writer["ForceEndpointErrorConfiguration"].write(value.forceEndpointErrorConfiguration, with: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration.write(value:to:)) try writer["HlsManifests"].writeList(value.hlsManifests, memberWritingClosure: MediaPackageV2ClientTypes.CreateHlsManifestConfiguration.write(value:to:), memberNodeInfo: "member", isFlattened: false) try writer["LowLatencyHlsManifests"].writeList(value.lowLatencyHlsManifests, memberWritingClosure: MediaPackageV2ClientTypes.CreateLowLatencyHlsManifestConfiguration.write(value:to:), memberNodeInfo: "member", isFlattened: false) try writer["OriginEndpointName"].write(value.originEndpointName) @@ -3409,6 +3569,7 @@ extension UpdateOriginEndpointInput { try writer["ContainerType"].write(value.containerType) try writer["DashManifests"].writeList(value.dashManifests, memberWritingClosure: MediaPackageV2ClientTypes.CreateDashManifestConfiguration.write(value:to:), memberNodeInfo: "member", isFlattened: false) try writer["Description"].write(value.description) + try writer["ForceEndpointErrorConfiguration"].write(value.forceEndpointErrorConfiguration, with: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration.write(value:to:)) try writer["HlsManifests"].writeList(value.hlsManifests, memberWritingClosure: MediaPackageV2ClientTypes.CreateHlsManifestConfiguration.write(value:to:), memberNodeInfo: "member", isFlattened: false) try writer["LowLatencyHlsManifests"].writeList(value.lowLatencyHlsManifests, memberWritingClosure: MediaPackageV2ClientTypes.CreateLowLatencyHlsManifestConfiguration.write(value:to:), memberNodeInfo: "member", isFlattened: false) try writer["Segment"].write(value.segment, with: MediaPackageV2ClientTypes.Segment.write(value:to:)) @@ -3430,6 +3591,7 @@ extension CreateChannelOutput { value.description = try reader["Description"].readIfPresent() value.eTag = try reader["ETag"].readIfPresent() value.ingestEndpoints = try reader["IngestEndpoints"].readListIfPresent(memberReadingClosure: MediaPackageV2ClientTypes.IngestEndpoint.read(from:), memberNodeInfo: "member", isFlattened: false) + value.inputType = try reader["InputType"].readIfPresent() value.modifiedAt = try reader["ModifiedAt"].readTimestampIfPresent(format: .epochSeconds) value.tags = try reader["Tags"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) return value @@ -3470,6 +3632,7 @@ extension CreateOriginEndpointOutput { value.dashManifests = try reader["DashManifests"].readListIfPresent(memberReadingClosure: MediaPackageV2ClientTypes.GetDashManifestConfiguration.read(from:), memberNodeInfo: "member", isFlattened: false) value.description = try reader["Description"].readIfPresent() value.eTag = try reader["ETag"].readIfPresent() + value.forceEndpointErrorConfiguration = try reader["ForceEndpointErrorConfiguration"].readIfPresent(with: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration.read(from:)) value.hlsManifests = try reader["HlsManifests"].readListIfPresent(memberReadingClosure: MediaPackageV2ClientTypes.GetHlsManifestConfiguration.read(from:), memberNodeInfo: "member", isFlattened: false) value.lowLatencyHlsManifests = try reader["LowLatencyHlsManifests"].readListIfPresent(memberReadingClosure: MediaPackageV2ClientTypes.GetLowLatencyHlsManifestConfiguration.read(from:), memberNodeInfo: "member", isFlattened: false) value.modifiedAt = try reader["ModifiedAt"].readTimestampIfPresent(format: .epochSeconds) @@ -3530,6 +3693,7 @@ extension GetChannelOutput { value.description = try reader["Description"].readIfPresent() value.eTag = try reader["ETag"].readIfPresent() value.ingestEndpoints = try reader["IngestEndpoints"].readListIfPresent(memberReadingClosure: MediaPackageV2ClientTypes.IngestEndpoint.read(from:), memberNodeInfo: "member", isFlattened: false) + value.inputType = try reader["InputType"].readIfPresent() value.modifiedAt = try reader["ModifiedAt"].readTimestampIfPresent(format: .epochSeconds) value.tags = try reader["Tags"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) return value @@ -3584,6 +3748,7 @@ extension GetOriginEndpointOutput { value.dashManifests = try reader["DashManifests"].readListIfPresent(memberReadingClosure: MediaPackageV2ClientTypes.GetDashManifestConfiguration.read(from:), memberNodeInfo: "member", isFlattened: false) value.description = try reader["Description"].readIfPresent() value.eTag = try reader["ETag"].readIfPresent() + value.forceEndpointErrorConfiguration = try reader["ForceEndpointErrorConfiguration"].readIfPresent(with: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration.read(from:)) value.hlsManifests = try reader["HlsManifests"].readListIfPresent(memberReadingClosure: MediaPackageV2ClientTypes.GetHlsManifestConfiguration.read(from:), memberNodeInfo: "member", isFlattened: false) value.lowLatencyHlsManifests = try reader["LowLatencyHlsManifests"].readListIfPresent(memberReadingClosure: MediaPackageV2ClientTypes.GetLowLatencyHlsManifestConfiguration.read(from:), memberNodeInfo: "member", isFlattened: false) value.modifiedAt = try reader["ModifiedAt"].readTimestampIfPresent(format: .epochSeconds) @@ -3703,6 +3868,7 @@ extension UpdateChannelOutput { value.description = try reader["Description"].readIfPresent() value.eTag = try reader["ETag"].readIfPresent() value.ingestEndpoints = try reader["IngestEndpoints"].readListIfPresent(memberReadingClosure: MediaPackageV2ClientTypes.IngestEndpoint.read(from:), memberNodeInfo: "member", isFlattened: false) + value.inputType = try reader["InputType"].readIfPresent() value.modifiedAt = try reader["ModifiedAt"].readTimestampIfPresent(format: .epochSeconds) value.tags = try reader["tags"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) return value @@ -3743,6 +3909,7 @@ extension UpdateOriginEndpointOutput { value.dashManifests = try reader["DashManifests"].readListIfPresent(memberReadingClosure: MediaPackageV2ClientTypes.GetDashManifestConfiguration.read(from:), memberNodeInfo: "member", isFlattened: false) value.description = try reader["Description"].readIfPresent() value.eTag = try reader["ETag"].readIfPresent() + value.forceEndpointErrorConfiguration = try reader["ForceEndpointErrorConfiguration"].readIfPresent(with: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration.read(from:)) value.hlsManifests = try reader["HlsManifests"].readListIfPresent(memberReadingClosure: MediaPackageV2ClientTypes.GetHlsManifestConfiguration.read(from:), memberNodeInfo: "member", isFlattened: false) value.lowLatencyHlsManifests = try reader["LowLatencyHlsManifests"].readListIfPresent(memberReadingClosure: MediaPackageV2ClientTypes.GetLowLatencyHlsManifestConfiguration.read(from:), memberNodeInfo: "member", isFlattened: false) value.modifiedAt = try reader["ModifiedAt"].readTimestampIfPresent(format: .epochSeconds) @@ -4530,6 +4697,21 @@ extension MediaPackageV2ClientTypes.ScteDash { } } +extension MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration { + + static func write(value: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["EndpointErrorConditions"].writeList(value.endpointErrorConditions, memberWritingClosure: SmithyReadWrite.WritingClosureBox().write(value:to:), memberNodeInfo: "member", isFlattened: false) + } + + static func read(from reader: SmithyJSON.Reader) throws -> MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration() + value.endpointErrorConditions = try reader["EndpointErrorConditions"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosureBox().read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + extension MediaPackageV2ClientTypes.ChannelGroupListConfiguration { static func read(from reader: SmithyJSON.Reader) throws -> MediaPackageV2ClientTypes.ChannelGroupListConfiguration { @@ -4555,6 +4737,7 @@ extension MediaPackageV2ClientTypes.ChannelListConfiguration { value.createdAt = try reader["CreatedAt"].readTimestampIfPresent(format: .epochSeconds) value.modifiedAt = try reader["ModifiedAt"].readTimestampIfPresent(format: .epochSeconds) value.description = try reader["Description"].readIfPresent() + value.inputType = try reader["InputType"].readIfPresent() return value } } @@ -4575,6 +4758,7 @@ extension MediaPackageV2ClientTypes.OriginEndpointListConfiguration { value.hlsManifests = try reader["HlsManifests"].readListIfPresent(memberReadingClosure: MediaPackageV2ClientTypes.ListHlsManifestConfiguration.read(from:), memberNodeInfo: "member", isFlattened: false) value.lowLatencyHlsManifests = try reader["LowLatencyHlsManifests"].readListIfPresent(memberReadingClosure: MediaPackageV2ClientTypes.ListLowLatencyHlsManifestConfiguration.read(from:), memberNodeInfo: "member", isFlattened: false) value.dashManifests = try reader["DashManifests"].readListIfPresent(memberReadingClosure: MediaPackageV2ClientTypes.ListDashManifestConfiguration.read(from:), memberNodeInfo: "member", isFlattened: false) + value.forceEndpointErrorConfiguration = try reader["ForceEndpointErrorConfiguration"].readIfPresent(with: MediaPackageV2ClientTypes.ForceEndpointErrorConfiguration.read(from:)) return value } } diff --git a/Sources/Services/AWSNetworkManager/Sources/AWSNetworkManager/Models.swift b/Sources/Services/AWSNetworkManager/Sources/AWSNetworkManager/Models.swift index 31147736966..1e1d37cb6a8 100644 --- a/Sources/Services/AWSNetworkManager/Sources/AWSNetworkManager/Models.swift +++ b/Sources/Services/AWSNetworkManager/Sources/AWSNetworkManager/Models.swift @@ -9,6 +9,7 @@ import enum Smithy.ClientError import enum SmithyReadWrite.ReaderError import enum SmithyReadWrite.ReadingClosures import enum SmithyReadWrite.WritingClosures +import func SmithyReadWrite.listReadingClosure import func SmithyReadWrite.listWritingClosure import protocol AWSClientRuntime.AWSServiceError import protocol ClientRuntime.HTTPError @@ -333,6 +334,30 @@ extension NetworkManagerClientTypes { } +extension NetworkManagerClientTypes { + /// Describes proposed changes to a network function group. + public struct ProposedNetworkFunctionGroupChange { + /// The proposed new attachment policy rule number for the network function group. + public var attachmentPolicyRuleNumber: Swift.Int? + /// The proposed name change for the network function group name. + public var networkFunctionGroupName: Swift.String? + /// The list of proposed changes to the key-value tags associated with the network function group. + public var tags: [NetworkManagerClientTypes.Tag]? + + public init( + attachmentPolicyRuleNumber: Swift.Int? = nil, + networkFunctionGroupName: Swift.String? = nil, + tags: [NetworkManagerClientTypes.Tag]? = nil + ) + { + self.attachmentPolicyRuleNumber = attachmentPolicyRuleNumber + self.networkFunctionGroupName = networkFunctionGroupName + self.tags = tags + } + } + +} + extension NetworkManagerClientTypes { /// Describes a proposed segment change. In some cases, the segment change must first be evaluated and accepted. public struct ProposedSegmentChange { @@ -424,8 +449,12 @@ extension NetworkManagerClientTypes { public var createdAt: Foundation.Date? /// The Region where the edge is located. public var edgeLocation: Swift.String? + /// The name of the network function group. + public var networkFunctionGroupName: Swift.String? /// The ID of the attachment account owner. public var ownerAccountId: Swift.String? + /// Describes a proposed change to a network function group associated with the attachment. + public var proposedNetworkFunctionGroupChange: NetworkManagerClientTypes.ProposedNetworkFunctionGroupChange? /// The attachment to move from one segment to another. public var proposedSegmentChange: NetworkManagerClientTypes.ProposedSegmentChange? /// The attachment resource ARN. @@ -447,7 +476,9 @@ extension NetworkManagerClientTypes { coreNetworkId: Swift.String? = nil, createdAt: Foundation.Date? = nil, edgeLocation: Swift.String? = nil, + networkFunctionGroupName: Swift.String? = nil, ownerAccountId: Swift.String? = nil, + proposedNetworkFunctionGroupChange: NetworkManagerClientTypes.ProposedNetworkFunctionGroupChange? = nil, proposedSegmentChange: NetworkManagerClientTypes.ProposedSegmentChange? = nil, resourceArn: Swift.String? = nil, segmentName: Swift.String? = nil, @@ -463,7 +494,9 @@ extension NetworkManagerClientTypes { self.coreNetworkId = coreNetworkId self.createdAt = createdAt self.edgeLocation = edgeLocation + self.networkFunctionGroupName = networkFunctionGroupName self.ownerAccountId = ownerAccountId + self.proposedNetworkFunctionGroupChange = proposedNetworkFunctionGroupChange self.proposedSegmentChange = proposedSegmentChange self.resourceArn = resourceArn self.segmentName = segmentName @@ -1141,6 +1174,7 @@ extension NetworkManagerClientTypes { case coreNetworkConfiguration case coreNetworkEdge case coreNetworkSegment + case networkFunctionGroup case segmentsConfiguration case segmentActionsConfiguration case sdkUnknown(Swift.String) @@ -1154,6 +1188,7 @@ extension NetworkManagerClientTypes { .coreNetworkConfiguration, .coreNetworkEdge, .coreNetworkSegment, + .networkFunctionGroup, .segmentsConfiguration, .segmentActionsConfiguration ] @@ -1173,6 +1208,7 @@ extension NetworkManagerClientTypes { case .coreNetworkConfiguration: return "CORE_NETWORK_CONFIGURATION" case .coreNetworkEdge: return "CORE_NETWORK_EDGE" case .coreNetworkSegment: return "CORE_NETWORK_SEGMENT" + case .networkFunctionGroup: return "NETWORK_FUNCTION_GROUP" case .segmentsConfiguration: return "SEGMENTS_CONFIGURATION" case .segmentActionsConfiguration: return "SEGMENT_ACTIONS_CONFIGURATION" case let .sdkUnknown(s): return s @@ -1535,7 +1571,7 @@ extension NetworkManagerClientTypes { public var edgeLocation: Swift.String? /// The state of the Connect peer. public var state: NetworkManagerClientTypes.ConnectPeerState? - /// The subnet ARN for the Connect peer. + /// The subnet ARN for the Connect peer. This only applies only when the protocol is NO_ENCAP. public var subnetArn: Swift.String? /// The list of key-value tags associated with the Connect peer. public var tags: [NetworkManagerClientTypes.Tag]? @@ -1634,6 +1670,50 @@ extension NetworkManagerClientTypes { } +extension NetworkManagerClientTypes { + /// Describes the segments associated with the service insertion action. + public struct ServiceInsertionSegments { + /// The list of segments associated with the send-to action. + public var sendTo: [Swift.String]? + /// The list of segments associated with the send-via action. + public var sendVia: [Swift.String]? + + public init( + sendTo: [Swift.String]? = nil, + sendVia: [Swift.String]? = nil + ) + { + self.sendTo = sendTo + self.sendVia = sendVia + } + } + +} + +extension NetworkManagerClientTypes { + /// Describes a network function group. + public struct CoreNetworkNetworkFunctionGroup { + /// The core network edge locations. + public var edgeLocations: [Swift.String]? + /// The name of the network function group. + public var name: Swift.String? + /// The segments associated with the network function group. + public var segments: NetworkManagerClientTypes.ServiceInsertionSegments? + + public init( + edgeLocations: [Swift.String]? = nil, + name: Swift.String? = nil, + segments: NetworkManagerClientTypes.ServiceInsertionSegments? = nil + ) + { + self.edgeLocations = edgeLocations + self.name = name + self.segments = segments + } + } + +} + extension NetworkManagerClientTypes { /// Describes a core network segment, which are dedicated routes. Only attachments within this segment can communicate with each other. public struct CoreNetworkSegment { @@ -1708,6 +1788,8 @@ extension NetworkManagerClientTypes { public var edges: [NetworkManagerClientTypes.CoreNetworkEdge]? /// The ID of the global network that your core network is a part of. public var globalNetworkId: Swift.String? + /// The network function groups associated with a core network. + public var networkFunctionGroups: [NetworkManagerClientTypes.CoreNetworkNetworkFunctionGroup]? /// The segments within a core network. public var segments: [NetworkManagerClientTypes.CoreNetworkSegment]? /// The current state of a core network. @@ -1722,6 +1804,7 @@ extension NetworkManagerClientTypes { description: Swift.String? = nil, edges: [NetworkManagerClientTypes.CoreNetworkEdge]? = nil, globalNetworkId: Swift.String? = nil, + networkFunctionGroups: [NetworkManagerClientTypes.CoreNetworkNetworkFunctionGroup]? = nil, segments: [NetworkManagerClientTypes.CoreNetworkSegment]? = nil, state: NetworkManagerClientTypes.CoreNetworkState? = nil, tags: [NetworkManagerClientTypes.Tag]? = nil @@ -1733,6 +1816,7 @@ extension NetworkManagerClientTypes { self.description = description self.edges = edges self.globalNetworkId = globalNetworkId + self.networkFunctionGroups = networkFunctionGroups self.segments = segments self.state = state self.tags = tags @@ -1741,6 +1825,164 @@ extension NetworkManagerClientTypes { } +extension NetworkManagerClientTypes { + + public enum SegmentActionServiceInsertion: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case sendTo + case sendVia + case sdkUnknown(Swift.String) + + public static var allCases: [SegmentActionServiceInsertion] { + return [ + .sendTo, + .sendVia + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .sendTo: return "send-to" + case .sendVia: return "send-via" + case let .sdkUnknown(s): return s + } + } + } +} + +extension NetworkManagerClientTypes { + + public enum SendViaMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case dualHop + case singleHop + case sdkUnknown(Swift.String) + + public static var allCases: [SendViaMode] { + return [ + .dualHop, + .singleHop + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .dualHop: return "dual-hop" + case .singleHop: return "single-hop" + case let .sdkUnknown(s): return s + } + } + } +} + +extension NetworkManagerClientTypes { + /// Describes a network function group for service insertion. + public struct NetworkFunctionGroup { + /// The name of the network function group. + public var name: Swift.String? + + public init( + name: Swift.String? = nil + ) + { + self.name = name + } + } + +} + +extension NetworkManagerClientTypes { + /// Describes the edge that's used for the override. + public struct EdgeOverride { + /// The list of edge locations. + public var edgeSets: [[Swift.String]]? + /// The edge that should be used when overriding the current edge order. + public var useEdge: Swift.String? + + public init( + edgeSets: [[Swift.String]]? = nil, + useEdge: Swift.String? = nil + ) + { + self.edgeSets = edgeSets + self.useEdge = useEdge + } + } + +} + +extension NetworkManagerClientTypes { + /// The list of network function groups and edge overrides for the service insertion action. Used for both the send-to and send-via actions. + public struct Via { + /// The list of network function groups associated with the service insertion action. + public var networkFunctionGroups: [NetworkManagerClientTypes.NetworkFunctionGroup]? + /// Describes any edge overrides. An edge override is a specific edge to be used for traffic. + public var withEdgeOverrides: [NetworkManagerClientTypes.EdgeOverride]? + + public init( + networkFunctionGroups: [NetworkManagerClientTypes.NetworkFunctionGroup]? = nil, + withEdgeOverrides: [NetworkManagerClientTypes.EdgeOverride]? = nil + ) + { + self.networkFunctionGroups = networkFunctionGroups + self.withEdgeOverrides = withEdgeOverrides + } + } + +} + +extension NetworkManagerClientTypes { + /// Displays a list of the destination segments. Used only when the service insertion action is send-to. + public struct WhenSentTo { + /// The list of destination segments when the service insertion action is send-to. + public var whenSentToSegmentsList: [Swift.String]? + + public init( + whenSentToSegmentsList: [Swift.String]? = nil + ) + { + self.whenSentToSegmentsList = whenSentToSegmentsList + } + } + +} + +extension NetworkManagerClientTypes { + /// Describes the action that the service insertion will take for any segments associated with it. + public struct ServiceInsertionAction { + /// The action the service insertion takes for traffic. send-via sends east-west traffic between attachments. send-to sends north-south traffic to the security appliance, and then from that to either the Internet or to an on-premesis location. + public var action: NetworkManagerClientTypes.SegmentActionServiceInsertion? + /// Describes the mode packets take for the send-via action. This is not used when the action is send-to. dual-hop packets traverse attachments in both the source to the destination core network edges. This mode requires that an inspection attachment must be present in all Regions of the service insertion-enabled segments. For single-hop, packets traverse a single intermediate inserted attachment. You can use EdgeOverride to specify a specific edge to use. + public var mode: NetworkManagerClientTypes.SendViaMode? + /// The list of network function groups and any edge overrides for the chosen service insertion action. Used for both send-to or send-via. + public var via: NetworkManagerClientTypes.Via? + /// The list of destination segments if the service insertion action is send-via. + public var whenSentTo: NetworkManagerClientTypes.WhenSentTo? + + public init( + action: NetworkManagerClientTypes.SegmentActionServiceInsertion? = nil, + mode: NetworkManagerClientTypes.SendViaMode? = nil, + via: NetworkManagerClientTypes.Via? = nil, + whenSentTo: NetworkManagerClientTypes.WhenSentTo? = nil + ) + { + self.action = action + self.mode = mode + self.via = via + self.whenSentTo = whenSentTo + } + } + +} + extension NetworkManagerClientTypes { /// Describes a core network change. public struct CoreNetworkChangeValues { @@ -1754,8 +1996,12 @@ extension NetworkManagerClientTypes { public var edgeLocations: [Swift.String]? /// The inside IP addresses used for core network change values. public var insideCidrBlocks: [Swift.String]? + /// The network function group name if the change event is associated with a network function group. + public var networkFunctionGroupName: Swift.String? /// The names of the segments in a core network. public var segmentName: Swift.String? + /// Describes the service insertion action. + public var serviceInsertionActions: [NetworkManagerClientTypes.ServiceInsertionAction]? /// The shared segments for a core network change value. public var sharedSegments: [Swift.String]? @@ -1765,7 +2011,9 @@ extension NetworkManagerClientTypes { destinationIdentifier: Swift.String? = nil, edgeLocations: [Swift.String]? = nil, insideCidrBlocks: [Swift.String]? = nil, + networkFunctionGroupName: Swift.String? = nil, segmentName: Swift.String? = nil, + serviceInsertionActions: [NetworkManagerClientTypes.ServiceInsertionAction]? = nil, sharedSegments: [Swift.String]? = nil ) { @@ -1774,7 +2022,9 @@ extension NetworkManagerClientTypes { self.destinationIdentifier = destinationIdentifier self.edgeLocations = edgeLocations self.insideCidrBlocks = insideCidrBlocks + self.networkFunctionGroupName = networkFunctionGroupName self.segmentName = segmentName + self.serviceInsertionActions = serviceInsertionActions self.sharedSegments = sharedSegments } } @@ -1826,6 +2076,8 @@ extension NetworkManagerClientTypes { public var cidr: Swift.String? /// The edge location for the core network change event. public var edgeLocation: Swift.String? + /// The changed network function group name. + public var networkFunctionGroupName: Swift.String? /// The segment name if the change event is associated with a segment. public var segmentName: Swift.String? @@ -1833,12 +2085,14 @@ extension NetworkManagerClientTypes { attachmentId: Swift.String? = nil, cidr: Swift.String? = nil, edgeLocation: Swift.String? = nil, + networkFunctionGroupName: Swift.String? = nil, segmentName: Swift.String? = nil ) { self.attachmentId = attachmentId self.cidr = cidr self.edgeLocation = edgeLocation + self.networkFunctionGroupName = networkFunctionGroupName self.segmentName = segmentName } } @@ -1881,6 +2135,30 @@ extension NetworkManagerClientTypes { } +extension NetworkManagerClientTypes { + /// Describes a core network + public struct CoreNetworkNetworkFunctionGroupIdentifier { + /// The ID of the core network. + public var coreNetworkId: Swift.String? + /// The location for the core network edge. + public var edgeLocation: Swift.String? + /// The network function group name. + public var networkFunctionGroupName: Swift.String? + + public init( + coreNetworkId: Swift.String? = nil, + edgeLocation: Swift.String? = nil, + networkFunctionGroupName: Swift.String? = nil + ) + { + self.coreNetworkId = coreNetworkId + self.edgeLocation = edgeLocation + self.networkFunctionGroupName = networkFunctionGroupName + } + } + +} + extension NetworkManagerClientTypes { public enum CoreNetworkPolicyAlias: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { @@ -2209,21 +2487,21 @@ public struct CreateConnectionOutput { } public struct CreateConnectPeerInput { - /// The Connect peer BGP options. + /// The Connect peer BGP options. This only applies only when the protocol is GRE. public var bgpOptions: NetworkManagerClientTypes.BgpOptions? /// The client token associated with the request. public var clientToken: Swift.String? /// The ID of the connection attachment. /// This member is required. public var connectAttachmentId: Swift.String? - /// A Connect peer core network address. + /// A Connect peer core network address. This only applies only when the protocol is GRE. public var coreNetworkAddress: Swift.String? /// The inside IP addresses used for BGP peering. public var insideCidrBlocks: [Swift.String]? /// The Connect peer address. /// This member is required. public var peerAddress: Swift.String? - /// The subnet ARN for the Connect peer. + /// The subnet ARN for the Connect peer. This only applies only when the protocol is NO_ENCAP. public var subnetArn: Swift.String? /// The tags associated with the peer request. public var tags: [NetworkManagerClientTypes.Tag]? @@ -4336,12 +4614,20 @@ public struct GetNetworkResourceCountsInput { /// /// The following are the supported resource types for Network Manager: /// + /// * attachment + /// + /// * connect-peer + /// /// * connection /// + /// * core-network + /// /// * device /// /// * link /// + /// * peering + /// /// * site /// /// @@ -4439,12 +4725,20 @@ public struct GetNetworkResourceRelationshipsInput { /// /// The following are the supported resource types for Network Manager: /// + /// * attachment + /// + /// * connect-peer + /// /// * connection /// + /// * core-network + /// /// * device /// /// * link /// + /// * peering + /// /// * site /// /// @@ -4543,37 +4837,45 @@ public struct GetNetworkResourcesInput { public var resourceArn: Swift.String? /// The resource type. The following are the supported resource types for Direct Connect: /// - /// * dxcon - The definition model is [Connection](https://docs.aws.amazon.com/directconnect/latest/APIReference/API_Connection.html). + /// * dxcon /// - /// * dx-gateway - The definition model is [DirectConnectGateway](https://docs.aws.amazon.com/directconnect/latest/APIReference/API_DirectConnectGateway.html). + /// * dx-gateway /// - /// * dx-vif - The definition model is [VirtualInterface](https://docs.aws.amazon.com/directconnect/latest/APIReference/API_VirtualInterface.html). + /// * dx-vif /// /// /// The following are the supported resource types for Network Manager: /// - /// * connection - The definition model is [Connection](https://docs.aws.amazon.com/networkmanager/latest/APIReference/API_Connection.html). + /// * attachment /// - /// * device - The definition model is [Device](https://docs.aws.amazon.com/networkmanager/latest/APIReference/API_Device.html). + /// * connect-peer /// - /// * link - The definition model is [Link](https://docs.aws.amazon.com/networkmanager/latest/APIReference/API_Link.html). + /// * connection /// - /// * site - The definition model is [Site](https://docs.aws.amazon.com/networkmanager/latest/APIReference/API_Site.html). + /// * core-network + /// + /// * device + /// + /// * link + /// + /// * peering + /// + /// * site /// /// /// The following are the supported resource types for Amazon VPC: /// - /// * customer-gateway - The definition model is [CustomerGateway](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CustomerGateway.html). + /// * customer-gateway /// - /// * transit-gateway - The definition model is [TransitGateway](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TransitGateway.html). + /// * transit-gateway /// - /// * transit-gateway-attachment - The definition model is [TransitGatewayAttachment](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TransitGatewayAttachment.html). + /// * transit-gateway-attachment /// - /// * transit-gateway-connect-peer - The definition model is [TransitGatewayConnectPeer](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TransitGatewayConnectPeer.html). + /// * transit-gateway-connect-peer /// - /// * transit-gateway-route-table - The definition model is [TransitGatewayRouteTable](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TransitGatewayRouteTable.html). + /// * transit-gateway-route-table /// - /// * vpn-connection - The definition model is [VpnConnection](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_VpnConnection.html). + /// * vpn-connection public var resourceType: Swift.String? public init( @@ -4632,12 +4934,20 @@ extension NetworkManagerClientTypes { /// /// The following are the supported resource types for Network Manager: /// + /// * attachment + /// + /// * connect-peer + /// /// * connection /// + /// * core-network + /// /// * device /// /// * link /// + /// * peering + /// /// * site /// /// @@ -4707,16 +5017,20 @@ public struct GetNetworkResourcesOutput { extension NetworkManagerClientTypes { /// Describes a route table. public struct RouteTableIdentifier { + /// The route table identifier associated with the network function group. + public var coreNetworkNetworkFunctionGroup: NetworkManagerClientTypes.CoreNetworkNetworkFunctionGroupIdentifier? /// The segment edge in a core network. public var coreNetworkSegmentEdge: NetworkManagerClientTypes.CoreNetworkSegmentEdgeIdentifier? /// The ARN of the transit gateway route table for the attachment request. For example, "TransitGatewayRouteTableArn": "arn:aws:ec2:us-west-2:123456789012:transit-gateway-route-table/tgw-rtb-9876543210123456". public var transitGatewayRouteTableArn: Swift.String? public init( + coreNetworkNetworkFunctionGroup: NetworkManagerClientTypes.CoreNetworkNetworkFunctionGroupIdentifier? = nil, coreNetworkSegmentEdge: NetworkManagerClientTypes.CoreNetworkSegmentEdgeIdentifier? = nil, transitGatewayRouteTableArn: Swift.String? = nil ) { + self.coreNetworkNetworkFunctionGroup = coreNetworkNetworkFunctionGroup self.coreNetworkSegmentEdge = coreNetworkSegmentEdge self.transitGatewayRouteTableArn = transitGatewayRouteTableArn } @@ -4839,6 +5153,8 @@ extension NetworkManagerClientTypes { public var coreNetworkAttachmentId: Swift.String? /// The edge location for the network destination. public var edgeLocation: Swift.String? + /// The network function group name associated with the destination. + public var networkFunctionGroupName: Swift.String? /// The ID of the resource. public var resourceId: Swift.String? /// The resource type. @@ -4851,6 +5167,7 @@ extension NetworkManagerClientTypes { public init( coreNetworkAttachmentId: Swift.String? = nil, edgeLocation: Swift.String? = nil, + networkFunctionGroupName: Swift.String? = nil, resourceId: Swift.String? = nil, resourceType: Swift.String? = nil, segmentName: Swift.String? = nil, @@ -4859,6 +5176,7 @@ extension NetworkManagerClientTypes { { self.coreNetworkAttachmentId = coreNetworkAttachmentId self.edgeLocation = edgeLocation + self.networkFunctionGroupName = networkFunctionGroupName self.resourceId = resourceId self.resourceType = resourceType self.segmentName = segmentName @@ -4904,12 +5222,14 @@ extension NetworkManagerClientTypes { public enum RouteTableType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { case coreNetworkSegment + case networkFunctionGroup case transitGatewayRouteTable case sdkUnknown(Swift.String) public static var allCases: [RouteTableType] { return [ .coreNetworkSegment, + .networkFunctionGroup, .transitGatewayRouteTable ] } @@ -4922,6 +5242,7 @@ extension NetworkManagerClientTypes { public var rawValue: Swift.String { switch self { case .coreNetworkSegment: return "CORE_NETWORK_SEGMENT" + case .networkFunctionGroup: return "NETWORK_FUNCTION_GROUP" case .transitGatewayRouteTable: return "TRANSIT_GATEWAY_ROUTE_TABLE" case let .sdkUnknown(s): return s } @@ -4975,38 +5296,12 @@ public struct GetNetworkTelemetryInput { public var registeredGatewayArn: Swift.String? /// The ARN of the resource. public var resourceArn: Swift.String? - /// The resource type. The following are the supported resource types for Direct Connect: + /// The resource type. The following are the supported resource types: /// - /// * dxcon - /// - /// * dx-gateway - /// - /// * dx-vif - /// - /// - /// The following are the supported resource types for Network Manager: - /// - /// * connection - /// - /// * device - /// - /// * link - /// - /// * site - /// - /// - /// The following are the supported resource types for Amazon VPC: - /// - /// * customer-gateway - /// - /// * transit-gateway - /// - /// * transit-gateway-attachment + /// * connect-peer /// /// * transit-gateway-connect-peer /// - /// * transit-gateway-route-table - /// /// * vpn-connection public var resourceType: Swift.String? @@ -11150,22 +11445,24 @@ extension NetworkManagerClientTypes.Attachment { value.resourceArn = try reader["ResourceArn"].readIfPresent() value.attachmentPolicyRuleNumber = try reader["AttachmentPolicyRuleNumber"].readIfPresent() value.segmentName = try reader["SegmentName"].readIfPresent() + value.networkFunctionGroupName = try reader["NetworkFunctionGroupName"].readIfPresent() value.tags = try reader["Tags"].readListIfPresent(memberReadingClosure: NetworkManagerClientTypes.Tag.read(from:), memberNodeInfo: "member", isFlattened: false) value.proposedSegmentChange = try reader["ProposedSegmentChange"].readIfPresent(with: NetworkManagerClientTypes.ProposedSegmentChange.read(from:)) + value.proposedNetworkFunctionGroupChange = try reader["ProposedNetworkFunctionGroupChange"].readIfPresent(with: NetworkManagerClientTypes.ProposedNetworkFunctionGroupChange.read(from:)) value.createdAt = try reader["CreatedAt"].readTimestampIfPresent(format: .epochSeconds) value.updatedAt = try reader["UpdatedAt"].readTimestampIfPresent(format: .epochSeconds) return value } } -extension NetworkManagerClientTypes.ProposedSegmentChange { +extension NetworkManagerClientTypes.ProposedNetworkFunctionGroupChange { - static func read(from reader: SmithyJSON.Reader) throws -> NetworkManagerClientTypes.ProposedSegmentChange { + static func read(from reader: SmithyJSON.Reader) throws -> NetworkManagerClientTypes.ProposedNetworkFunctionGroupChange { guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } - var value = NetworkManagerClientTypes.ProposedSegmentChange() + var value = NetworkManagerClientTypes.ProposedNetworkFunctionGroupChange() value.tags = try reader["Tags"].readListIfPresent(memberReadingClosure: NetworkManagerClientTypes.Tag.read(from:), memberNodeInfo: "member", isFlattened: false) value.attachmentPolicyRuleNumber = try reader["AttachmentPolicyRuleNumber"].readIfPresent() - value.segmentName = try reader["SegmentName"].readIfPresent() + value.networkFunctionGroupName = try reader["NetworkFunctionGroupName"].readIfPresent() return value } } @@ -11187,6 +11484,18 @@ extension NetworkManagerClientTypes.Tag { } } +extension NetworkManagerClientTypes.ProposedSegmentChange { + + static func read(from reader: SmithyJSON.Reader) throws -> NetworkManagerClientTypes.ProposedSegmentChange { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = NetworkManagerClientTypes.ProposedSegmentChange() + value.tags = try reader["Tags"].readListIfPresent(memberReadingClosure: NetworkManagerClientTypes.Tag.read(from:), memberNodeInfo: "member", isFlattened: false) + value.attachmentPolicyRuleNumber = try reader["AttachmentPolicyRuleNumber"].readIfPresent() + value.segmentName = try reader["SegmentName"].readIfPresent() + return value + } +} + extension NetworkManagerClientTypes.ConnectPeerAssociation { static func read(from reader: SmithyJSON.Reader) throws -> NetworkManagerClientTypes.ConnectPeerAssociation { @@ -11346,6 +11655,7 @@ extension NetworkManagerClientTypes.CoreNetwork { value.createdAt = try reader["CreatedAt"].readTimestampIfPresent(format: .epochSeconds) value.state = try reader["State"].readIfPresent() value.segments = try reader["Segments"].readListIfPresent(memberReadingClosure: NetworkManagerClientTypes.CoreNetworkSegment.read(from:), memberNodeInfo: "member", isFlattened: false) + value.networkFunctionGroups = try reader["NetworkFunctionGroups"].readListIfPresent(memberReadingClosure: NetworkManagerClientTypes.CoreNetworkNetworkFunctionGroup.read(from:), memberNodeInfo: "member", isFlattened: false) value.edges = try reader["Edges"].readListIfPresent(memberReadingClosure: NetworkManagerClientTypes.CoreNetworkEdge.read(from:), memberNodeInfo: "member", isFlattened: false) value.tags = try reader["Tags"].readListIfPresent(memberReadingClosure: NetworkManagerClientTypes.Tag.read(from:), memberNodeInfo: "member", isFlattened: false) return value @@ -11364,6 +11674,29 @@ extension NetworkManagerClientTypes.CoreNetworkEdge { } } +extension NetworkManagerClientTypes.CoreNetworkNetworkFunctionGroup { + + static func read(from reader: SmithyJSON.Reader) throws -> NetworkManagerClientTypes.CoreNetworkNetworkFunctionGroup { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = NetworkManagerClientTypes.CoreNetworkNetworkFunctionGroup() + value.name = try reader["Name"].readIfPresent() + value.edgeLocations = try reader["EdgeLocations"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) + value.segments = try reader["Segments"].readIfPresent(with: NetworkManagerClientTypes.ServiceInsertionSegments.read(from:)) + return value + } +} + +extension NetworkManagerClientTypes.ServiceInsertionSegments { + + static func read(from reader: SmithyJSON.Reader) throws -> NetworkManagerClientTypes.ServiceInsertionSegments { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = NetworkManagerClientTypes.ServiceInsertionSegments() + value.sendVia = try reader["SendVia"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) + value.sendTo = try reader["SendTo"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + extension NetworkManagerClientTypes.CoreNetworkSegment { static func read(from reader: SmithyJSON.Reader) throws -> NetworkManagerClientTypes.CoreNetworkSegment { @@ -11661,6 +11994,7 @@ extension NetworkManagerClientTypes.CoreNetworkChangeEventValues { var value = NetworkManagerClientTypes.CoreNetworkChangeEventValues() value.edgeLocation = try reader["EdgeLocation"].readIfPresent() value.segmentName = try reader["SegmentName"].readIfPresent() + value.networkFunctionGroupName = try reader["NetworkFunctionGroupName"].readIfPresent() value.attachmentId = try reader["AttachmentId"].readIfPresent() value.cidr = try reader["Cidr"].readIfPresent() return value @@ -11688,12 +12022,69 @@ extension NetworkManagerClientTypes.CoreNetworkChangeValues { guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } var value = NetworkManagerClientTypes.CoreNetworkChangeValues() value.segmentName = try reader["SegmentName"].readIfPresent() + value.networkFunctionGroupName = try reader["NetworkFunctionGroupName"].readIfPresent() value.edgeLocations = try reader["EdgeLocations"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) value.asn = try reader["Asn"].readIfPresent() value.cidr = try reader["Cidr"].readIfPresent() value.destinationIdentifier = try reader["DestinationIdentifier"].readIfPresent() value.insideCidrBlocks = try reader["InsideCidrBlocks"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) value.sharedSegments = try reader["SharedSegments"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) + value.serviceInsertionActions = try reader["ServiceInsertionActions"].readListIfPresent(memberReadingClosure: NetworkManagerClientTypes.ServiceInsertionAction.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension NetworkManagerClientTypes.ServiceInsertionAction { + + static func read(from reader: SmithyJSON.Reader) throws -> NetworkManagerClientTypes.ServiceInsertionAction { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = NetworkManagerClientTypes.ServiceInsertionAction() + value.action = try reader["Action"].readIfPresent() + value.mode = try reader["Mode"].readIfPresent() + value.whenSentTo = try reader["WhenSentTo"].readIfPresent(with: NetworkManagerClientTypes.WhenSentTo.read(from:)) + value.via = try reader["Via"].readIfPresent(with: NetworkManagerClientTypes.Via.read(from:)) + return value + } +} + +extension NetworkManagerClientTypes.Via { + + static func read(from reader: SmithyJSON.Reader) throws -> NetworkManagerClientTypes.Via { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = NetworkManagerClientTypes.Via() + value.networkFunctionGroups = try reader["NetworkFunctionGroups"].readListIfPresent(memberReadingClosure: NetworkManagerClientTypes.NetworkFunctionGroup.read(from:), memberNodeInfo: "member", isFlattened: false) + value.withEdgeOverrides = try reader["WithEdgeOverrides"].readListIfPresent(memberReadingClosure: NetworkManagerClientTypes.EdgeOverride.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension NetworkManagerClientTypes.EdgeOverride { + + static func read(from reader: SmithyJSON.Reader) throws -> NetworkManagerClientTypes.EdgeOverride { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = NetworkManagerClientTypes.EdgeOverride() + value.edgeSets = try reader["EdgeSets"].readListIfPresent(memberReadingClosure: SmithyReadWrite.listReadingClosure(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false), memberNodeInfo: "member", isFlattened: false) + value.useEdge = try reader["UseEdge"].readIfPresent() + return value + } +} + +extension NetworkManagerClientTypes.NetworkFunctionGroup { + + static func read(from reader: SmithyJSON.Reader) throws -> NetworkManagerClientTypes.NetworkFunctionGroup { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = NetworkManagerClientTypes.NetworkFunctionGroup() + value.name = try reader["Name"].readIfPresent() + return value + } +} + +extension NetworkManagerClientTypes.WhenSentTo { + + static func read(from reader: SmithyJSON.Reader) throws -> NetworkManagerClientTypes.WhenSentTo { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = NetworkManagerClientTypes.WhenSentTo() + value.whenSentToSegmentsList = try reader["WhenSentToSegmentsList"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) return value } } @@ -11781,6 +12172,7 @@ extension NetworkManagerClientTypes.NetworkRouteDestination { value.coreNetworkAttachmentId = try reader["CoreNetworkAttachmentId"].readIfPresent() value.transitGatewayAttachmentId = try reader["TransitGatewayAttachmentId"].readIfPresent() value.segmentName = try reader["SegmentName"].readIfPresent() + value.networkFunctionGroupName = try reader["NetworkFunctionGroupName"].readIfPresent() value.edgeLocation = try reader["EdgeLocation"].readIfPresent() value.resourceType = try reader["ResourceType"].readIfPresent() value.resourceId = try reader["ResourceId"].readIfPresent() @@ -11995,11 +12387,22 @@ extension NetworkManagerClientTypes.RouteTableIdentifier { static func write(value: NetworkManagerClientTypes.RouteTableIdentifier?, to writer: SmithyJSON.Writer) throws { guard let value else { return } + try writer["CoreNetworkNetworkFunctionGroup"].write(value.coreNetworkNetworkFunctionGroup, with: NetworkManagerClientTypes.CoreNetworkNetworkFunctionGroupIdentifier.write(value:to:)) try writer["CoreNetworkSegmentEdge"].write(value.coreNetworkSegmentEdge, with: NetworkManagerClientTypes.CoreNetworkSegmentEdgeIdentifier.write(value:to:)) try writer["TransitGatewayRouteTableArn"].write(value.transitGatewayRouteTableArn) } } +extension NetworkManagerClientTypes.CoreNetworkNetworkFunctionGroupIdentifier { + + static func write(value: NetworkManagerClientTypes.CoreNetworkNetworkFunctionGroupIdentifier?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["CoreNetworkId"].write(value.coreNetworkId) + try writer["EdgeLocation"].write(value.edgeLocation) + try writer["NetworkFunctionGroupName"].write(value.networkFunctionGroupName) + } +} + extension NetworkManagerClientTypes.RouteAnalysisEndpointOptionsSpecification { static func write(value: NetworkManagerClientTypes.RouteAnalysisEndpointOptionsSpecification?, to writer: SmithyJSON.Writer) throws { diff --git a/Sources/Services/AWSOSIS/Sources/AWSOSIS/Models.swift b/Sources/Services/AWSOSIS/Sources/AWSOSIS/Models.swift index cdc3a7f0103..0ec7135b959 100644 --- a/Sources/Services/AWSOSIS/Sources/AWSOSIS/Models.swift +++ b/Sources/Services/AWSOSIS/Sources/AWSOSIS/Models.swift @@ -298,6 +298,35 @@ extension OSISClientTypes { } +extension OSISClientTypes { + + public enum VpcEndpointManagement: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case customer + case service + case sdkUnknown(Swift.String) + + public static var allCases: [VpcEndpointManagement] { + return [ + .customer, + .service + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .customer: return "CUSTOMER" + case .service: return "SERVICE" + case let .sdkUnknown(s): return s + } + } + } +} + extension OSISClientTypes { /// Options that specify the subnets and security groups for an OpenSearch Ingestion VPC endpoint. public struct VpcOptions { @@ -308,16 +337,20 @@ extension OSISClientTypes { public var subnetIds: [Swift.String]? /// Options for attaching a VPC to a pipeline. public var vpcAttachmentOptions: OSISClientTypes.VpcAttachmentOptions? + /// Defines whether you or Amazon OpenSearch Ingestion service create and manage the VPC endpoint configured for the pipeline. + public var vpcEndpointManagement: OSISClientTypes.VpcEndpointManagement? public init( securityGroupIds: [Swift.String]? = nil, subnetIds: [Swift.String]? = nil, - vpcAttachmentOptions: OSISClientTypes.VpcAttachmentOptions? = nil + vpcAttachmentOptions: OSISClientTypes.VpcAttachmentOptions? = nil, + vpcEndpointManagement: OSISClientTypes.VpcEndpointManagement? = nil ) { self.securityGroupIds = securityGroupIds self.subnetIds = subnetIds self.vpcAttachmentOptions = vpcAttachmentOptions + self.vpcEndpointManagement = vpcEndpointManagement } } @@ -565,6 +598,8 @@ extension OSISClientTypes { public var statusReason: OSISClientTypes.PipelineStatusReason? /// A list of tags associated with the given pipeline. public var tags: [OSISClientTypes.Tag]? + /// The VPC endpoint service name for the pipeline. + public var vpcEndpointService: Swift.String? /// The VPC interface endpoints that have access to the pipeline. public var vpcEndpoints: [OSISClientTypes.VpcEndpoint]? @@ -585,6 +620,7 @@ extension OSISClientTypes { status: OSISClientTypes.PipelineStatus? = nil, statusReason: OSISClientTypes.PipelineStatusReason? = nil, tags: [OSISClientTypes.Tag]? = nil, + vpcEndpointService: Swift.String? = nil, vpcEndpoints: [OSISClientTypes.VpcEndpoint]? = nil ) { @@ -604,6 +640,7 @@ extension OSISClientTypes { self.status = status self.statusReason = statusReason self.tags = tags + self.vpcEndpointService = vpcEndpointService self.vpcEndpoints = vpcEndpoints } } @@ -2073,6 +2110,7 @@ extension OSISClientTypes.Pipeline { value.vpcEndpoints = try reader["VpcEndpoints"].readListIfPresent(memberReadingClosure: OSISClientTypes.VpcEndpoint.read(from:), memberNodeInfo: "member", isFlattened: false) value.bufferOptions = try reader["BufferOptions"].readIfPresent(with: OSISClientTypes.BufferOptions.read(from:)) value.encryptionAtRestOptions = try reader["EncryptionAtRestOptions"].readIfPresent(with: OSISClientTypes.EncryptionAtRestOptions.read(from:)) + value.vpcEndpointService = try reader["VpcEndpointService"].readIfPresent() value.serviceVpcEndpoints = try reader["ServiceVpcEndpoints"].readListIfPresent(memberReadingClosure: OSISClientTypes.ServiceVpcEndpoint.read(from:), memberNodeInfo: "member", isFlattened: false) value.destinations = try reader["Destinations"].readListIfPresent(memberReadingClosure: OSISClientTypes.PipelineDestination.read(from:), memberNodeInfo: "member", isFlattened: false) value.tags = try reader["Tags"].readListIfPresent(memberReadingClosure: OSISClientTypes.Tag.read(from:), memberNodeInfo: "member", isFlattened: false) @@ -2168,6 +2206,7 @@ extension OSISClientTypes.VpcOptions { try writer["SecurityGroupIds"].writeList(value.securityGroupIds, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) try writer["SubnetIds"].writeList(value.subnetIds, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) try writer["VpcAttachmentOptions"].write(value.vpcAttachmentOptions, with: OSISClientTypes.VpcAttachmentOptions.write(value:to:)) + try writer["VpcEndpointManagement"].write(value.vpcEndpointManagement) } static func read(from reader: SmithyJSON.Reader) throws -> OSISClientTypes.VpcOptions { @@ -2176,6 +2215,7 @@ extension OSISClientTypes.VpcOptions { value.subnetIds = try reader["SubnetIds"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) value.securityGroupIds = try reader["SecurityGroupIds"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) value.vpcAttachmentOptions = try reader["VpcAttachmentOptions"].readIfPresent(with: OSISClientTypes.VpcAttachmentOptions.read(from:)) + value.vpcEndpointManagement = try reader["VpcEndpointManagement"].readIfPresent() return value } } diff --git a/Sources/Services/AWSPcaConnectorScep/Sources/AWSPcaConnectorScep/AuthSchemeResolver.swift b/Sources/Services/AWSPcaConnectorScep/Sources/AWSPcaConnectorScep/AuthSchemeResolver.swift new file mode 100644 index 00000000000..7cd4964acec --- /dev/null +++ b/Sources/Services/AWSPcaConnectorScep/Sources/AWSPcaConnectorScep/AuthSchemeResolver.swift @@ -0,0 +1,49 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import class Smithy.Context +import enum Smithy.ClientError +import enum SmithyHTTPAuthAPI.SigningPropertyKeys +import protocol SmithyHTTPAuthAPI.AuthSchemeResolver +import protocol SmithyHTTPAuthAPI.AuthSchemeResolverParameters +import struct SmithyHTTPAuthAPI.AuthOption + +public struct PcaConnectorScepAuthSchemeResolverParameters: SmithyHTTPAuthAPI.AuthSchemeResolverParameters { + public let operation: Swift.String + // Region is used for SigV4 auth scheme + public let region: Swift.String? +} + +public protocol PcaConnectorScepAuthSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver { + // Intentionally empty. + // This is the parent protocol that all auth scheme resolver implementations of + // the service PcaConnectorScep must conform to. +} + +public struct DefaultPcaConnectorScepAuthSchemeResolver: PcaConnectorScepAuthSchemeResolver { + + public func resolveAuthScheme(params: SmithyHTTPAuthAPI.AuthSchemeResolverParameters) throws -> [SmithyHTTPAuthAPI.AuthOption] { + var validAuthOptions = [SmithyHTTPAuthAPI.AuthOption]() + guard let serviceParams = params as? PcaConnectorScepAuthSchemeResolverParameters else { + throw Smithy.ClientError.authError("Service specific auth scheme parameters type must be passed to auth scheme resolver.") + } + switch serviceParams.operation { + default: + var sigV4Option = SmithyHTTPAuthAPI.AuthOption(schemeID: "aws.auth#sigv4") + sigV4Option.signingProperties.set(key: SmithyHTTPAuthAPI.SigningPropertyKeys.signingName, value: "pca-connector-scep") + guard let region = serviceParams.region else { + throw Smithy.ClientError.authError("Missing region in auth scheme parameters for SigV4 auth scheme.") + } + sigV4Option.signingProperties.set(key: SmithyHTTPAuthAPI.SigningPropertyKeys.signingRegion, value: region) + validAuthOptions.append(sigV4Option) + } + return validAuthOptions + } + + public func constructParameters(context: Smithy.Context) throws -> SmithyHTTPAuthAPI.AuthSchemeResolverParameters { + guard let opName = context.getOperation() else { + throw Smithy.ClientError.dataNotFound("Operation name not configured in middleware context for auth scheme resolver params construction.") + } + let opRegion = context.getRegion() + return PcaConnectorScepAuthSchemeResolverParameters(operation: opName, region: opRegion) + } +} diff --git a/Sources/Services/AWSPcaConnectorScep/Sources/AWSPcaConnectorScep/Endpoints.swift b/Sources/Services/AWSPcaConnectorScep/Sources/AWSPcaConnectorScep/Endpoints.swift new file mode 100644 index 00000000000..314f59c87f7 --- /dev/null +++ b/Sources/Services/AWSPcaConnectorScep/Sources/AWSPcaConnectorScep/Endpoints.swift @@ -0,0 +1,61 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import class ClientRuntime.EndpointsRequestContext +import let AWSClientRuntime.awsPartitionJSON +import protocol ClientRuntime.EndpointsRequestContextProviding +import struct ClientRuntime.DefaultEndpointResolver +import struct SmithyHTTPAPI.Endpoint + +public struct EndpointParams { + /// Override the endpoint used to send this request + public let endpoint: Swift.String? + /// The AWS region used to dispatch the request. + public let region: Swift.String? + /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error. + public let useDualStack: Swift.Bool + /// When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error. + public let useFIPS: Swift.Bool + + public init( + endpoint: Swift.String? = nil, + region: Swift.String? = nil, + useDualStack: Swift.Bool = false, + useFIPS: Swift.Bool = false + ) + { + self.endpoint = endpoint + self.region = region + self.useDualStack = useDualStack + self.useFIPS = useFIPS + } +} + +extension EndpointParams: ClientRuntime.EndpointsRequestContextProviding { + + public var context: ClientRuntime.EndpointsRequestContext { + get throws { + let context = try ClientRuntime.EndpointsRequestContext() + try context.add(name: "Endpoint", value: self.endpoint) + try context.add(name: "Region", value: self.region) + try context.add(name: "UseDualStack", value: self.useDualStack) + try context.add(name: "UseFIPS", value: self.useFIPS) + return context + } + } +} + +public protocol EndpointResolver { + func resolve(params: EndpointParams) throws -> SmithyHTTPAPI.Endpoint +} + +typealias DefaultEndpointResolver = ClientRuntime.DefaultEndpointResolver + +extension DefaultEndpointResolver { + private static let ruleSet = "{\"version\":\"1.0\",\"parameters\":{\"Region\":{\"builtIn\":\"AWS::Region\",\"required\":false,\"documentation\":\"The AWS region used to dispatch the request.\",\"type\":\"String\"},\"UseDualStack\":{\"builtIn\":\"AWS::UseDualStack\",\"required\":true,\"default\":false,\"documentation\":\"When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.\",\"type\":\"Boolean\"},\"UseFIPS\":{\"builtIn\":\"AWS::UseFIPS\",\"required\":true,\"default\":false,\"documentation\":\"When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.\",\"type\":\"Boolean\"},\"Endpoint\":{\"builtIn\":\"SDK::Endpoint\",\"required\":false,\"documentation\":\"Override the endpoint used to send this request\",\"type\":\"String\"}},\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Invalid Configuration: FIPS and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"Invalid Configuration: Dualstack and custom endpoint are not supported\",\"type\":\"error\"},{\"conditions\":[],\"endpoint\":{\"url\":{\"ref\":\"Endpoint\"},\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"PartitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"rules\":[{\"conditions\":[],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://pca-connector-scep-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"FIPS and DualStack are enabled, but this partition does not support one or both\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsFIPS\"]},true]}],\"rules\":[{\"conditions\":[],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://pca-connector-scep-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"rules\":[{\"conditions\":[],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://pca-connector-scep.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://pca-connector-scep.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid Configuration: Missing Region\",\"type\":\"error\"}],\"type\":\"tree\"}]}" + + init() throws { + try self.init(partitions: AWSClientRuntime.awsPartitionJSON, ruleSet: Self.ruleSet) + } +} + +extension DefaultEndpointResolver: EndpointResolver {} diff --git a/Sources/Services/AWSPcaConnectorScep/Sources/AWSPcaConnectorScep/Models.swift b/Sources/Services/AWSPcaConnectorScep/Sources/AWSPcaConnectorScep/Models.swift new file mode 100644 index 00000000000..927e2849322 --- /dev/null +++ b/Sources/Services/AWSPcaConnectorScep/Sources/AWSPcaConnectorScep/Models.swift @@ -0,0 +1,1762 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import Foundation +import class SmithyHTTPAPI.HttpResponse +import class SmithyJSON.Reader +import class SmithyJSON.Writer +import enum ClientRuntime.ErrorFault +import enum Smithy.ClientError +import enum SmithyReadWrite.ReaderError +import enum SmithyReadWrite.ReadingClosures +import enum SmithyReadWrite.WritingClosures +import protocol AWSClientRuntime.AWSServiceError +import protocol ClientRuntime.HTTPError +import protocol ClientRuntime.ModeledError +import struct AWSClientRuntime.RestJSONError +@_spi(UnknownAWSHTTPServiceError) import struct AWSClientRuntime.UnknownAWSHTTPServiceError +import struct Smithy.URIQueryItem + +public struct DeleteChallengeOutput { + + public init() { } +} + +public struct DeleteConnectorOutput { + + public init() { } +} + +public struct TagResourceOutput { + + public init() { } +} + +public struct UntagResourceOutput { + + public init() { } +} + +/// You can receive this error if you attempt to perform an operation and you don't have the required permissions. This can be caused by insufficient permissions in policies attached to your Amazon Web Services Identity and Access Management (IAM) principal. It can also happen because of restrictions in place from an Amazon Web Services Organizations service control policy (SCP) that affects your Amazon Web Services account. +public struct AccessDeniedException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "AccessDeniedException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +/// The request is malformed or contains an error such as an invalid parameter value or a missing required parameter. +public struct BadRequestException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "BadRequestException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +extension PcaConnectorScepClientTypes { + /// For Connector for SCEP for general-purpose. An object containing information about the specified connector's SCEP challenge passwords. + public struct Challenge { + /// The Amazon Resource Name (ARN) of the challenge. + public var arn: Swift.String? + /// The Amazon Resource Name (ARN) of the connector. + public var connectorArn: Swift.String? + /// The date and time that the challenge was created. + public var createdAt: Foundation.Date? + /// The SCEP challenge password, in UUID format. + public var password: Swift.String? + /// The date and time that the challenge was updated. + public var updatedAt: Foundation.Date? + + public init( + arn: Swift.String? = nil, + connectorArn: Swift.String? = nil, + createdAt: Foundation.Date? = nil, + password: Swift.String? = nil, + updatedAt: Foundation.Date? = nil + ) + { + self.arn = arn + self.connectorArn = connectorArn + self.createdAt = createdAt + self.password = password + self.updatedAt = updatedAt + } + } + +} + +extension PcaConnectorScepClientTypes.Challenge: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "Challenge(arn: \(Swift.String(describing: arn)), connectorArn: \(Swift.String(describing: connectorArn)), createdAt: \(Swift.String(describing: createdAt)), updatedAt: \(Swift.String(describing: updatedAt)), password: \"CONTENT_REDACTED\")"} +} + +extension PcaConnectorScepClientTypes { + /// Contains details about the connector's challenge. + public struct ChallengeMetadata { + /// The Amazon Resource Name (ARN) of the challenge. + public var arn: Swift.String? + /// The Amazon Resource Name (ARN) of the connector. + public var connectorArn: Swift.String? + /// The date and time that the connector was created. + public var createdAt: Foundation.Date? + /// The date and time that the connector was updated. + public var updatedAt: Foundation.Date? + + public init( + arn: Swift.String? = nil, + connectorArn: Swift.String? = nil, + createdAt: Foundation.Date? = nil, + updatedAt: Foundation.Date? = nil + ) + { + self.arn = arn + self.connectorArn = connectorArn + self.createdAt = createdAt + self.updatedAt = updatedAt + } + } + +} + +extension PcaConnectorScepClientTypes { + /// Details about the specified challenge, returned by the [GetChallengeMetadata](https://docs.aws.amazon.com/C4SCEP_API/pca-connector-scep/latest/APIReference/API_GetChallengeMetadata.html) action. + public struct ChallengeMetadataSummary { + /// The Amazon Resource Name (ARN) of the challenge. + public var arn: Swift.String? + /// The Amazon Resource Name (ARN) of the connector. + public var connectorArn: Swift.String? + /// The date and time that the challenge was created. + public var createdAt: Foundation.Date? + /// The date and time that the challenge was updated. + public var updatedAt: Foundation.Date? + + public init( + arn: Swift.String? = nil, + connectorArn: Swift.String? = nil, + createdAt: Foundation.Date? = nil, + updatedAt: Foundation.Date? = nil + ) + { + self.arn = arn + self.connectorArn = connectorArn + self.createdAt = createdAt + self.updatedAt = updatedAt + } + } + +} + +/// This request can't be completed for one of the following reasons because the requested resource was being concurrently modified by another request. +public struct ConflictException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + /// The identifier of the Amazon Web Services resource. + /// This member is required. + public internal(set) var resourceId: Swift.String? = nil + /// The resource type, which can be either Connector or Challenge. + /// This member is required. + public internal(set) var resourceType: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ConflictException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil, + resourceId: Swift.String? = nil, + resourceType: Swift.String? = nil + ) + { + self.properties.message = message + self.properties.resourceId = resourceId + self.properties.resourceType = resourceType + } +} + +/// The request processing has failed because of an unknown error, exception or failure with an internal server. +public struct InternalServerException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "InternalServerException" } + public static var fault: ClientRuntime.ErrorFault { .server } + public static var isRetryable: Swift.Bool { true } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +/// The operation tried to access a nonexistent resource. The resource might be incorrectly specified, or it might have a status other than ACTIVE. +public struct ResourceNotFoundException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + /// The identifier of the Amazon Web Services resource. + /// This member is required. + public internal(set) var resourceId: Swift.String? = nil + /// The resource type, which can be either Connector or Challenge. + /// This member is required. + public internal(set) var resourceType: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ResourceNotFoundException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil, + resourceId: Swift.String? = nil, + resourceType: Swift.String? = nil + ) + { + self.properties.message = message + self.properties.resourceId = resourceId + self.properties.resourceType = resourceType + } +} + +/// The request would cause a service quota to be exceeded. +public struct ServiceQuotaExceededException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + /// The quota identifier. + /// This member is required. + public internal(set) var quotaCode: Swift.String? = nil + /// The resource type, which can be either Connector or Challenge. + /// This member is required. + public internal(set) var resourceType: Swift.String? = nil + /// Identifies the originating service. + /// This member is required. + public internal(set) var serviceCode: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ServiceQuotaExceededException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil, + quotaCode: Swift.String? = nil, + resourceType: Swift.String? = nil, + serviceCode: Swift.String? = nil + ) + { + self.properties.message = message + self.properties.quotaCode = quotaCode + self.properties.resourceType = resourceType + self.properties.serviceCode = serviceCode + } +} + +/// The limit on the number of requests per second was exceeded. +public struct ThrottlingException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ThrottlingException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { true } + public static var isThrottling: Swift.Bool { true } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +extension PcaConnectorScepClientTypes { + + public enum ValidationExceptionReason: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case caCertValidityTooShort + case invalidCaUsageMode + case invalidConnectorType + case invalidState + case noClientToken + case other + case unknownOperation + case sdkUnknown(Swift.String) + + public static var allCases: [ValidationExceptionReason] { + return [ + .caCertValidityTooShort, + .invalidCaUsageMode, + .invalidConnectorType, + .invalidState, + .noClientToken, + .other, + .unknownOperation + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .caCertValidityTooShort: return "CA_CERT_VALIDITY_TOO_SHORT" + case .invalidCaUsageMode: return "INVALID_CA_USAGE_MODE" + case .invalidConnectorType: return "INVALID_CONNECTOR_TYPE" + case .invalidState: return "INVALID_STATE" + case .noClientToken: return "NO_CLIENT_TOKEN" + case .other: return "OTHER" + case .unknownOperation: return "UNKNOWN_OPERATION" + case let .sdkUnknown(s): return s + } + } + } +} + +/// An input validation error occurred. For example, invalid characters in a name tag, or an invalid pagination token. +public struct ValidationException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + /// The reason for the validation error, if available. The service doesn't return a reason for every validation exception. + public internal(set) var reason: PcaConnectorScepClientTypes.ValidationExceptionReason? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ValidationException" } + public static var fault: ClientRuntime.ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil, + reason: PcaConnectorScepClientTypes.ValidationExceptionReason? = nil + ) + { + self.properties.message = message + self.properties.reason = reason + } +} + +public struct CreateChallengeInput { + /// Custom string that can be used to distinguish between calls to the [CreateChallenge](https://docs.aws.amazon.com/C4SCEP_API/pca-connector-scep/latest/APIReference/API_CreateChallenge.html) action. Client tokens for CreateChallenge time out after five minutes. Therefore, if you call CreateChallenge multiple times with the same client token within five minutes, Connector for SCEP recognizes that you are requesting only one challenge and will only respond with one. If you change the client token for each call, Connector for SCEP recognizes that you are requesting multiple challenge passwords. + public var clientToken: Swift.String? + /// The Amazon Resource Name (ARN) of the connector that you want to create a challenge for. + /// This member is required. + public var connectorArn: Swift.String? + /// The key-value pairs to associate with the resource. + public var tags: [Swift.String: Swift.String]? + + public init( + clientToken: Swift.String? = nil, + connectorArn: Swift.String? = nil, + tags: [Swift.String: Swift.String]? = nil + ) + { + self.clientToken = clientToken + self.connectorArn = connectorArn + self.tags = tags + } +} + +public struct CreateChallengeOutput { + /// Returns the challenge details for the specified connector. + public var challenge: PcaConnectorScepClientTypes.Challenge? + + public init( + challenge: PcaConnectorScepClientTypes.Challenge? = nil + ) + { + self.challenge = challenge + } +} + +public struct DeleteChallengeInput { + /// The Amazon Resource Name (ARN) of the challenge password to delete. + /// This member is required. + public var challengeArn: Swift.String? + + public init( + challengeArn: Swift.String? = nil + ) + { + self.challengeArn = challengeArn + } +} + +public struct GetChallengeMetadataInput { + /// The Amazon Resource Name (ARN) of the challenge. + /// This member is required. + public var challengeArn: Swift.String? + + public init( + challengeArn: Swift.String? = nil + ) + { + self.challengeArn = challengeArn + } +} + +public struct GetChallengeMetadataOutput { + /// The metadata for the challenge. + public var challengeMetadata: PcaConnectorScepClientTypes.ChallengeMetadata? + + public init( + challengeMetadata: PcaConnectorScepClientTypes.ChallengeMetadata? = nil + ) + { + self.challengeMetadata = challengeMetadata + } +} + +public struct GetChallengePasswordInput { + /// The Amazon Resource Name (ARN) of the challenge. + /// This member is required. + public var challengeArn: Swift.String? + + public init( + challengeArn: Swift.String? = nil + ) + { + self.challengeArn = challengeArn + } +} + +public struct GetChallengePasswordOutput { + /// The SCEP challenge password. + public var password: Swift.String? + + public init( + password: Swift.String? = nil + ) + { + self.password = password + } +} + +extension GetChallengePasswordOutput: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "GetChallengePasswordOutput(password: \"CONTENT_REDACTED\")"} +} + +public struct ListChallengeMetadataInput { + /// The Amazon Resource Name (ARN) of the connector. + /// This member is required. + public var connectorArn: Swift.String? + /// The maximum number of objects that you want Connector for SCEP to return for this request. If more objects are available, in the response, Connector for SCEP provides a NextToken value that you can use in a subsequent call to get the next batch of objects. + public var maxResults: Swift.Int? + /// When you request a list of objects with a MaxResults setting, if the number of objects that are still available for retrieval exceeds the maximum you requested, Connector for SCEP returns a NextToken value in the response. To retrieve the next batch of objects, use the token returned from the prior request in your next request. + public var nextToken: Swift.String? + + public init( + connectorArn: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.connectorArn = connectorArn + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +public struct ListChallengeMetadataOutput { + /// The challenge metadata for the challenges belonging to your Amazon Web Services account. + public var challenges: [PcaConnectorScepClientTypes.ChallengeMetadataSummary]? + /// When you request a list of objects with a MaxResults setting, if the number of objects that are still available for retrieval exceeds the maximum you requested, Connector for SCEP returns a NextToken value in the response. To retrieve the next batch of objects, use the token returned from the prior request in your next request. + public var nextToken: Swift.String? + + public init( + challenges: [PcaConnectorScepClientTypes.ChallengeMetadataSummary]? = nil, + nextToken: Swift.String? = nil + ) + { + self.challenges = challenges + self.nextToken = nextToken + } +} + +extension PcaConnectorScepClientTypes { + /// Contains configuration details for use with Microsoft Intune. For information about using Connector for SCEP for Microsoft Intune, see [Using Connector for SCEP for Microsoft Intune](https://docs.aws.amazon.com/privateca/latest/userguide/scep-connector.htmlconnector-for-scep-intune.html). When you use Connector for SCEP for Microsoft Intune, certain functionalities are enabled by accessing Microsoft Intune through the Microsoft API. Your use of the Connector for SCEP and accompanying Amazon Web Services services doesn't remove your need to have a valid license for your use of the Microsoft Intune service. You should also review the [Microsoft Intune® App Protection Policies](https://learn.microsoft.com/en-us/mem/intune/apps/app-protection-policy). + public struct IntuneConfiguration { + /// The directory (tenant) ID from your Microsoft Entra ID app registration. + /// This member is required. + public var azureApplicationId: Swift.String? + /// The primary domain from your Microsoft Entra ID app registration. + /// This member is required. + public var domain: Swift.String? + + public init( + azureApplicationId: Swift.String? = nil, + domain: Swift.String? = nil + ) + { + self.azureApplicationId = azureApplicationId + self.domain = domain + } + } + +} + +extension PcaConnectorScepClientTypes { + /// If you don't supply a value, by default Connector for SCEP creates a connector for general-purpose use. A general-purpose connector is designed to work with clients or endpoints that support the SCEP protocol, except Connector for SCEP for Microsoft Intune. For information about considerations and limitations with using Connector for SCEP, see [Considerations and Limitations](https://docs.aws.amazon.com/privateca/latest/userguide/scep-connector.htmlc4scep-considerations-limitations.html). If you provide an IntuneConfiguration, Connector for SCEP creates a connector for use with Microsoft Intune, and you manage the challenge passwords using Microsoft Intune. For more information, see [Using Connector for SCEP for Microsoft Intune](https://docs.aws.amazon.com/privateca/latest/userguide/scep-connector.htmlconnector-for-scep-intune.html). + public enum MobileDeviceManagement { + /// Configuration settings for use with Microsoft Intune. For information about using Connector for SCEP for Microsoft Intune, see [Using Connector for SCEP for Microsoft Intune](https://docs.aws.amazon.com/privateca/latest/userguide/scep-connector.htmlconnector-for-scep-intune.html). + case intune(PcaConnectorScepClientTypes.IntuneConfiguration) + case sdkUnknown(Swift.String) + } + +} + +extension PcaConnectorScepClientTypes { + /// Contains OpenID Connect (OIDC) parameters for use with Microsoft Intune. For more information about using Connector for SCEP for Microsoft Intune, see [Using Connector for SCEP for Microsoft Intune](https://docs.aws.amazon.com/privateca/latest/userguide/scep-connector.htmlconnector-for-scep-intune.html). + public struct OpenIdConfiguration { + /// The audience value to copy into your Microsoft Entra app registration's OIDC. + public var audience: Swift.String? + /// The issuer value to copy into your Microsoft Entra app registration's OIDC. + public var issuer: Swift.String? + /// The subject value to copy into your Microsoft Entra app registration's OIDC. + public var subject: Swift.String? + + public init( + audience: Swift.String? = nil, + issuer: Swift.String? = nil, + subject: Swift.String? = nil + ) + { + self.audience = audience + self.issuer = issuer + self.subject = subject + } + } + +} + +extension PcaConnectorScepClientTypes { + + public enum ConnectorStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case active + case creating + case deleting + case failed + case sdkUnknown(Swift.String) + + public static var allCases: [ConnectorStatus] { + return [ + .active, + .creating, + .deleting, + .failed + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .active: return "ACTIVE" + case .creating: return "CREATING" + case .deleting: return "DELETING" + case .failed: return "FAILED" + case let .sdkUnknown(s): return s + } + } + } +} + +extension PcaConnectorScepClientTypes { + + public enum ConnectorStatusReason: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case internalFailure + case privatecaAccessDenied + case privatecaInvalidState + case privatecaResourceNotFound + case sdkUnknown(Swift.String) + + public static var allCases: [ConnectorStatusReason] { + return [ + .internalFailure, + .privatecaAccessDenied, + .privatecaInvalidState, + .privatecaResourceNotFound + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .internalFailure: return "INTERNAL_FAILURE" + case .privatecaAccessDenied: return "PRIVATECA_ACCESS_DENIED" + case .privatecaInvalidState: return "PRIVATECA_INVALID_STATE" + case .privatecaResourceNotFound: return "PRIVATECA_RESOURCE_NOT_FOUND" + case let .sdkUnknown(s): return s + } + } + } +} + +extension PcaConnectorScepClientTypes { + + public enum ConnectorType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case generalPurpose + case intune + case sdkUnknown(Swift.String) + + public static var allCases: [ConnectorType] { + return [ + .generalPurpose, + .intune + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .generalPurpose: return "GENERAL_PURPOSE" + case .intune: return "INTUNE" + case let .sdkUnknown(s): return s + } + } + } +} + +extension PcaConnectorScepClientTypes { + /// Connector for SCEP is a service that links Amazon Web Services Private Certificate Authority to your SCEP-enabled devices. The connector brokers the exchange of certificates from Amazon Web Services Private CA to your SCEP-enabled devices and mobile device management systems. The connector is a complex type that contains the connector's configuration settings. + public struct Connector { + /// The Amazon Resource Name (ARN) of the connector. + public var arn: Swift.String? + /// The Amazon Resource Name (ARN) of the certificate authority associated with the connector. + public var certificateAuthorityArn: Swift.String? + /// The date and time that the connector was created. + public var createdAt: Foundation.Date? + /// The connector's HTTPS public SCEP URL. + public var endpoint: Swift.String? + /// Contains settings relevant to the mobile device management system that you chose for the connector. If you didn't configure MobileDeviceManagement, then the connector is for general-purpose use and this object is empty. + public var mobileDeviceManagement: PcaConnectorScepClientTypes.MobileDeviceManagement? + /// Contains OpenID Connect (OIDC) parameters for use with Connector for SCEP for Microsoft Intune. For more information about using Connector for SCEP for Microsoft Intune, see [Using Connector for SCEP for Microsoft Intune](https://docs.aws.amazon.com/privateca/latest/userguide/scep-connector.htmlconnector-for-scep-intune.html). + public var openIdConfiguration: PcaConnectorScepClientTypes.OpenIdConfiguration? + /// The connector's status. + public var status: PcaConnectorScepClientTypes.ConnectorStatus? + /// Information about why connector creation failed, if status is FAILED. + public var statusReason: PcaConnectorScepClientTypes.ConnectorStatusReason? + /// The connector type. + public var type: PcaConnectorScepClientTypes.ConnectorType? + /// The date and time that the connector was updated. + public var updatedAt: Foundation.Date? + + public init( + arn: Swift.String? = nil, + certificateAuthorityArn: Swift.String? = nil, + createdAt: Foundation.Date? = nil, + endpoint: Swift.String? = nil, + mobileDeviceManagement: PcaConnectorScepClientTypes.MobileDeviceManagement? = nil, + openIdConfiguration: PcaConnectorScepClientTypes.OpenIdConfiguration? = nil, + status: PcaConnectorScepClientTypes.ConnectorStatus? = nil, + statusReason: PcaConnectorScepClientTypes.ConnectorStatusReason? = nil, + type: PcaConnectorScepClientTypes.ConnectorType? = nil, + updatedAt: Foundation.Date? = nil + ) + { + self.arn = arn + self.certificateAuthorityArn = certificateAuthorityArn + self.createdAt = createdAt + self.endpoint = endpoint + self.mobileDeviceManagement = mobileDeviceManagement + self.openIdConfiguration = openIdConfiguration + self.status = status + self.statusReason = statusReason + self.type = type + self.updatedAt = updatedAt + } + } + +} + +extension PcaConnectorScepClientTypes { + /// Lists the Amazon Web Services Private CA SCEP connectors belonging to your Amazon Web Services account. + public struct ConnectorSummary { + /// The Amazon Resource Name (ARN) of the connector. + public var arn: Swift.String? + /// The Amazon Resource Name (ARN) of the connector's associated certificate authority. + public var certificateAuthorityArn: Swift.String? + /// The date and time that the challenge was created. + public var createdAt: Foundation.Date? + /// The connector's HTTPS public SCEP URL. + public var endpoint: Swift.String? + /// Contains settings relevant to the mobile device management system that you chose for the connector. If you didn't configure MobileDeviceManagement, then the connector is for general-purpose use and this object is empty. + public var mobileDeviceManagement: PcaConnectorScepClientTypes.MobileDeviceManagement? + /// Contains OpenID Connect (OIDC) parameters for use with Microsoft Intune. + public var openIdConfiguration: PcaConnectorScepClientTypes.OpenIdConfiguration? + /// The connector's status. Status can be creating, active, deleting, or failed. + public var status: PcaConnectorScepClientTypes.ConnectorStatus? + /// Information about why connector creation failed, if status is FAILED. + public var statusReason: PcaConnectorScepClientTypes.ConnectorStatusReason? + /// The connector type. + public var type: PcaConnectorScepClientTypes.ConnectorType? + /// The date and time that the challenge was updated. + public var updatedAt: Foundation.Date? + + public init( + arn: Swift.String? = nil, + certificateAuthorityArn: Swift.String? = nil, + createdAt: Foundation.Date? = nil, + endpoint: Swift.String? = nil, + mobileDeviceManagement: PcaConnectorScepClientTypes.MobileDeviceManagement? = nil, + openIdConfiguration: PcaConnectorScepClientTypes.OpenIdConfiguration? = nil, + status: PcaConnectorScepClientTypes.ConnectorStatus? = nil, + statusReason: PcaConnectorScepClientTypes.ConnectorStatusReason? = nil, + type: PcaConnectorScepClientTypes.ConnectorType? = nil, + updatedAt: Foundation.Date? = nil + ) + { + self.arn = arn + self.certificateAuthorityArn = certificateAuthorityArn + self.createdAt = createdAt + self.endpoint = endpoint + self.mobileDeviceManagement = mobileDeviceManagement + self.openIdConfiguration = openIdConfiguration + self.status = status + self.statusReason = statusReason + self.type = type + self.updatedAt = updatedAt + } + } + +} + +public struct CreateConnectorInput { + /// The Amazon Resource Name (ARN) of the Amazon Web Services Private Certificate Authority certificate authority to use with this connector. Due to security vulnerabilities present in the SCEP protocol, we recommend using a private CA that's dedicated for use with the connector. To retrieve the private CAs associated with your account, you can call [ListCertificateAuthorities](https://docs.aws.amazon.com/privateca/latest/APIReference/API_ListCertificateAuthorities.html) using the Amazon Web Services Private CA API. + /// This member is required. + public var certificateAuthorityArn: Swift.String? + /// Custom string that can be used to distinguish between calls to the [CreateChallenge](https://docs.aws.amazon.com/C4SCEP_API/pca-connector-scep/latest/APIReference/API_CreateChallenge.html) action. Client tokens for CreateChallenge time out after five minutes. Therefore, if you call CreateChallenge multiple times with the same client token within five minutes, Connector for SCEP recognizes that you are requesting only one challenge and will only respond with one. If you change the client token for each call, Connector for SCEP recognizes that you are requesting multiple challenge passwords. + public var clientToken: Swift.String? + /// If you don't supply a value, by default Connector for SCEP creates a connector for general-purpose use. A general-purpose connector is designed to work with clients or endpoints that support the SCEP protocol, except Connector for SCEP for Microsoft Intune. With connectors for general-purpose use, you manage SCEP challenge passwords using Connector for SCEP. For information about considerations and limitations with using Connector for SCEP, see [Considerations and Limitations](https://docs.aws.amazon.com/privateca/latest/userguide/scep-connector.htmlc4scep-considerations-limitations.html). If you provide an IntuneConfiguration, Connector for SCEP creates a connector for use with Microsoft Intune, and you manage the challenge passwords using Microsoft Intune. For more information, see [Using Connector for SCEP for Microsoft Intune](https://docs.aws.amazon.com/privateca/latest/userguide/scep-connector.htmlconnector-for-scep-intune.html). + public var mobileDeviceManagement: PcaConnectorScepClientTypes.MobileDeviceManagement? + /// The key-value pairs to associate with the resource. + public var tags: [Swift.String: Swift.String]? + + public init( + certificateAuthorityArn: Swift.String? = nil, + clientToken: Swift.String? = nil, + mobileDeviceManagement: PcaConnectorScepClientTypes.MobileDeviceManagement? = nil, + tags: [Swift.String: Swift.String]? = nil + ) + { + self.certificateAuthorityArn = certificateAuthorityArn + self.clientToken = clientToken + self.mobileDeviceManagement = mobileDeviceManagement + self.tags = tags + } +} + +public struct CreateConnectorOutput { + /// Returns the Amazon Resource Name (ARN) of the connector. + public var connectorArn: Swift.String? + + public init( + connectorArn: Swift.String? = nil + ) + { + self.connectorArn = connectorArn + } +} + +public struct DeleteConnectorInput { + /// The Amazon Resource Name (ARN) of the connector to delete. + /// This member is required. + public var connectorArn: Swift.String? + + public init( + connectorArn: Swift.String? = nil + ) + { + self.connectorArn = connectorArn + } +} + +public struct GetConnectorInput { + /// The Amazon Resource Name (ARN) of the connector. + /// This member is required. + public var connectorArn: Swift.String? + + public init( + connectorArn: Swift.String? = nil + ) + { + self.connectorArn = connectorArn + } +} + +public struct GetConnectorOutput { + /// The properties of the connector. + public var connector: PcaConnectorScepClientTypes.Connector? + + public init( + connector: PcaConnectorScepClientTypes.Connector? = nil + ) + { + self.connector = connector + } +} + +public struct ListConnectorsInput { + /// The maximum number of objects that you want Connector for SCEP to return for this request. If more objects are available, in the response, Connector for SCEP provides a NextToken value that you can use in a subsequent call to get the next batch of objects. + public var maxResults: Swift.Int? + /// When you request a list of objects with a MaxResults setting, if the number of objects that are still available for retrieval exceeds the maximum you requested, Connector for SCEP returns a NextToken value in the response. To retrieve the next batch of objects, use the token returned from the prior request in your next request. + public var nextToken: Swift.String? + + public init( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +public struct ListConnectorsOutput { + /// The connectors belonging to your Amazon Web Services account. + public var connectors: [PcaConnectorScepClientTypes.ConnectorSummary]? + /// When you request a list of objects with a MaxResults setting, if the number of objects that are still available for retrieval exceeds the maximum you requested, Connector for SCEP returns a NextToken value in the response. To retrieve the next batch of objects, use the token returned from the prior request in your next request. + public var nextToken: Swift.String? + + public init( + connectors: [PcaConnectorScepClientTypes.ConnectorSummary]? = nil, + nextToken: Swift.String? = nil + ) + { + self.connectors = connectors + self.nextToken = nextToken + } +} + +public struct ListTagsForResourceInput { + /// The Amazon Resource Name (ARN) of the resource. + /// This member is required. + public var resourceArn: Swift.String? + + public init( + resourceArn: Swift.String? = nil + ) + { + self.resourceArn = resourceArn + } +} + +public struct ListTagsForResourceOutput { + /// The key-value pairs to associate with the resource. + public var tags: [Swift.String: Swift.String]? + + public init( + tags: [Swift.String: Swift.String]? = nil + ) + { + self.tags = tags + } +} + +public struct TagResourceInput { + /// The Amazon Resource Name (ARN) of the resource. + /// This member is required. + public var resourceArn: Swift.String? + /// The key-value pairs to associate with the resource. + /// This member is required. + public var tags: [Swift.String: Swift.String]? + + public init( + resourceArn: Swift.String? = nil, + tags: [Swift.String: Swift.String]? = nil + ) + { + self.resourceArn = resourceArn + self.tags = tags + } +} + +public struct UntagResourceInput { + /// The Amazon Resource Name (ARN) of the resource. + /// This member is required. + public var resourceArn: Swift.String? + /// Specifies a list of tag keys that you want to remove from the specified resources. + /// This member is required. + public var tagKeys: [Swift.String]? + + public init( + resourceArn: Swift.String? = nil, + tagKeys: [Swift.String]? = nil + ) + { + self.resourceArn = resourceArn + self.tagKeys = tagKeys + } +} + +extension CreateChallengeInput { + + static func urlPathProvider(_ value: CreateChallengeInput) -> Swift.String? { + return "/challenges" + } +} + +extension CreateConnectorInput { + + static func urlPathProvider(_ value: CreateConnectorInput) -> Swift.String? { + return "/connectors" + } +} + +extension DeleteChallengeInput { + + static func urlPathProvider(_ value: DeleteChallengeInput) -> Swift.String? { + guard let challengeArn = value.challengeArn else { + return nil + } + return "/challenges/\(challengeArn.urlPercentEncoding())" + } +} + +extension DeleteConnectorInput { + + static func urlPathProvider(_ value: DeleteConnectorInput) -> Swift.String? { + guard let connectorArn = value.connectorArn else { + return nil + } + return "/connectors/\(connectorArn.urlPercentEncoding())" + } +} + +extension GetChallengeMetadataInput { + + static func urlPathProvider(_ value: GetChallengeMetadataInput) -> Swift.String? { + guard let challengeArn = value.challengeArn else { + return nil + } + return "/challengeMetadata/\(challengeArn.urlPercentEncoding())" + } +} + +extension GetChallengePasswordInput { + + static func urlPathProvider(_ value: GetChallengePasswordInput) -> Swift.String? { + guard let challengeArn = value.challengeArn else { + return nil + } + return "/challengePasswords/\(challengeArn.urlPercentEncoding())" + } +} + +extension GetConnectorInput { + + static func urlPathProvider(_ value: GetConnectorInput) -> Swift.String? { + guard let connectorArn = value.connectorArn else { + return nil + } + return "/connectors/\(connectorArn.urlPercentEncoding())" + } +} + +extension ListChallengeMetadataInput { + + static func urlPathProvider(_ value: ListChallengeMetadataInput) -> Swift.String? { + return "/challengeMetadata" + } +} + +extension ListChallengeMetadataInput { + + static func queryItemProvider(_ value: ListChallengeMetadataInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + guard let connectorArn = value.connectorArn else { + let message = "Creating a URL Query Item failed. connectorArn is required and must not be nil." + throw Smithy.ClientError.unknownError(message) + } + let connectorArnQueryItem = Smithy.URIQueryItem(name: "ConnectorArn".urlPercentEncoding(), value: Swift.String(connectorArn).urlPercentEncoding()) + items.append(connectorArnQueryItem) + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "NextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "MaxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + return items + } +} + +extension ListConnectorsInput { + + static func urlPathProvider(_ value: ListConnectorsInput) -> Swift.String? { + return "/connectors" + } +} + +extension ListConnectorsInput { + + static func queryItemProvider(_ value: ListConnectorsInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "NextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "MaxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + return items + } +} + +extension ListTagsForResourceInput { + + static func urlPathProvider(_ value: ListTagsForResourceInput) -> Swift.String? { + guard let resourceArn = value.resourceArn else { + return nil + } + return "/tags/\(resourceArn.urlPercentEncoding())" + } +} + +extension TagResourceInput { + + static func urlPathProvider(_ value: TagResourceInput) -> Swift.String? { + guard let resourceArn = value.resourceArn else { + return nil + } + return "/tags/\(resourceArn.urlPercentEncoding())" + } +} + +extension UntagResourceInput { + + static func urlPathProvider(_ value: UntagResourceInput) -> Swift.String? { + guard let resourceArn = value.resourceArn else { + return nil + } + return "/tags/\(resourceArn.urlPercentEncoding())" + } +} + +extension UntagResourceInput { + + static func queryItemProvider(_ value: UntagResourceInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + guard let tagKeys = value.tagKeys else { + let message = "Creating a URL Query Item failed. tagKeys is required and must not be nil." + throw Smithy.ClientError.unknownError(message) + } + tagKeys.forEach { queryItemValue in + let queryItem = Smithy.URIQueryItem(name: "tagKeys".urlPercentEncoding(), value: Swift.String(queryItemValue).urlPercentEncoding()) + items.append(queryItem) + } + return items + } +} + +extension CreateChallengeInput { + + static func write(value: CreateChallengeInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["ClientToken"].write(value.clientToken) + try writer["ConnectorArn"].write(value.connectorArn) + try writer["Tags"].writeMap(value.tags, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + } +} + +extension CreateConnectorInput { + + static func write(value: CreateConnectorInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["CertificateAuthorityArn"].write(value.certificateAuthorityArn) + try writer["ClientToken"].write(value.clientToken) + try writer["MobileDeviceManagement"].write(value.mobileDeviceManagement, with: PcaConnectorScepClientTypes.MobileDeviceManagement.write(value:to:)) + try writer["Tags"].writeMap(value.tags, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + } +} + +extension TagResourceInput { + + static func write(value: TagResourceInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["Tags"].writeMap(value.tags, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + } +} + +extension CreateChallengeOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CreateChallengeOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = CreateChallengeOutput() + value.challenge = try reader["Challenge"].readIfPresent(with: PcaConnectorScepClientTypes.Challenge.read(from:)) + return value + } +} + +extension CreateConnectorOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> CreateConnectorOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = CreateConnectorOutput() + value.connectorArn = try reader["ConnectorArn"].readIfPresent() + return value + } +} + +extension DeleteChallengeOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DeleteChallengeOutput { + return DeleteChallengeOutput() + } +} + +extension DeleteConnectorOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> DeleteConnectorOutput { + return DeleteConnectorOutput() + } +} + +extension GetChallengeMetadataOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetChallengeMetadataOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = GetChallengeMetadataOutput() + value.challengeMetadata = try reader["ChallengeMetadata"].readIfPresent(with: PcaConnectorScepClientTypes.ChallengeMetadata.read(from:)) + return value + } +} + +extension GetChallengePasswordOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetChallengePasswordOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = GetChallengePasswordOutput() + value.password = try reader["Password"].readIfPresent() + return value + } +} + +extension GetConnectorOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> GetConnectorOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = GetConnectorOutput() + value.connector = try reader["Connector"].readIfPresent(with: PcaConnectorScepClientTypes.Connector.read(from:)) + return value + } +} + +extension ListChallengeMetadataOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListChallengeMetadataOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListChallengeMetadataOutput() + value.challenges = try reader["Challenges"].readListIfPresent(memberReadingClosure: PcaConnectorScepClientTypes.ChallengeMetadataSummary.read(from:), memberNodeInfo: "member", isFlattened: false) + value.nextToken = try reader["NextToken"].readIfPresent() + return value + } +} + +extension ListConnectorsOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListConnectorsOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListConnectorsOutput() + value.connectors = try reader["Connectors"].readListIfPresent(memberReadingClosure: PcaConnectorScepClientTypes.ConnectorSummary.read(from:), memberNodeInfo: "member", isFlattened: false) + value.nextToken = try reader["NextToken"].readIfPresent() + return value + } +} + +extension ListTagsForResourceOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> ListTagsForResourceOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListTagsForResourceOutput() + value.tags = try reader["Tags"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) + return value + } +} + +extension TagResourceOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> TagResourceOutput { + return TagResourceOutput() + } +} + +extension UntagResourceOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> UntagResourceOutput { + return UntagResourceOutput() + } +} + +enum CreateChallengeOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "BadRequestException": return try BadRequestException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ServiceQuotaExceededException": return try ServiceQuotaExceededException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum CreateConnectorOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ServiceQuotaExceededException": return try ServiceQuotaExceededException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum DeleteChallengeOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum DeleteConnectorOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum GetChallengeMetadataOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum GetChallengePasswordOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum GetConnectorOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum ListChallengeMetadataOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum ListConnectorsOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum ListTagsForResourceOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum TagResourceOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +enum UntagResourceOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HttpResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + +extension ValidationException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ValidationException { + let reader = baseError.errorBodyReader + var value = ValidationException() + value.properties.message = try reader["Message"].readIfPresent() + value.properties.reason = try reader["Reason"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension AccessDeniedException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> AccessDeniedException { + let reader = baseError.errorBodyReader + var value = AccessDeniedException() + value.properties.message = try reader["Message"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension ResourceNotFoundException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ResourceNotFoundException { + let reader = baseError.errorBodyReader + var value = ResourceNotFoundException() + value.properties.message = try reader["Message"].readIfPresent() + value.properties.resourceId = try reader["ResourceId"].readIfPresent() + value.properties.resourceType = try reader["ResourceType"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension ThrottlingException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ThrottlingException { + let reader = baseError.errorBodyReader + var value = ThrottlingException() + value.properties.message = try reader["Message"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension InternalServerException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> InternalServerException { + let reader = baseError.errorBodyReader + var value = InternalServerException() + value.properties.message = try reader["Message"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension ConflictException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ConflictException { + let reader = baseError.errorBodyReader + var value = ConflictException() + value.properties.message = try reader["Message"].readIfPresent() + value.properties.resourceId = try reader["ResourceId"].readIfPresent() + value.properties.resourceType = try reader["ResourceType"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension BadRequestException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> BadRequestException { + let reader = baseError.errorBodyReader + var value = BadRequestException() + value.properties.message = try reader["Message"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension ServiceQuotaExceededException { + + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ServiceQuotaExceededException { + let reader = baseError.errorBodyReader + var value = ServiceQuotaExceededException() + value.properties.message = try reader["Message"].readIfPresent() + value.properties.quotaCode = try reader["QuotaCode"].readIfPresent() + value.properties.resourceType = try reader["ResourceType"].readIfPresent() + value.properties.serviceCode = try reader["ServiceCode"].readIfPresent() + value.httpResponse = baseError.httpResponse + value.requestID = baseError.requestID + value.message = baseError.message + return value + } +} + +extension PcaConnectorScepClientTypes.Challenge { + + static func read(from reader: SmithyJSON.Reader) throws -> PcaConnectorScepClientTypes.Challenge { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = PcaConnectorScepClientTypes.Challenge() + value.arn = try reader["Arn"].readIfPresent() + value.connectorArn = try reader["ConnectorArn"].readIfPresent() + value.createdAt = try reader["CreatedAt"].readTimestampIfPresent(format: .epochSeconds) + value.updatedAt = try reader["UpdatedAt"].readTimestampIfPresent(format: .epochSeconds) + value.password = try reader["Password"].readIfPresent() + return value + } +} + +extension PcaConnectorScepClientTypes.ChallengeMetadata { + + static func read(from reader: SmithyJSON.Reader) throws -> PcaConnectorScepClientTypes.ChallengeMetadata { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = PcaConnectorScepClientTypes.ChallengeMetadata() + value.arn = try reader["Arn"].readIfPresent() + value.connectorArn = try reader["ConnectorArn"].readIfPresent() + value.createdAt = try reader["CreatedAt"].readTimestampIfPresent(format: .epochSeconds) + value.updatedAt = try reader["UpdatedAt"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +extension PcaConnectorScepClientTypes.Connector { + + static func read(from reader: SmithyJSON.Reader) throws -> PcaConnectorScepClientTypes.Connector { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = PcaConnectorScepClientTypes.Connector() + value.arn = try reader["Arn"].readIfPresent() + value.certificateAuthorityArn = try reader["CertificateAuthorityArn"].readIfPresent() + value.type = try reader["Type"].readIfPresent() + value.mobileDeviceManagement = try reader["MobileDeviceManagement"].readIfPresent(with: PcaConnectorScepClientTypes.MobileDeviceManagement.read(from:)) + value.openIdConfiguration = try reader["OpenIdConfiguration"].readIfPresent(with: PcaConnectorScepClientTypes.OpenIdConfiguration.read(from:)) + value.status = try reader["Status"].readIfPresent() + value.statusReason = try reader["StatusReason"].readIfPresent() + value.endpoint = try reader["Endpoint"].readIfPresent() + value.createdAt = try reader["CreatedAt"].readTimestampIfPresent(format: .epochSeconds) + value.updatedAt = try reader["UpdatedAt"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +extension PcaConnectorScepClientTypes.OpenIdConfiguration { + + static func read(from reader: SmithyJSON.Reader) throws -> PcaConnectorScepClientTypes.OpenIdConfiguration { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = PcaConnectorScepClientTypes.OpenIdConfiguration() + value.issuer = try reader["Issuer"].readIfPresent() + value.subject = try reader["Subject"].readIfPresent() + value.audience = try reader["Audience"].readIfPresent() + return value + } +} + +extension PcaConnectorScepClientTypes.MobileDeviceManagement { + + static func write(value: PcaConnectorScepClientTypes.MobileDeviceManagement?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + switch value { + case let .intune(intune): + try writer["Intune"].write(intune, with: PcaConnectorScepClientTypes.IntuneConfiguration.write(value:to:)) + case let .sdkUnknown(sdkUnknown): + try writer["sdkUnknown"].write(sdkUnknown) + } + } + + static func read(from reader: SmithyJSON.Reader) throws -> PcaConnectorScepClientTypes.MobileDeviceManagement { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "Intune": + return .intune(try reader["Intune"].read(with: PcaConnectorScepClientTypes.IntuneConfiguration.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension PcaConnectorScepClientTypes.IntuneConfiguration { + + static func write(value: PcaConnectorScepClientTypes.IntuneConfiguration?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["AzureApplicationId"].write(value.azureApplicationId) + try writer["Domain"].write(value.domain) + } + + static func read(from reader: SmithyJSON.Reader) throws -> PcaConnectorScepClientTypes.IntuneConfiguration { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = PcaConnectorScepClientTypes.IntuneConfiguration() + value.azureApplicationId = try reader["AzureApplicationId"].readIfPresent() + value.domain = try reader["Domain"].readIfPresent() + return value + } +} + +extension PcaConnectorScepClientTypes.ChallengeMetadataSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> PcaConnectorScepClientTypes.ChallengeMetadataSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = PcaConnectorScepClientTypes.ChallengeMetadataSummary() + value.arn = try reader["Arn"].readIfPresent() + value.connectorArn = try reader["ConnectorArn"].readIfPresent() + value.createdAt = try reader["CreatedAt"].readTimestampIfPresent(format: .epochSeconds) + value.updatedAt = try reader["UpdatedAt"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +extension PcaConnectorScepClientTypes.ConnectorSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> PcaConnectorScepClientTypes.ConnectorSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = PcaConnectorScepClientTypes.ConnectorSummary() + value.arn = try reader["Arn"].readIfPresent() + value.certificateAuthorityArn = try reader["CertificateAuthorityArn"].readIfPresent() + value.type = try reader["Type"].readIfPresent() + value.mobileDeviceManagement = try reader["MobileDeviceManagement"].readIfPresent(with: PcaConnectorScepClientTypes.MobileDeviceManagement.read(from:)) + value.openIdConfiguration = try reader["OpenIdConfiguration"].readIfPresent(with: PcaConnectorScepClientTypes.OpenIdConfiguration.read(from:)) + value.status = try reader["Status"].readIfPresent() + value.statusReason = try reader["StatusReason"].readIfPresent() + value.endpoint = try reader["Endpoint"].readIfPresent() + value.createdAt = try reader["CreatedAt"].readTimestampIfPresent(format: .epochSeconds) + value.updatedAt = try reader["UpdatedAt"].readTimestampIfPresent(format: .epochSeconds) + return value + } +} + +public enum PcaConnectorScepClientTypes {} diff --git a/Sources/Services/AWSPcaConnectorScep/Sources/AWSPcaConnectorScep/PcaConnectorScepClient.swift b/Sources/Services/AWSPcaConnectorScep/Sources/AWSPcaConnectorScep/PcaConnectorScepClient.swift new file mode 100644 index 00000000000..f8faf1c4ea4 --- /dev/null +++ b/Sources/Services/AWSPcaConnectorScep/Sources/AWSPcaConnectorScep/PcaConnectorScepClient.swift @@ -0,0 +1,767 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import class AWSClientRuntime.AWSClientConfigDefaultsProvider +import class AWSClientRuntime.DefaultAWSClientPlugin +import class ClientRuntime.ClientBuilder +import class ClientRuntime.DefaultClientPlugin +import class ClientRuntime.HttpClientConfiguration +import class ClientRuntime.SdkHttpClient +import class Smithy.ContextBuilder +import class SmithyJSON.Writer +import enum AWSClientRuntime.AWSRetryErrorInfoProvider +import enum AWSClientRuntime.AWSRetryMode +import enum ClientRuntime.ClientLogMode +import enum ClientRuntime.DefaultTelemetry +import protocol AWSClientRuntime.AWSDefaultClientConfiguration +import protocol AWSClientRuntime.AWSRegionClientConfiguration +import protocol ClientRuntime.Client +import protocol ClientRuntime.DefaultClientConfiguration +import protocol ClientRuntime.DefaultHttpClientConfiguration +import protocol ClientRuntime.IdempotencyTokenGenerator +import protocol ClientRuntime.TelemetryProvider +import protocol Smithy.LogAgent +import protocol SmithyHTTPAPI.HTTPClient +import protocol SmithyHTTPAuthAPI.AuthSchemeResolver +import protocol SmithyIdentity.AWSCredentialIdentityResolver +import struct AWSClientRuntime.AWSUserAgentMetadata +import struct AWSClientRuntime.EndpointResolverMiddleware +import struct AWSClientRuntime.UserAgentMiddleware +import struct AWSSDKHTTPAuth.SigV4AuthScheme +import struct ClientRuntime.AuthSchemeMiddleware +import struct ClientRuntime.BodyMiddleware +import struct ClientRuntime.ContentLengthMiddleware +import struct ClientRuntime.ContentTypeMiddleware +import struct ClientRuntime.DeserializeMiddleware +import struct ClientRuntime.IdempotencyTokenMiddleware +import struct ClientRuntime.LoggerMiddleware +import struct ClientRuntime.OperationStack +import struct ClientRuntime.QueryItemMiddleware +import struct ClientRuntime.RetryMiddleware +import struct ClientRuntime.SignerMiddleware +import struct ClientRuntime.URLHostMiddleware +import struct ClientRuntime.URLPathMiddleware +import struct SmithyRetries.DefaultRetryStrategy +import struct SmithyRetriesAPI.RetryStrategyOptions +import typealias SmithyHTTPAuthAPI.AuthSchemes + +public class PcaConnectorScepClient: ClientRuntime.Client { + public static let clientName = "PcaConnectorScepClient" + let client: ClientRuntime.SdkHttpClient + let config: PcaConnectorScepClient.PcaConnectorScepClientConfiguration + let serviceName = "Pca Connector Scep" + + public required init(config: PcaConnectorScepClient.PcaConnectorScepClientConfiguration) { + client = ClientRuntime.SdkHttpClient(engine: config.httpClientEngine, config: config.httpClientConfiguration) + self.config = config + } + + public convenience init(region: Swift.String) throws { + let config = try PcaConnectorScepClient.PcaConnectorScepClientConfiguration(region: region) + self.init(config: config) + } + + public convenience required init() async throws { + let config = try await PcaConnectorScepClient.PcaConnectorScepClientConfiguration() + self.init(config: config) + } +} + +extension PcaConnectorScepClient { + public class PcaConnectorScepClientConfiguration: AWSClientRuntime.AWSDefaultClientConfiguration & AWSClientRuntime.AWSRegionClientConfiguration & ClientRuntime.DefaultClientConfiguration & ClientRuntime.DefaultHttpClientConfiguration { + public var useFIPS: Swift.Bool? + + public var useDualStack: Swift.Bool? + + public var appID: Swift.String? + + public var awsCredentialIdentityResolver: any SmithyIdentity.AWSCredentialIdentityResolver + + public var awsRetryMode: AWSClientRuntime.AWSRetryMode + + public var region: Swift.String? + + public var signingRegion: Swift.String? + + public var endpointResolver: EndpointResolver + + public var telemetryProvider: ClientRuntime.TelemetryProvider + + public var retryStrategyOptions: SmithyRetriesAPI.RetryStrategyOptions + + public var clientLogMode: ClientRuntime.ClientLogMode + + public var endpoint: Swift.String? + + public var idempotencyTokenGenerator: ClientRuntime.IdempotencyTokenGenerator + + public var httpClientEngine: SmithyHTTPAPI.HTTPClient + + public var httpClientConfiguration: ClientRuntime.HttpClientConfiguration + + public var authSchemes: SmithyHTTPAuthAPI.AuthSchemes? + + public var authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver + + internal let logger: Smithy.LogAgent + + private init(_ useFIPS: Swift.Bool?, _ useDualStack: Swift.Bool?, _ appID: Swift.String?, _ awsCredentialIdentityResolver: any SmithyIdentity.AWSCredentialIdentityResolver, _ awsRetryMode: AWSClientRuntime.AWSRetryMode, _ region: Swift.String?, _ signingRegion: Swift.String?, _ endpointResolver: EndpointResolver, _ telemetryProvider: ClientRuntime.TelemetryProvider, _ retryStrategyOptions: SmithyRetriesAPI.RetryStrategyOptions, _ clientLogMode: ClientRuntime.ClientLogMode, _ endpoint: Swift.String?, _ idempotencyTokenGenerator: ClientRuntime.IdempotencyTokenGenerator, _ httpClientEngine: SmithyHTTPAPI.HTTPClient, _ httpClientConfiguration: ClientRuntime.HttpClientConfiguration, _ authSchemes: SmithyHTTPAuthAPI.AuthSchemes?, _ authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver) { + self.useFIPS = useFIPS + self.useDualStack = useDualStack + self.appID = appID + self.awsCredentialIdentityResolver = awsCredentialIdentityResolver + self.awsRetryMode = awsRetryMode + self.region = region + self.signingRegion = signingRegion + self.endpointResolver = endpointResolver + self.telemetryProvider = telemetryProvider + self.retryStrategyOptions = retryStrategyOptions + self.clientLogMode = clientLogMode + self.endpoint = endpoint + self.idempotencyTokenGenerator = idempotencyTokenGenerator + self.httpClientEngine = httpClientEngine + self.httpClientConfiguration = httpClientConfiguration + self.authSchemes = authSchemes + self.authSchemeResolver = authSchemeResolver + self.logger = telemetryProvider.loggerProvider.getLogger(name: PcaConnectorScepClient.clientName) + } + + public convenience init(useFIPS: Swift.Bool? = nil, useDualStack: Swift.Bool? = nil, appID: Swift.String? = nil, awsCredentialIdentityResolver: (any SmithyIdentity.AWSCredentialIdentityResolver)? = nil, awsRetryMode: AWSClientRuntime.AWSRetryMode? = nil, region: Swift.String? = nil, signingRegion: Swift.String? = nil, endpointResolver: EndpointResolver? = nil, telemetryProvider: ClientRuntime.TelemetryProvider? = nil, retryStrategyOptions: SmithyRetriesAPI.RetryStrategyOptions? = nil, clientLogMode: ClientRuntime.ClientLogMode? = nil, endpoint: Swift.String? = nil, idempotencyTokenGenerator: ClientRuntime.IdempotencyTokenGenerator? = nil, httpClientEngine: SmithyHTTPAPI.HTTPClient? = nil, httpClientConfiguration: ClientRuntime.HttpClientConfiguration? = nil, authSchemes: SmithyHTTPAuthAPI.AuthSchemes? = nil, authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver? = nil) throws { + self.init(useFIPS, useDualStack, try appID ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.appID(), try awsCredentialIdentityResolver ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.awsCredentialIdentityResolver(awsCredentialIdentityResolver), try awsRetryMode ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.retryMode(), region, signingRegion, try endpointResolver ?? DefaultEndpointResolver(), telemetryProvider ?? ClientRuntime.DefaultTelemetry.provider, try retryStrategyOptions ?? AWSClientConfigDefaultsProvider.retryStrategyOptions(), clientLogMode ?? AWSClientConfigDefaultsProvider.clientLogMode, endpoint, idempotencyTokenGenerator ?? AWSClientConfigDefaultsProvider.idempotencyTokenGenerator, httpClientEngine ?? AWSClientConfigDefaultsProvider.httpClientEngine, httpClientConfiguration ?? AWSClientConfigDefaultsProvider.httpClientConfiguration, authSchemes ?? [AWSSDKHTTPAuth.SigV4AuthScheme()], authSchemeResolver ?? DefaultPcaConnectorScepAuthSchemeResolver()) + } + + public convenience init(useFIPS: Swift.Bool? = nil, useDualStack: Swift.Bool? = nil, appID: Swift.String? = nil, awsCredentialIdentityResolver: (any SmithyIdentity.AWSCredentialIdentityResolver)? = nil, awsRetryMode: AWSClientRuntime.AWSRetryMode? = nil, region: Swift.String? = nil, signingRegion: Swift.String? = nil, endpointResolver: EndpointResolver? = nil, telemetryProvider: ClientRuntime.TelemetryProvider? = nil, retryStrategyOptions: SmithyRetriesAPI.RetryStrategyOptions? = nil, clientLogMode: ClientRuntime.ClientLogMode? = nil, endpoint: Swift.String? = nil, idempotencyTokenGenerator: ClientRuntime.IdempotencyTokenGenerator? = nil, httpClientEngine: SmithyHTTPAPI.HTTPClient? = nil, httpClientConfiguration: ClientRuntime.HttpClientConfiguration? = nil, authSchemes: SmithyHTTPAuthAPI.AuthSchemes? = nil, authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver? = nil) async throws { + self.init(useFIPS, useDualStack, try appID ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.appID(), try awsCredentialIdentityResolver ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.awsCredentialIdentityResolver(awsCredentialIdentityResolver), try awsRetryMode ?? AWSClientRuntime.AWSClientConfigDefaultsProvider.retryMode(), try await AWSClientRuntime.AWSClientConfigDefaultsProvider.region(region), try await AWSClientRuntime.AWSClientConfigDefaultsProvider.region(region), try endpointResolver ?? DefaultEndpointResolver(), telemetryProvider ?? ClientRuntime.DefaultTelemetry.provider, try retryStrategyOptions ?? AWSClientConfigDefaultsProvider.retryStrategyOptions(), clientLogMode ?? AWSClientConfigDefaultsProvider.clientLogMode, endpoint, idempotencyTokenGenerator ?? AWSClientConfigDefaultsProvider.idempotencyTokenGenerator, httpClientEngine ?? AWSClientConfigDefaultsProvider.httpClientEngine, httpClientConfiguration ?? AWSClientConfigDefaultsProvider.httpClientConfiguration, authSchemes ?? [AWSSDKHTTPAuth.SigV4AuthScheme()], authSchemeResolver ?? DefaultPcaConnectorScepAuthSchemeResolver()) + } + + public convenience required init() async throws { + try await self.init(useFIPS: nil, useDualStack: nil, appID: nil, awsCredentialIdentityResolver: nil, awsRetryMode: nil, region: nil, signingRegion: nil, endpointResolver: nil, telemetryProvider: nil, retryStrategyOptions: nil, clientLogMode: nil, endpoint: nil, idempotencyTokenGenerator: nil, httpClientEngine: nil, httpClientConfiguration: nil, authSchemes: nil, authSchemeResolver: nil) + } + + public convenience init(region: String) throws { + self.init(nil, nil, try AWSClientRuntime.AWSClientConfigDefaultsProvider.appID(), try AWSClientConfigDefaultsProvider.awsCredentialIdentityResolver(), try AWSClientRuntime.AWSClientConfigDefaultsProvider.retryMode(), region, region, try DefaultEndpointResolver(), ClientRuntime.DefaultTelemetry.provider, try AWSClientConfigDefaultsProvider.retryStrategyOptions(), AWSClientConfigDefaultsProvider.clientLogMode, nil, AWSClientConfigDefaultsProvider.idempotencyTokenGenerator, AWSClientConfigDefaultsProvider.httpClientEngine, AWSClientConfigDefaultsProvider.httpClientConfiguration, [AWSSDKHTTPAuth.SigV4AuthScheme()], DefaultPcaConnectorScepAuthSchemeResolver()) + } + + public var partitionID: String? { + return "\(PcaConnectorScepClient.clientName) - \(region ?? "")" + } + } + + public static func builder() -> ClientRuntime.ClientBuilder { + return ClientRuntime.ClientBuilder(defaultPlugins: [ + ClientRuntime.DefaultClientPlugin(), + AWSClientRuntime.DefaultAWSClientPlugin(clientName: self.clientName), + DefaultAWSAuthSchemePlugin() + ]) + } +} + +extension PcaConnectorScepClient { + /// Performs the `CreateChallenge` operation on the `PcaConnectorScep` service. + /// + /// For general-purpose connectors. Creates a challenge password for the specified connector. The SCEP protocol uses a challenge password to authenticate a request before issuing a certificate from a certificate authority (CA). Your SCEP clients include the challenge password as part of their certificate request to Connector for SCEP. To retrieve the connector Amazon Resource Names (ARNs) for the connectors in your account, call [ListConnectors](https://docs.aws.amazon.com/C4SCEP_API/pca-connector-scep/latest/APIReference/API_ListConnectors.html). To create additional challenge passwords for the connector, call CreateChallenge again. We recommend frequently rotating your challenge passwords. + /// + /// - Parameter CreateChallengeInput : [no documentation found] + /// + /// - Returns: `CreateChallengeOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You can receive this error if you attempt to perform an operation and you don't have the required permissions. This can be caused by insufficient permissions in policies attached to your Amazon Web Services Identity and Access Management (IAM) principal. It can also happen because of restrictions in place from an Amazon Web Services Organizations service control policy (SCP) that affects your Amazon Web Services account. + /// - `BadRequestException` : The request is malformed or contains an error such as an invalid parameter value or a missing required parameter. + /// - `ConflictException` : This request can't be completed for one of the following reasons because the requested resource was being concurrently modified by another request. + /// - `InternalServerException` : The request processing has failed because of an unknown error, exception or failure with an internal server. + /// - `ResourceNotFoundException` : The operation tried to access a nonexistent resource. The resource might be incorrectly specified, or it might have a status other than ACTIVE. + /// - `ServiceQuotaExceededException` : The request would cause a service quota to be exceeded. + /// - `ThrottlingException` : The limit on the number of requests per second was exceeded. + /// - `ValidationException` : An input validation error occurred. For example, invalid characters in a name tag, or an invalid pagination token. + public func createChallenge(input: CreateChallengeInput) async throws -> CreateChallengeOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createChallenge") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "pca-connector-scep") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "createChallenge") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.IdempotencyTokenMiddleware(keyPath: \.clientToken)) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(CreateChallengeInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: CreateChallengeInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(CreateChallengeOutput.httpOutput(from:), CreateChallengeOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `CreateConnector` operation on the `PcaConnectorScep` service. + /// + /// Creates a SCEP connector. A SCEP connector links Amazon Web Services Private Certificate Authority to your SCEP-compatible devices and mobile device management (MDM) systems. Before you create a connector, you must complete a set of prerequisites, including creation of a private certificate authority (CA) to use with this connector. For more information, see [Connector for SCEP prerequisites](https://docs.aws.amazon.com/privateca/latest/userguide/scep-connector.htmlconnector-for-scep-prerequisites.html). + /// + /// - Parameter CreateConnectorInput : [no documentation found] + /// + /// - Returns: `CreateConnectorOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You can receive this error if you attempt to perform an operation and you don't have the required permissions. This can be caused by insufficient permissions in policies attached to your Amazon Web Services Identity and Access Management (IAM) principal. It can also happen because of restrictions in place from an Amazon Web Services Organizations service control policy (SCP) that affects your Amazon Web Services account. + /// - `ConflictException` : This request can't be completed for one of the following reasons because the requested resource was being concurrently modified by another request. + /// - `InternalServerException` : The request processing has failed because of an unknown error, exception or failure with an internal server. + /// - `ResourceNotFoundException` : The operation tried to access a nonexistent resource. The resource might be incorrectly specified, or it might have a status other than ACTIVE. + /// - `ServiceQuotaExceededException` : The request would cause a service quota to be exceeded. + /// - `ThrottlingException` : The limit on the number of requests per second was exceeded. + /// - `ValidationException` : An input validation error occurred. For example, invalid characters in a name tag, or an invalid pagination token. + public func createConnector(input: CreateConnectorInput) async throws -> CreateConnectorOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createConnector") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "pca-connector-scep") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "createConnector") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.IdempotencyTokenMiddleware(keyPath: \.clientToken)) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(CreateConnectorInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: CreateConnectorInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(CreateConnectorOutput.httpOutput(from:), CreateConnectorOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `DeleteChallenge` operation on the `PcaConnectorScep` service. + /// + /// Deletes the specified [Challenge](https://docs.aws.amazon.com/C4SCEP_API/pca-connector-scep/latest/APIReference/API_Challenge.html). + /// + /// - Parameter DeleteChallengeInput : [no documentation found] + /// + /// - Returns: `DeleteChallengeOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You can receive this error if you attempt to perform an operation and you don't have the required permissions. This can be caused by insufficient permissions in policies attached to your Amazon Web Services Identity and Access Management (IAM) principal. It can also happen because of restrictions in place from an Amazon Web Services Organizations service control policy (SCP) that affects your Amazon Web Services account. + /// - `ConflictException` : This request can't be completed for one of the following reasons because the requested resource was being concurrently modified by another request. + /// - `InternalServerException` : The request processing has failed because of an unknown error, exception or failure with an internal server. + /// - `ResourceNotFoundException` : The operation tried to access a nonexistent resource. The resource might be incorrectly specified, or it might have a status other than ACTIVE. + /// - `ThrottlingException` : The limit on the number of requests per second was exceeded. + /// - `ValidationException` : An input validation error occurred. For example, invalid characters in a name tag, or an invalid pagination token. + public func deleteChallenge(input: DeleteChallengeInput) async throws -> DeleteChallengeOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteChallenge") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "pca-connector-scep") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteChallenge") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(DeleteChallengeInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(DeleteChallengeOutput.httpOutput(from:), DeleteChallengeOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `DeleteConnector` operation on the `PcaConnectorScep` service. + /// + /// Deletes the specified [Connector](https://docs.aws.amazon.com/C4SCEP_API/pca-connector-scep/latest/APIReference/API_Connector.html). This operation also deletes any challenges associated with the connector. + /// + /// - Parameter DeleteConnectorInput : [no documentation found] + /// + /// - Returns: `DeleteConnectorOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You can receive this error if you attempt to perform an operation and you don't have the required permissions. This can be caused by insufficient permissions in policies attached to your Amazon Web Services Identity and Access Management (IAM) principal. It can also happen because of restrictions in place from an Amazon Web Services Organizations service control policy (SCP) that affects your Amazon Web Services account. + /// - `ConflictException` : This request can't be completed for one of the following reasons because the requested resource was being concurrently modified by another request. + /// - `InternalServerException` : The request processing has failed because of an unknown error, exception or failure with an internal server. + /// - `ResourceNotFoundException` : The operation tried to access a nonexistent resource. The resource might be incorrectly specified, or it might have a status other than ACTIVE. + /// - `ThrottlingException` : The limit on the number of requests per second was exceeded. + /// - `ValidationException` : An input validation error occurred. For example, invalid characters in a name tag, or an invalid pagination token. + public func deleteConnector(input: DeleteConnectorInput) async throws -> DeleteConnectorOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteConnector") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "pca-connector-scep") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteConnector") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(DeleteConnectorInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(DeleteConnectorOutput.httpOutput(from:), DeleteConnectorOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `GetChallengeMetadata` operation on the `PcaConnectorScep` service. + /// + /// Retrieves the metadata for the specified [Challenge](https://docs.aws.amazon.com/C4SCEP_API/pca-connector-scep/latest/APIReference/API_Challenge.html). + /// + /// - Parameter GetChallengeMetadataInput : [no documentation found] + /// + /// - Returns: `GetChallengeMetadataOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You can receive this error if you attempt to perform an operation and you don't have the required permissions. This can be caused by insufficient permissions in policies attached to your Amazon Web Services Identity and Access Management (IAM) principal. It can also happen because of restrictions in place from an Amazon Web Services Organizations service control policy (SCP) that affects your Amazon Web Services account. + /// - `InternalServerException` : The request processing has failed because of an unknown error, exception or failure with an internal server. + /// - `ResourceNotFoundException` : The operation tried to access a nonexistent resource. The resource might be incorrectly specified, or it might have a status other than ACTIVE. + /// - `ThrottlingException` : The limit on the number of requests per second was exceeded. + /// - `ValidationException` : An input validation error occurred. For example, invalid characters in a name tag, or an invalid pagination token. + public func getChallengeMetadata(input: GetChallengeMetadataInput) async throws -> GetChallengeMetadataOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getChallengeMetadata") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "pca-connector-scep") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getChallengeMetadata") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GetChallengeMetadataInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GetChallengeMetadataOutput.httpOutput(from:), GetChallengeMetadataOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `GetChallengePassword` operation on the `PcaConnectorScep` service. + /// + /// Retrieves the challenge password for the specified [Challenge](https://docs.aws.amazon.com/C4SCEP_API/pca-connector-scep/latest/APIReference/API_Challenge.html). + /// + /// - Parameter GetChallengePasswordInput : [no documentation found] + /// + /// - Returns: `GetChallengePasswordOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You can receive this error if you attempt to perform an operation and you don't have the required permissions. This can be caused by insufficient permissions in policies attached to your Amazon Web Services Identity and Access Management (IAM) principal. It can also happen because of restrictions in place from an Amazon Web Services Organizations service control policy (SCP) that affects your Amazon Web Services account. + /// - `InternalServerException` : The request processing has failed because of an unknown error, exception or failure with an internal server. + /// - `ResourceNotFoundException` : The operation tried to access a nonexistent resource. The resource might be incorrectly specified, or it might have a status other than ACTIVE. + /// - `ThrottlingException` : The limit on the number of requests per second was exceeded. + /// - `ValidationException` : An input validation error occurred. For example, invalid characters in a name tag, or an invalid pagination token. + public func getChallengePassword(input: GetChallengePasswordInput) async throws -> GetChallengePasswordOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getChallengePassword") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "pca-connector-scep") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getChallengePassword") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GetChallengePasswordInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GetChallengePasswordOutput.httpOutput(from:), GetChallengePasswordOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `GetConnector` operation on the `PcaConnectorScep` service. + /// + /// Retrieves details about the specified [Connector](https://docs.aws.amazon.com/C4SCEP_API/pca-connector-scep/latest/APIReference/API_Connector.html). Calling this action returns important details about the connector, such as the public SCEP URL where your clients can request certificates. + /// + /// - Parameter GetConnectorInput : [no documentation found] + /// + /// - Returns: `GetConnectorOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You can receive this error if you attempt to perform an operation and you don't have the required permissions. This can be caused by insufficient permissions in policies attached to your Amazon Web Services Identity and Access Management (IAM) principal. It can also happen because of restrictions in place from an Amazon Web Services Organizations service control policy (SCP) that affects your Amazon Web Services account. + /// - `InternalServerException` : The request processing has failed because of an unknown error, exception or failure with an internal server. + /// - `ResourceNotFoundException` : The operation tried to access a nonexistent resource. The resource might be incorrectly specified, or it might have a status other than ACTIVE. + /// - `ThrottlingException` : The limit on the number of requests per second was exceeded. + /// - `ValidationException` : An input validation error occurred. For example, invalid characters in a name tag, or an invalid pagination token. + public func getConnector(input: GetConnectorInput) async throws -> GetConnectorOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getConnector") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "pca-connector-scep") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getConnector") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(GetConnectorInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(GetConnectorOutput.httpOutput(from:), GetConnectorOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `ListChallengeMetadata` operation on the `PcaConnectorScep` service. + /// + /// Retrieves the challenge metadata for the specified ARN. + /// + /// - Parameter ListChallengeMetadataInput : [no documentation found] + /// + /// - Returns: `ListChallengeMetadataOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You can receive this error if you attempt to perform an operation and you don't have the required permissions. This can be caused by insufficient permissions in policies attached to your Amazon Web Services Identity and Access Management (IAM) principal. It can also happen because of restrictions in place from an Amazon Web Services Organizations service control policy (SCP) that affects your Amazon Web Services account. + /// - `InternalServerException` : The request processing has failed because of an unknown error, exception or failure with an internal server. + /// - `ResourceNotFoundException` : The operation tried to access a nonexistent resource. The resource might be incorrectly specified, or it might have a status other than ACTIVE. + /// - `ThrottlingException` : The limit on the number of requests per second was exceeded. + /// - `ValidationException` : An input validation error occurred. For example, invalid characters in a name tag, or an invalid pagination token. + public func listChallengeMetadata(input: ListChallengeMetadataInput) async throws -> ListChallengeMetadataOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listChallengeMetadata") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "pca-connector-scep") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listChallengeMetadata") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListChallengeMetadataInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListChallengeMetadataInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListChallengeMetadataOutput.httpOutput(from:), ListChallengeMetadataOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `ListConnectors` operation on the `PcaConnectorScep` service. + /// + /// Lists the connectors belonging to your Amazon Web Services account. + /// + /// - Parameter ListConnectorsInput : [no documentation found] + /// + /// - Returns: `ListConnectorsOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You can receive this error if you attempt to perform an operation and you don't have the required permissions. This can be caused by insufficient permissions in policies attached to your Amazon Web Services Identity and Access Management (IAM) principal. It can also happen because of restrictions in place from an Amazon Web Services Organizations service control policy (SCP) that affects your Amazon Web Services account. + /// - `InternalServerException` : The request processing has failed because of an unknown error, exception or failure with an internal server. + /// - `ThrottlingException` : The limit on the number of requests per second was exceeded. + /// - `ValidationException` : An input validation error occurred. For example, invalid characters in a name tag, or an invalid pagination token. + public func listConnectors(input: ListConnectorsInput) async throws -> ListConnectorsOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listConnectors") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "pca-connector-scep") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listConnectors") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListConnectorsInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(ListConnectorsInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListConnectorsOutput.httpOutput(from:), ListConnectorsOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `ListTagsForResource` operation on the `PcaConnectorScep` service. + /// + /// Retrieves the tags associated with the specified resource. Tags are key-value pairs that you can use to categorize and manage your resources, for purposes like billing. For example, you might set the tag key to "customer" and the value to the customer name or ID. You can specify one or more tags to add to each Amazon Web Services resource, up to 50 tags for a resource. + /// + /// - Parameter ListTagsForResourceInput : [no documentation found] + /// + /// - Returns: `ListTagsForResourceOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You can receive this error if you attempt to perform an operation and you don't have the required permissions. This can be caused by insufficient permissions in policies attached to your Amazon Web Services Identity and Access Management (IAM) principal. It can also happen because of restrictions in place from an Amazon Web Services Organizations service control policy (SCP) that affects your Amazon Web Services account. + /// - `InternalServerException` : The request processing has failed because of an unknown error, exception or failure with an internal server. + /// - `ResourceNotFoundException` : The operation tried to access a nonexistent resource. The resource might be incorrectly specified, or it might have a status other than ACTIVE. + /// - `ThrottlingException` : The limit on the number of requests per second was exceeded. + /// - `ValidationException` : An input validation error occurred. For example, invalid characters in a name tag, or an invalid pagination token. + public func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listTagsForResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "pca-connector-scep") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listTagsForResource") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(ListTagsForResourceInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(ListTagsForResourceOutput.httpOutput(from:), ListTagsForResourceOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `TagResource` operation on the `PcaConnectorScep` service. + /// + /// Adds one or more tags to your resource. + /// + /// - Parameter TagResourceInput : [no documentation found] + /// + /// - Returns: `TagResourceOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You can receive this error if you attempt to perform an operation and you don't have the required permissions. This can be caused by insufficient permissions in policies attached to your Amazon Web Services Identity and Access Management (IAM) principal. It can also happen because of restrictions in place from an Amazon Web Services Organizations service control policy (SCP) that affects your Amazon Web Services account. + /// - `InternalServerException` : The request processing has failed because of an unknown error, exception or failure with an internal server. + /// - `ResourceNotFoundException` : The operation tried to access a nonexistent resource. The resource might be incorrectly specified, or it might have a status other than ACTIVE. + /// - `ThrottlingException` : The limit on the number of requests per second was exceeded. + /// - `ValidationException` : An input validation error occurred. For example, invalid characters in a name tag, or an invalid pagination token. + public func tagResource(input: TagResourceInput) async throws -> TagResourceOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "tagResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "pca-connector-scep") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "tagResource") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(TagResourceInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: TagResourceInput.write(value:to:))) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(TagResourceOutput.httpOutput(from:), TagResourceOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + + /// Performs the `UntagResource` operation on the `PcaConnectorScep` service. + /// + /// Removes one or more tags from your resource. + /// + /// - Parameter UntagResourceInput : [no documentation found] + /// + /// - Returns: `UntagResourceOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You can receive this error if you attempt to perform an operation and you don't have the required permissions. This can be caused by insufficient permissions in policies attached to your Amazon Web Services Identity and Access Management (IAM) principal. It can also happen because of restrictions in place from an Amazon Web Services Organizations service control policy (SCP) that affects your Amazon Web Services account. + /// - `InternalServerException` : The request processing has failed because of an unknown error, exception or failure with an internal server. + /// - `ResourceNotFoundException` : The operation tried to access a nonexistent resource. The resource might be incorrectly specified, or it might have a status other than ACTIVE. + /// - `ThrottlingException` : The limit on the number of requests per second was exceeded. + /// - `ValidationException` : An input validation error occurred. For example, invalid characters in a name tag, or an invalid pagination token. + public func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "untagResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "pca-connector-scep") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "untagResource") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware(UntagResourceInput.urlPathProvider(_:))) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + operation.buildStep.intercept(position: .before, middleware: AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + operation.buildStep.intercept(position: .before, middleware: ClientRuntime.AuthSchemeMiddleware()) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.QueryItemMiddleware(UntagResourceInput.queryItemProvider(_:))) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.SignerMiddleware()) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware(UntagResourceOutput.httpOutput(from:), UntagResourceOutputError.httpError(from:))) + operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + let result = try await operation.handleMiddleware(context: context, input: input, next: client.getHandler()) + return result + } + +} diff --git a/Sources/Services/AWSPcaConnectorScep/Sources/AWSPcaConnectorScep/Plugins.swift b/Sources/Services/AWSPcaConnectorScep/Sources/AWSPcaConnectorScep/Plugins.swift new file mode 100644 index 00000000000..06d986a32d3 --- /dev/null +++ b/Sources/Services/AWSPcaConnectorScep/Sources/AWSPcaConnectorScep/Plugins.swift @@ -0,0 +1,66 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import class AWSClientRuntime.AWSClientConfigDefaultsProvider +import protocol ClientRuntime.ClientConfiguration +import protocol ClientRuntime.Plugin +import protocol SmithyHTTPAuthAPI.AuthSchemeResolver +import protocol SmithyIdentity.AWSCredentialIdentityResolver +import struct AWSSDKHTTPAuth.SigV4AuthScheme +import typealias SmithyHTTPAuthAPI.AuthSchemes + +public class PcaConnectorScepClientEndpointPlugin: Plugin { + private var endpointResolver: EndpointResolver + + public init(endpointResolver: EndpointResolver) { + self.endpointResolver = endpointResolver + } + + public convenience init() throws { + self.init(endpointResolver: try DefaultEndpointResolver()) + } + + public func configureClient(clientConfiguration: ClientRuntime.ClientConfiguration) throws { + if let config = clientConfiguration as? PcaConnectorScepClient.PcaConnectorScepClientConfiguration { + config.endpointResolver = self.endpointResolver + } + } +} + +public class DefaultAWSAuthSchemePlugin: ClientRuntime.Plugin { + + public init() {} + + public func configureClient(clientConfiguration: ClientRuntime.ClientConfiguration) throws { + if let config = clientConfiguration as? PcaConnectorScepClient.PcaConnectorScepClientConfiguration { + config.authSchemeResolver = DefaultPcaConnectorScepAuthSchemeResolver() + config.authSchemes = [AWSSDKHTTPAuth.SigV4AuthScheme()] + config.awsCredentialIdentityResolver = try AWSClientRuntime.AWSClientConfigDefaultsProvider.awsCredentialIdentityResolver() + } + } +} + +public class PcaConnectorScepClientAuthSchemePlugin: ClientRuntime.Plugin { + private var authSchemes: SmithyHTTPAuthAPI.AuthSchemes? + private var authSchemeResolver: SmithyHTTPAuthAPI.AuthSchemeResolver? + private var awsCredentialIdentityResolver: (any SmithyIdentity.AWSCredentialIdentityResolver)? + + public init(authSchemes: SmithyHTTPAuthAPI.AuthSchemes? = nil, authSchemeResolver: PcaConnectorScepAuthSchemeResolver? = nil, awsCredentialIdentityResolver: (any SmithyIdentity.AWSCredentialIdentityResolver)? = nil) { + self.authSchemeResolver = authSchemeResolver + self.authSchemes = authSchemes + self.awsCredentialIdentityResolver = awsCredentialIdentityResolver + } + + public func configureClient(clientConfiguration: ClientRuntime.ClientConfiguration) throws { + if let config = clientConfiguration as? PcaConnectorScepClient.PcaConnectorScepClientConfiguration { + if (self.authSchemes != nil) { + config.authSchemes = self.authSchemes + } + if (self.authSchemeResolver != nil) { + config.authSchemeResolver = self.authSchemeResolver! + } + if (self.awsCredentialIdentityResolver != nil) { + config.awsCredentialIdentityResolver = self.awsCredentialIdentityResolver! + } + } + } +} diff --git a/Sources/Services/AWSBackupStorage/Tests/AWSBackupStorageTests/EndpointResolverTest.swift b/Sources/Services/AWSPcaConnectorScep/Tests/AWSPcaConnectorScepTests/EndpointResolverTest.swift similarity index 92% rename from Sources/Services/AWSBackupStorage/Tests/AWSBackupStorageTests/EndpointResolverTest.swift rename to Sources/Services/AWSPcaConnectorScep/Tests/AWSPcaConnectorScepTests/EndpointResolverTest.swift index dcfd15fe45b..a88bc4864c2 100644 --- a/Sources/Services/AWSBackupStorage/Tests/AWSBackupStorageTests/EndpointResolverTest.swift +++ b/Sources/Services/AWSPcaConnectorScep/Tests/AWSPcaConnectorScepTests/EndpointResolverTest.swift @@ -1,6 +1,6 @@ // Code generated by smithy-swift-codegen. DO NOT EDIT! -@testable import AWSBackupStorage +@testable import AWSPcaConnectorScep import XCTest import enum ClientRuntime.EndpointError import struct AwsCommonRuntimeKit.CommonRuntimeKit @@ -28,7 +28,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = SmithyHTTPAPI.Headers() - let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://backupstorage-fips.us-east-1.api.aws", headers: headers, properties: properties) + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://pca-connector-scep-fips.us-east-1.api.aws", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -48,7 +48,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = SmithyHTTPAPI.Headers() - let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://backupstorage-fips.us-east-1.amazonaws.com", headers: headers, properties: properties) + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://pca-connector-scep-fips.us-east-1.amazonaws.com", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -68,7 +68,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = SmithyHTTPAPI.Headers() - let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://backupstorage.us-east-1.api.aws", headers: headers, properties: properties) + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://pca-connector-scep.us-east-1.api.aws", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -88,7 +88,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = SmithyHTTPAPI.Headers() - let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://backupstorage.us-east-1.amazonaws.com", headers: headers, properties: properties) + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://pca-connector-scep.us-east-1.amazonaws.com", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -108,7 +108,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = SmithyHTTPAPI.Headers() - let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://backupstorage-fips.cn-north-1.api.amazonwebservices.com.cn", headers: headers, properties: properties) + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://pca-connector-scep-fips.cn-north-1.api.amazonwebservices.com.cn", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -128,7 +128,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = SmithyHTTPAPI.Headers() - let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://backupstorage-fips.cn-north-1.amazonaws.com.cn", headers: headers, properties: properties) + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://pca-connector-scep-fips.cn-north-1.amazonaws.com.cn", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -148,7 +148,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = SmithyHTTPAPI.Headers() - let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://backupstorage.cn-north-1.api.amazonwebservices.com.cn", headers: headers, properties: properties) + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://pca-connector-scep.cn-north-1.api.amazonwebservices.com.cn", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -168,7 +168,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = SmithyHTTPAPI.Headers() - let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://backupstorage.cn-north-1.amazonaws.com.cn", headers: headers, properties: properties) + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://pca-connector-scep.cn-north-1.amazonaws.com.cn", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -188,7 +188,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = SmithyHTTPAPI.Headers() - let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://backupstorage-fips.us-gov-east-1.api.aws", headers: headers, properties: properties) + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://pca-connector-scep-fips.us-gov-east-1.api.aws", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -208,7 +208,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = SmithyHTTPAPI.Headers() - let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://backupstorage-fips.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://pca-connector-scep-fips.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -228,7 +228,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = SmithyHTTPAPI.Headers() - let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://backupstorage.us-gov-east-1.api.aws", headers: headers, properties: properties) + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://pca-connector-scep.us-gov-east-1.api.aws", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -248,7 +248,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = SmithyHTTPAPI.Headers() - let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://backupstorage.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://pca-connector-scep.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -287,7 +287,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = SmithyHTTPAPI.Headers() - let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://backupstorage-fips.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://pca-connector-scep-fips.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -326,7 +326,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = SmithyHTTPAPI.Headers() - let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://backupstorage.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://pca-connector-scep.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -365,7 +365,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = SmithyHTTPAPI.Headers() - let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://backupstorage-fips.us-isob-east-1.sc2s.sgov.gov", headers: headers, properties: properties) + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://pca-connector-scep-fips.us-isob-east-1.sc2s.sgov.gov", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -404,7 +404,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = SmithyHTTPAPI.Headers() - let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://backupstorage.us-isob-east-1.sc2s.sgov.gov", headers: headers, properties: properties) + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://pca-connector-scep.us-isob-east-1.sc2s.sgov.gov", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } diff --git a/Sources/Services/AWSRedshift/Sources/AWSRedshift/Models.swift b/Sources/Services/AWSRedshift/Sources/AWSRedshift/Models.swift index 0f2d4ac2420..64becaa6f6f 100644 --- a/Sources/Services/AWSRedshift/Sources/AWSRedshift/Models.swift +++ b/Sources/Services/AWSRedshift/Sources/AWSRedshift/Models.swift @@ -2792,7 +2792,7 @@ extension RedshiftClientTypes { public var sourceReservedNodeCount: Swift.Int? /// The identifier of the source reserved node. public var sourceReservedNodeId: Swift.String? - /// The source reserved-node type, for example ds2.xlarge. + /// The source reserved-node type, for example ra3.4xlarge. public var sourceReservedNodeType: Swift.String? /// The status of the reserved-node exchange request. Statuses include in-progress and requested. public var status: RedshiftClientTypes.ReservedNodeExchangeStatusType? @@ -2852,15 +2852,15 @@ extension RedshiftClientTypes { extension RedshiftClientTypes { /// Describes the status of a cluster restore action. Returns null if the cluster was not created by restoring a snapshot. public struct RestoreStatus { - /// The number of megabytes per second being transferred from the backup storage. Returns the average rate for a completed backup. This field is only updated when you restore to DC2 and DS2 node types. + /// The number of megabytes per second being transferred from the backup storage. Returns the average rate for a completed backup. This field is only updated when you restore to DC2 node types. public var currentRestoreRateInMegaBytesPerSecond: Swift.Double? - /// The amount of time an in-progress restore has been running, or the amount of time it took a completed restore to finish. This field is only updated when you restore to DC2 and DS2 node types. + /// The amount of time an in-progress restore has been running, or the amount of time it took a completed restore to finish. This field is only updated when you restore to DC2 node types. public var elapsedTimeInSeconds: Swift.Int? - /// The estimate of the time remaining before the restore will complete. Returns 0 for a completed restore. This field is only updated when you restore to DC2 and DS2 node types. + /// The estimate of the time remaining before the restore will complete. Returns 0 for a completed restore. This field is only updated when you restore to DC2 node types. public var estimatedTimeToCompletionInSeconds: Swift.Int? - /// The number of megabytes that have been transferred from snapshot storage. This field is only updated when you restore to DC2 and DS2 node types. + /// The number of megabytes that have been transferred from snapshot storage. This field is only updated when you restore to DC2 node types. public var progressInMegaBytes: Swift.Int? - /// The size of the set of snapshot data used to restore the cluster. This field is only updated when you restore to DC2 and DS2 node types. + /// The size of the set of snapshot data used to restore the cluster. This field is only updated when you restore to DC2 node types. public var snapshotSizeInMegaBytes: Swift.Int? /// The status of the restore action. Returns starting, restoring, completed, or failed. public var status: Swift.String? @@ -4455,7 +4455,7 @@ public struct CreateClusterInput { public var masterUsername: Swift.String? /// If true, Amazon Redshift will deploy the cluster in two Availability Zones (AZ). public var multiAZ: Swift.Bool? - /// The node type to be provisioned for the cluster. For information about node types, go to [ Working with Clusters](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#how-many-nodes) in the Amazon Redshift Cluster Management Guide. Valid Values: ds2.xlarge | ds2.8xlarge | dc1.large | dc1.8xlarge | dc2.large | dc2.8xlarge | ra3.xlplus | ra3.4xlarge | ra3.16xlarge + /// The node type to be provisioned for the cluster. For information about node types, go to [ Working with Clusters](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#how-many-nodes) in the Amazon Redshift Cluster Management Guide. Valid Values: dc2.large | dc2.8xlarge | ra3.xlplus | ra3.4xlarge | ra3.16xlarge /// This member is required. public var nodeType: Swift.String? /// The number of compute nodes in the cluster. This parameter is required when the ClusterType parameter is specified as multi-node. For information about determining how many nodes you need, go to [ Working with Clusters](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#how-many-nodes) in the Amazon Redshift Cluster Management Guide. If you don't specify this parameter, you get a single-node cluster. When requesting a multi-node cluster, you must specify the number of nodes that you want in the cluster. Default: 1 Constraints: Value must be at least 1 and no more than 100. @@ -4464,7 +4464,7 @@ public struct CreateClusterInput { /// /// * For clusters with ra3 nodes - Select a port within the ranges 5431-5455 or 8191-8215. (If you have an existing cluster with ra3 nodes, it isn't required that you change the port to these ranges.) /// - /// * For clusters with ds2 or dc2 nodes - Select a port within the range 1150-65535. + /// * For clusters with dc2 nodes - Select a port within the range 1150-65535. public var port: Swift.Int? /// The weekly time range (in UTC) during which automated cluster maintenance can occur. Format: ddd:hh24:mi-ddd:hh24:mi Default: A 30-minute window selected at random from an 8-hour block of time per region, occurring on a random day of the week. For more information about the time blocks for each region, see [Maintenance Windows](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-maintenance-windows) in Amazon Redshift Cluster Management Guide. Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun Constraints: Minimum 30-minute window. public var preferredMaintenanceWindow: Swift.String? @@ -6124,7 +6124,7 @@ public struct CreateScheduledActionOutput { public var startTime: Foundation.Date? /// The state of the scheduled action. For example, DISABLED. public var state: RedshiftClientTypes.ScheduledActionState? - /// A JSON format string of the Amazon Redshift API operation with input parameters. "{\"ResizeCluster\":{\"NodeType\":\"ds2.8xlarge\",\"ClusterIdentifier\":\"my-test-cluster\",\"NumberOfNodes\":3}}". + /// A JSON format string of the Amazon Redshift API operation with input parameters. "{\"ResizeCluster\":{\"NodeType\":\"ra3.4xlarge\",\"ClusterIdentifier\":\"my-test-cluster\",\"NumberOfNodes\":3}}". public var targetAction: RedshiftClientTypes.ScheduledActionType? public init( @@ -9430,7 +9430,7 @@ extension RedshiftClientTypes { public var estimatedDiskUtilizationPercent: Swift.Double? /// The category of the node configuration recommendation. public var mode: RedshiftClientTypes.Mode? - /// The node type, such as, "ds2.8xlarge". + /// The node type, such as, "ra3.4xlarge". public var nodeType: Swift.String? /// The number of nodes. public var numberOfNodes: Swift.Int? @@ -10099,7 +10099,7 @@ extension RedshiftClientTypes { public var startTime: Foundation.Date? /// The state of the scheduled action. For example, DISABLED. public var state: RedshiftClientTypes.ScheduledActionState? - /// A JSON format string of the Amazon Redshift API operation with input parameters. "{\"ResizeCluster\":{\"NodeType\":\"ds2.8xlarge\",\"ClusterIdentifier\":\"my-test-cluster\",\"NumberOfNodes\":3}}". + /// A JSON format string of the Amazon Redshift API operation with input parameters. "{\"ResizeCluster\":{\"NodeType\":\"ra3.4xlarge\",\"ClusterIdentifier\":\"my-test-cluster\",\"NumberOfNodes\":3}}". public var targetAction: RedshiftClientTypes.ScheduledActionType? public init( @@ -11991,7 +11991,7 @@ public struct ModifyClusterInput { /// /// Example: examplecluster public var newClusterIdentifier: Swift.String? - /// The new node type of the cluster. If you specify a new node type, you must also specify the number of nodes parameter. For more information about resizing clusters, go to [Resizing Clusters in Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/rs-resize-tutorial.html) in the Amazon Redshift Cluster Management Guide. Valid Values: ds2.xlarge | ds2.8xlarge | dc1.large | dc1.8xlarge | dc2.large | dc2.8xlarge | ra3.xlplus | ra3.4xlarge | ra3.16xlarge + /// The new node type of the cluster. If you specify a new node type, you must also specify the number of nodes parameter. For more information about resizing clusters, go to [Resizing Clusters in Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/rs-resize-tutorial.html) in the Amazon Redshift Cluster Management Guide. Valid Values: dc2.large | dc2.8xlarge | ra3.xlplus | ra3.4xlarge | ra3.16xlarge public var nodeType: Swift.String? /// The new number of nodes of the cluster. If you specify a new number of nodes, you must also specify the node type parameter. For more information about resizing clusters, go to [Resizing Clusters in Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/rs-resize-tutorial.html) in the Amazon Redshift Cluster Management Guide. Valid Values: Integer greater than 0. public var numberOfNodes: Swift.Int? @@ -11999,7 +11999,7 @@ public struct ModifyClusterInput { /// /// * For clusters with ra3 nodes - Select a port within the ranges 5431-5455 or 8191-8215. (If you have an existing cluster with ra3 nodes, it isn't required that you change the port to these ranges.) /// - /// * For clusters with ds2 or dc2 nodes - Select a port within the range 1150-65535. + /// * For clusters with dc2 nodes - Select a port within the range 1150-65535. public var port: Swift.Int? /// The weekly time range (in UTC) during which system maintenance can occur, if necessary. If system maintenance is necessary during the window, it may result in an outage. This maintenance window change is made immediately. If the new maintenance window indicates the current time, there must be at least 120 minutes between the current time and end of the window in order to ensure that pending changes are applied. Default: Uses existing setting. Format: ddd:hh24:mi-ddd:hh24:mi, for example wed:07:30-wed:08:00. Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun Constraints: Must be at least 30 minutes. public var preferredMaintenanceWindow: Swift.String? @@ -12618,7 +12618,7 @@ public struct ModifyScheduledActionOutput { public var startTime: Foundation.Date? /// The state of the scheduled action. For example, DISABLED. public var state: RedshiftClientTypes.ScheduledActionState? - /// A JSON format string of the Amazon Redshift API operation with input parameters. "{\"ResizeCluster\":{\"NodeType\":\"ds2.8xlarge\",\"ClusterIdentifier\":\"my-test-cluster\",\"NumberOfNodes\":3}}". + /// A JSON format string of the Amazon Redshift API operation with input parameters. "{\"ResizeCluster\":{\"NodeType\":\"ra3.4xlarge\",\"ClusterIdentifier\":\"my-test-cluster\",\"NumberOfNodes\":3}}". public var targetAction: RedshiftClientTypes.ScheduledActionType? public init( @@ -13184,13 +13184,13 @@ public struct RestoreFromClusterSnapshotInput { public var masterPasswordSecretKmsKeyId: Swift.String? /// If true, the snapshot will be restored to a cluster deployed in two Availability Zones. public var multiAZ: Swift.Bool? - /// The node type that the restored cluster will be provisioned with. Default: The node type of the cluster from which the snapshot was taken. You can modify this if you are using any DS node type. In that case, you can choose to restore into another DS node type of the same size. For example, you can restore ds1.8xlarge into ds2.8xlarge, or ds1.xlarge into ds2.xlarge. If you have a DC instance type, you must restore into that same instance type and size. In other words, you can only restore a dc1.large instance type into another dc1.large instance type or dc2.large instance type. You can't restore dc1.8xlarge to dc2.8xlarge. First restore to a dc1.8xlarge cluster, then resize to a dc2.8large cluster. For more information about node types, see [ About Clusters and Nodes](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-about-clusters-and-nodes) in the Amazon Redshift Cluster Management Guide. + /// The node type that the restored cluster will be provisioned with. If you have a DC instance type, you must restore into that same instance type and size. In other words, you can only restore a dc2.large node type into another dc2 type. For more information about node types, see [ About Clusters and Nodes](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-about-clusters-and-nodes) in the Amazon Redshift Cluster Management Guide. public var nodeType: Swift.String? /// The number of nodes specified when provisioning the restored cluster. public var numberOfNodes: Swift.Int? /// The Amazon Web Services account used to create or copy the snapshot. Required if you are restoring a snapshot you do not own, optional if you own the snapshot. public var ownerAccount: Swift.String? - /// The port number on which the cluster accepts connections. Default: The same port as the original cluster. Valid values: For clusters with ds2 or dc2 nodes, must be within the range 1150-65535. For clusters with ra3 nodes, must be within the ranges 5431-5455 or 8191-8215. + /// The port number on which the cluster accepts connections. Default: The same port as the original cluster. Valid values: For clusters with DC2 nodes, must be within the range 1150-65535. For clusters with ra3 nodes, must be within the ranges 5431-5455 or 8191-8215. public var port: Swift.Int? /// The weekly time range (in UTC) during which automated cluster maintenance can occur. Format: ddd:hh24:mi-ddd:hh24:mi Default: The value selected for the cluster from which the snapshot was taken. For more information about the time blocks for each region, see [Maintenance Windows](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-maintenance-windows) in Amazon Redshift Cluster Management Guide. Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun Constraints: Minimum 30-minute window. public var preferredMaintenanceWindow: Swift.String? diff --git a/Sources/Services/AWSRedshift/Sources/AWSRedshift/RedshiftClient.swift b/Sources/Services/AWSRedshift/Sources/AWSRedshift/RedshiftClient.swift index 9a57f7319ac..c1c1fabc08a 100644 --- a/Sources/Services/AWSRedshift/Sources/AWSRedshift/RedshiftClient.swift +++ b/Sources/Services/AWSRedshift/Sources/AWSRedshift/RedshiftClient.swift @@ -6424,18 +6424,10 @@ extension RedshiftClient { /// /// * You can only resize clusters of the following types: /// - /// * dc1.large (if your cluster is in a VPC) - /// - /// * dc1.8xlarge (if your cluster is in a VPC) - /// /// * dc2.large /// /// * dc2.8xlarge /// - /// * ds2.xlarge - /// - /// * ds2.8xlarge - /// /// * ra3.xlplus /// /// * ra3.4xlarge diff --git a/Sources/Services/AWSS3/Sources/AWSS3/AuthSchemeResolver.swift b/Sources/Services/AWSS3/Sources/AWSS3/AuthSchemeResolver.swift index 1f03122e932..c1eb673c61d 100644 --- a/Sources/Services/AWSS3/Sources/AWSS3/AuthSchemeResolver.swift +++ b/Sources/Services/AWSS3/Sources/AWSS3/AuthSchemeResolver.swift @@ -15,6 +15,8 @@ public struct S3AuthSchemeResolverParameters: SmithyHTTPAuthAPI.AuthSchemeResolv public let accelerate: Swift.Bool /// The S3 bucket used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 bucket. public let bucket: Swift.String? + /// The Copy Source used for Copy Object request. This is an optional parameter that will be set automatically for operations that are scoped to Copy Source. + public let copySource: Swift.String? /// Internal parameter to disable Access Point Buckets public let disableAccessPoints: Swift.Bool? /// Whether multi-region access points (MRAP) should be disabled. @@ -123,6 +125,6 @@ public struct DefaultS3AuthSchemeResolver: S3AuthSchemeResolver { guard let endpointParam = context.attributes.get(key: Smithy.AttributeKey(name: "EndpointParams")) else { throw Smithy.ClientError.dataNotFound("Endpoint param not configured in middleware context for rules-based auth scheme resolver params construction.") } - return S3AuthSchemeResolverParameters(operation: opName, accelerate: endpointParam.accelerate, bucket: endpointParam.bucket, disableAccessPoints: endpointParam.disableAccessPoints, disableMultiRegionAccessPoints: endpointParam.disableMultiRegionAccessPoints, disableS3ExpressSessionAuth: endpointParam.disableS3ExpressSessionAuth, endpoint: endpointParam.endpoint, forcePathStyle: endpointParam.forcePathStyle, key: endpointParam.key, prefix: endpointParam.prefix, region: endpointParam.region, useArnRegion: endpointParam.useArnRegion, useDualStack: endpointParam.useDualStack, useFIPS: endpointParam.useFIPS, useGlobalEndpoint: endpointParam.useGlobalEndpoint, useObjectLambdaEndpoint: endpointParam.useObjectLambdaEndpoint, useS3ExpressControlEndpoint: endpointParam.useS3ExpressControlEndpoint) + return S3AuthSchemeResolverParameters(operation: opName, accelerate: endpointParam.accelerate, bucket: endpointParam.bucket, copySource: endpointParam.copySource, disableAccessPoints: endpointParam.disableAccessPoints, disableMultiRegionAccessPoints: endpointParam.disableMultiRegionAccessPoints, disableS3ExpressSessionAuth: endpointParam.disableS3ExpressSessionAuth, endpoint: endpointParam.endpoint, forcePathStyle: endpointParam.forcePathStyle, key: endpointParam.key, prefix: endpointParam.prefix, region: endpointParam.region, useArnRegion: endpointParam.useArnRegion, useDualStack: endpointParam.useDualStack, useFIPS: endpointParam.useFIPS, useGlobalEndpoint: endpointParam.useGlobalEndpoint, useObjectLambdaEndpoint: endpointParam.useObjectLambdaEndpoint, useS3ExpressControlEndpoint: endpointParam.useS3ExpressControlEndpoint) } } diff --git a/Sources/Services/AWSS3/Sources/AWSS3/Endpoints.swift b/Sources/Services/AWSS3/Sources/AWSS3/Endpoints.swift index c657b23293e..88931426d9d 100644 --- a/Sources/Services/AWSS3/Sources/AWSS3/Endpoints.swift +++ b/Sources/Services/AWSS3/Sources/AWSS3/Endpoints.swift @@ -11,6 +11,8 @@ public struct EndpointParams { public let accelerate: Swift.Bool /// The S3 bucket used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 bucket. public let bucket: Swift.String? + /// The Copy Source used for Copy Object request. This is an optional parameter that will be set automatically for operations that are scoped to Copy Source. + public let copySource: Swift.String? /// Internal parameter to disable Access Point Buckets public let disableAccessPoints: Swift.Bool? /// Whether multi-region access points (MRAP) should be disabled. @@ -43,6 +45,7 @@ public struct EndpointParams { public init( accelerate: Swift.Bool = false, bucket: Swift.String? = nil, + copySource: Swift.String? = nil, disableAccessPoints: Swift.Bool? = nil, disableMultiRegionAccessPoints: Swift.Bool = false, disableS3ExpressSessionAuth: Swift.Bool? = nil, @@ -61,6 +64,7 @@ public struct EndpointParams { { self.accelerate = accelerate self.bucket = bucket + self.copySource = copySource self.disableAccessPoints = disableAccessPoints self.disableMultiRegionAccessPoints = disableMultiRegionAccessPoints self.disableS3ExpressSessionAuth = disableS3ExpressSessionAuth @@ -79,6 +83,7 @@ public struct EndpointParams { public init (authSchemeParams: S3AuthSchemeResolverParameters) { self.accelerate = authSchemeParams.accelerate self.bucket = authSchemeParams.bucket + self.copySource = authSchemeParams.copySource self.disableAccessPoints = authSchemeParams.disableAccessPoints self.disableMultiRegionAccessPoints = authSchemeParams.disableMultiRegionAccessPoints self.disableS3ExpressSessionAuth = authSchemeParams.disableS3ExpressSessionAuth @@ -103,6 +108,7 @@ extension EndpointParams: ClientRuntime.EndpointsRequestContextProviding { let context = try ClientRuntime.EndpointsRequestContext() try context.add(name: "Accelerate", value: self.accelerate) try context.add(name: "Bucket", value: self.bucket) + try context.add(name: "CopySource", value: self.copySource) try context.add(name: "DisableAccessPoints", value: self.disableAccessPoints) try context.add(name: "DisableMultiRegionAccessPoints", value: self.disableMultiRegionAccessPoints) try context.add(name: "DisableS3ExpressSessionAuth", value: self.disableS3ExpressSessionAuth) @@ -129,7 +135,7 @@ public protocol EndpointResolver { typealias DefaultEndpointResolver = ClientRuntime.DefaultEndpointResolver extension DefaultEndpointResolver { - private static let ruleSet = "{\"version\":\"1.0\",\"parameters\":{\"Bucket\":{\"required\":false,\"documentation\":\"The S3 bucket used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 bucket.\",\"type\":\"String\"},\"Region\":{\"builtIn\":\"AWS::Region\",\"required\":false,\"documentation\":\"The AWS region used to dispatch the request.\",\"type\":\"String\"},\"UseFIPS\":{\"builtIn\":\"AWS::UseFIPS\",\"required\":true,\"default\":false,\"documentation\":\"When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.\",\"type\":\"Boolean\"},\"UseDualStack\":{\"builtIn\":\"AWS::UseDualStack\",\"required\":true,\"default\":false,\"documentation\":\"When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.\",\"type\":\"Boolean\"},\"Endpoint\":{\"builtIn\":\"SDK::Endpoint\",\"required\":false,\"documentation\":\"Override the endpoint used to send this request\",\"type\":\"String\"},\"ForcePathStyle\":{\"builtIn\":\"AWS::S3::ForcePathStyle\",\"required\":true,\"default\":false,\"documentation\":\"When true, force a path-style endpoint to be used where the bucket name is part of the path.\",\"type\":\"Boolean\"},\"Accelerate\":{\"builtIn\":\"AWS::S3::Accelerate\",\"required\":true,\"default\":false,\"documentation\":\"When true, use S3 Accelerate. NOTE: Not all regions support S3 accelerate.\",\"type\":\"Boolean\"},\"UseGlobalEndpoint\":{\"builtIn\":\"AWS::S3::UseGlobalEndpoint\",\"required\":true,\"default\":false,\"documentation\":\"Whether the global endpoint should be used, rather then the regional endpoint for us-east-1.\",\"type\":\"Boolean\"},\"UseObjectLambdaEndpoint\":{\"required\":false,\"documentation\":\"Internal parameter to use object lambda endpoint for an operation (eg: WriteGetObjectResponse)\",\"type\":\"Boolean\"},\"Key\":{\"required\":false,\"documentation\":\"The S3 Key used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 Key.\",\"type\":\"String\"},\"Prefix\":{\"required\":false,\"documentation\":\"The S3 Prefix used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 Prefix.\",\"type\":\"String\"},\"DisableAccessPoints\":{\"required\":false,\"documentation\":\"Internal parameter to disable Access Point Buckets\",\"type\":\"Boolean\"},\"DisableMultiRegionAccessPoints\":{\"builtIn\":\"AWS::S3::DisableMultiRegionAccessPoints\",\"required\":true,\"default\":false,\"documentation\":\"Whether multi-region access points (MRAP) should be disabled.\",\"type\":\"Boolean\"},\"UseArnRegion\":{\"builtIn\":\"AWS::S3::UseArnRegion\",\"required\":false,\"documentation\":\"When an Access Point ARN is provided and this flag is enabled, the SDK MUST use the ARN's region when constructing the endpoint instead of the client's configured region.\",\"type\":\"Boolean\"},\"UseS3ExpressControlEndpoint\":{\"required\":false,\"documentation\":\"Internal parameter to indicate whether S3Express operation should use control plane, (ex. CreateBucket)\",\"type\":\"Boolean\"},\"DisableS3ExpressSessionAuth\":{\"required\":false,\"documentation\":\"Parameter to indicate whether S3Express session auth should be disabled\",\"type\":\"Boolean\"}},\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Accelerate cannot be used with FIPS\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}],\"error\":\"Cannot set dual-stack in combination with a custom endpoint.\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"A custom endpoint cannot be combined with FIPS\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"A custom endpoint cannot be combined with S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},0,6,true],\"assign\":\"bucketSuffix\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"bucketSuffix\"},\"--x-s3\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3Express does not support Dual-stack.\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3Express does not support S3 Accelerate.\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"DisableS3ExpressSessionAuth\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"DisableS3ExpressSessionAuth\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"isIp\"]},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"uriEncode\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"uri_encoded_bucket\"}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"aws.isVirtualHostableS3Bucket\",\"argv\":[{\"ref\":\"Bucket\"},false]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"S3Express bucket name is not a valid virtual hostable name.\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"isIp\"]},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"uriEncode\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"uri_encoded_bucket\"}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4-s3express\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"aws.isVirtualHostableS3Bucket\",\"argv\":[{\"ref\":\"Bucket\"},false]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4-s3express\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"S3Express bucket name is not a valid virtual hostable name.\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"UseS3ExpressControlEndpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseS3ExpressControlEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"uriEncode\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"uri_encoded_bucket\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://s3express-control-fips.{Region}.amazonaws.com/{uri_encoded_bucket}\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3express-control.{Region}.amazonaws.com/{uri_encoded_bucket}\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"aws.isVirtualHostableS3Bucket\",\"argv\":[{\"ref\":\"Bucket\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"DisableS3ExpressSessionAuth\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"DisableS3ExpressSessionAuth\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},6,14,true],\"assign\":\"s3expressAvailabilityZoneId\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},14,16,true],\"assign\":\"s3expressAvailabilityZoneDelim\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"s3expressAvailabilityZoneDelim\"},\"--\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},6,15,true],\"assign\":\"s3expressAvailabilityZoneId\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},15,17,true],\"assign\":\"s3expressAvailabilityZoneDelim\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"s3expressAvailabilityZoneDelim\"},\"--\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Unrecognized S3Express bucket name format.\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},6,14,true],\"assign\":\"s3expressAvailabilityZoneId\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},14,16,true],\"assign\":\"s3expressAvailabilityZoneDelim\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"s3expressAvailabilityZoneDelim\"},\"--\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4-s3express\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4-s3express\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},6,15,true],\"assign\":\"s3expressAvailabilityZoneId\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},15,17,true],\"assign\":\"s3expressAvailabilityZoneDelim\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"s3expressAvailabilityZoneDelim\"},\"--\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4-s3express\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4-s3express\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Unrecognized S3Express bucket name format.\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"S3Express bucket name is not a valid virtual hostable name.\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]}]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"UseS3ExpressControlEndpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseS3ExpressControlEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://s3express-control-fips.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3express-control.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},49,50,true],\"assign\":\"hardwareType\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},8,12,true],\"assign\":\"regionPrefix\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},0,7,true],\"assign\":\"bucketAliasSuffix\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},32,49,true],\"assign\":\"outpostId\"},{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"regionPartition\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"bucketAliasSuffix\"},\"--op-s3\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"outpostId\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"hardwareType\"},\"e\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"regionPrefix\"},\"beta\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]}],\"error\":\"Expected a endpoint to be specified but no endpoint was found\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"https://{Bucket}.ec2.{url#authority}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4a\",\"signingName\":\"s3-outposts\",\"signingRegionSet\":[\"*\"]},{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.ec2.s3-outposts.{Region}.{regionPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4a\",\"signingName\":\"s3-outposts\",\"signingRegionSet\":[\"*\"]},{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"hardwareType\"},\"o\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"regionPrefix\"},\"beta\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]}],\"error\":\"Expected a endpoint to be specified but no endpoint was found\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"https://{Bucket}.op-{outpostId}.{url#authority}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4a\",\"signingName\":\"s3-outposts\",\"signingRegionSet\":[\"*\"]},{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.op-{outpostId}.s3-outposts.{Region}.{regionPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4a\",\"signingName\":\"s3-outposts\",\"signingRegionSet\":[\"*\"]},{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Unrecognized hardware type: \\\"Expected hardware type o or e but got {hardwareType}\\\"\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`.\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}]}]}]}],\"error\":\"Custom endpoint `{Endpoint}` was not a valid URI\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"ForcePathStyle\"},false]},{\"fn\":\"aws.isVirtualHostableS3Bucket\",\"argv\":[{\"ref\":\"Bucket\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]},\"aws-cn\"]}],\"error\":\"S3 Accelerate cannot be used in this region\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.dualstack.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.dualstack.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.dualstack.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3.dualstack.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"isIp\"]},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"isIp\"]},false]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"isIp\"]},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"isIp\"]},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"isIp\"]},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"isIp\"]},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"scheme\"]},\"http\"]},{\"fn\":\"aws.isVirtualHostableS3Bucket\",\"argv\":[{\"ref\":\"Bucket\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"ForcePathStyle\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},false]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"ForcePathStyle\"},false]},{\"fn\":\"aws.parseArn\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"bucketArn\"}],\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[0]\"],\"assign\":\"arnType\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"\"]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"service\"]},\"s3-object-lambda\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"accesspoint\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[1]\"],\"assign\":\"accessPointName\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"accessPointName\"},\"\"]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 Object Lambda does not support Dual-stack\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 Object Lambda does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"\"]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"DisableAccessPoints\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"DisableAccessPoints\"},true]}],\"error\":\"Access points are not supported for this operation\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"]}]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"UseArnRegion\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseArnRegion\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"{Region}\"]}]}],\"error\":\"Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"bucketPartition\"}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},\"\"]}],\"error\":\"Invalid ARN: Missing account id\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"accessPointName\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"{url#scheme}://{accessPointName}-{bucketArn#accountId}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-object-lambda\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-object-lambda\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-object-lambda\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName}`\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: bucket ARN is missing a region\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: Expected a resource of the format `accesspoint:` but no name was provided\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: Object Lambda ARNs only support `accesspoint` arn types, but found: `{arnType}`\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"accesspoint\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[1]\"],\"assign\":\"accessPointName\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"accessPointName\"},\"\"]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"\"]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"accesspoint\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"\"]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"DisableAccessPoints\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"DisableAccessPoints\"},true]}],\"error\":\"Access points are not supported for this operation\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"]}]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"UseArnRegion\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseArnRegion\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"{Region}\"]}]}],\"error\":\"Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"bucketPartition\"}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},\"{partitionResult#name}\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"service\"]},\"s3\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"accessPointName\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"Access Points do not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"{url#scheme}://{accessPointName}-{bucketArn#accountId}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName}`\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The ARN was not for the S3 service, found: {bucketArn#service}\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"accessPointName\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 MRAP does not support dual-stack\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"S3 MRAP does not support FIPS\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 MRAP does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"DisableMultiRegionAccessPoints\"},true]}],\"error\":\"Invalid configuration: Multi-Region Access Point ARNs are disabled.\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"mrapPartition\"}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"mrapPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"partition\"]}]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{accessPointName}.accesspoint.s3-global.{mrapPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4a\",\"signingName\":\"s3\",\"signingRegionSet\":[\"*\"]}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Client was configured for partition `{mrapPartition#name}` but bucket referred to partition `{bucketArn#partition}`\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid Access Point Name\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: Expected a resource of the format `accesspoint:` but no name was provided\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"service\"]},\"s3-outposts\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 Outposts does not support Dual-stack\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"S3 Outposts does not support FIPS\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 Outposts does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[4]\"]}]}],\"error\":\"Invalid Arn: Outpost Access Point ARN contains sub resources\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[1]\"],\"assign\":\"outpostId\"}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"outpostId\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"UseArnRegion\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseArnRegion\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"{Region}\"]}]}],\"error\":\"Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"bucketPartition\"}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"],\"assign\":\"outpostType\"}],\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[3]\"],\"assign\":\"accessPointName\"}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"outpostType\"},\"accesspoint\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.{outpostId}.{url#authority}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4a\",\"signingName\":\"s3-outposts\",\"signingRegionSet\":[\"*\"]},{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.{outpostId}.s3-outposts.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4a\",\"signingName\":\"s3-outposts\",\"signingRegionSet\":[\"*\"]},{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Expected an outpost type `accesspoint`, found {outpostType}\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: expected an access point name\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: Expected a 4-component resource\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The outpost Id may only contain a-z, A-Z, 0-9 and `-`. Found: `{outpostId}`\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The Outpost Id was not set\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: Unrecognized format: {Bucket} (type: {arnType})\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: No ARN type specified\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},0,4,false],\"assign\":\"arnPrefix\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnPrefix\"},\"arn:\"]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"aws.parseArn\",\"argv\":[{\"ref\":\"Bucket\"}]}]}]}],\"error\":\"Invalid ARN: `{Bucket}` was not a valid ARN\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"ForcePathStyle\"},true]},{\"fn\":\"aws.parseArn\",\"argv\":[{\"ref\":\"Bucket\"}]}],\"error\":\"Path-style addressing cannot be used with ARN buckets\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"uriEncode\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"uri_encoded_bucket\"}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3-fips.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Path-style addressing cannot be used with S3 Accelerate\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"UseObjectLambdaEndpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseObjectLambdaEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 Object Lambda does not support Dual-stack\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 Object Lambda does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-object-lambda\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://s3-object-lambda-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-object-lambda\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-object-lambda.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-object-lambda\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3-fips.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://s3-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"https://s3.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://s3.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"A region must be set when sending requests to S3.\",\"type\":\"error\"}]}" + private static let ruleSet = "{\"version\":\"1.0\",\"parameters\":{\"Bucket\":{\"required\":false,\"documentation\":\"The S3 bucket used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 bucket.\",\"type\":\"String\"},\"Region\":{\"builtIn\":\"AWS::Region\",\"required\":false,\"documentation\":\"The AWS region used to dispatch the request.\",\"type\":\"String\"},\"UseFIPS\":{\"builtIn\":\"AWS::UseFIPS\",\"required\":true,\"default\":false,\"documentation\":\"When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.\",\"type\":\"Boolean\"},\"UseDualStack\":{\"builtIn\":\"AWS::UseDualStack\",\"required\":true,\"default\":false,\"documentation\":\"When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.\",\"type\":\"Boolean\"},\"Endpoint\":{\"builtIn\":\"SDK::Endpoint\",\"required\":false,\"documentation\":\"Override the endpoint used to send this request\",\"type\":\"String\"},\"ForcePathStyle\":{\"builtIn\":\"AWS::S3::ForcePathStyle\",\"required\":true,\"default\":false,\"documentation\":\"When true, force a path-style endpoint to be used where the bucket name is part of the path.\",\"type\":\"Boolean\"},\"Accelerate\":{\"builtIn\":\"AWS::S3::Accelerate\",\"required\":true,\"default\":false,\"documentation\":\"When true, use S3 Accelerate. NOTE: Not all regions support S3 accelerate.\",\"type\":\"Boolean\"},\"UseGlobalEndpoint\":{\"builtIn\":\"AWS::S3::UseGlobalEndpoint\",\"required\":true,\"default\":false,\"documentation\":\"Whether the global endpoint should be used, rather then the regional endpoint for us-east-1.\",\"type\":\"Boolean\"},\"UseObjectLambdaEndpoint\":{\"required\":false,\"documentation\":\"Internal parameter to use object lambda endpoint for an operation (eg: WriteGetObjectResponse)\",\"type\":\"Boolean\"},\"Key\":{\"required\":false,\"documentation\":\"The S3 Key used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 Key.\",\"type\":\"String\"},\"Prefix\":{\"required\":false,\"documentation\":\"The S3 Prefix used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 Prefix.\",\"type\":\"String\"},\"CopySource\":{\"required\":false,\"documentation\":\"The Copy Source used for Copy Object request. This is an optional parameter that will be set automatically for operations that are scoped to Copy Source.\",\"type\":\"String\"},\"DisableAccessPoints\":{\"required\":false,\"documentation\":\"Internal parameter to disable Access Point Buckets\",\"type\":\"Boolean\"},\"DisableMultiRegionAccessPoints\":{\"builtIn\":\"AWS::S3::DisableMultiRegionAccessPoints\",\"required\":true,\"default\":false,\"documentation\":\"Whether multi-region access points (MRAP) should be disabled.\",\"type\":\"Boolean\"},\"UseArnRegion\":{\"builtIn\":\"AWS::S3::UseArnRegion\",\"required\":false,\"documentation\":\"When an Access Point ARN is provided and this flag is enabled, the SDK MUST use the ARN's region when constructing the endpoint instead of the client's configured region.\",\"type\":\"Boolean\"},\"UseS3ExpressControlEndpoint\":{\"required\":false,\"documentation\":\"Internal parameter to indicate whether S3Express operation should use control plane, (ex. CreateBucket)\",\"type\":\"Boolean\"},\"DisableS3ExpressSessionAuth\":{\"required\":false,\"documentation\":\"Parameter to indicate whether S3Express session auth should be disabled\",\"type\":\"Boolean\"}},\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"Accelerate cannot be used with FIPS\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}],\"error\":\"Cannot set dual-stack in combination with a custom endpoint.\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"A custom endpoint cannot be combined with FIPS\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"A custom endpoint cannot be combined with S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},0,6,true],\"assign\":\"bucketSuffix\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"bucketSuffix\"},\"--x-s3\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3Express does not support Dual-stack.\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3Express does not support S3 Accelerate.\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"DisableS3ExpressSessionAuth\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"DisableS3ExpressSessionAuth\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"isIp\"]},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"uriEncode\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"uri_encoded_bucket\"}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"aws.isVirtualHostableS3Bucket\",\"argv\":[{\"ref\":\"Bucket\"},false]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"S3Express bucket name is not a valid virtual hostable name.\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"isIp\"]},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"uriEncode\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"uri_encoded_bucket\"}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4-s3express\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"aws.isVirtualHostableS3Bucket\",\"argv\":[{\"ref\":\"Bucket\"},false]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4-s3express\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"S3Express bucket name is not a valid virtual hostable name.\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"UseS3ExpressControlEndpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseS3ExpressControlEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"uriEncode\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"uri_encoded_bucket\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://s3express-control-fips.{Region}.amazonaws.com/{uri_encoded_bucket}\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3express-control.{Region}.amazonaws.com/{uri_encoded_bucket}\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"aws.isVirtualHostableS3Bucket\",\"argv\":[{\"ref\":\"Bucket\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"DisableS3ExpressSessionAuth\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"DisableS3ExpressSessionAuth\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},6,14,true],\"assign\":\"s3expressAvailabilityZoneId\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},14,16,true],\"assign\":\"s3expressAvailabilityZoneDelim\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"s3expressAvailabilityZoneDelim\"},\"--\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},6,15,true],\"assign\":\"s3expressAvailabilityZoneId\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},15,17,true],\"assign\":\"s3expressAvailabilityZoneDelim\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"s3expressAvailabilityZoneDelim\"},\"--\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Unrecognized S3Express bucket name format.\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},6,14,true],\"assign\":\"s3expressAvailabilityZoneId\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},14,16,true],\"assign\":\"s3expressAvailabilityZoneDelim\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"s3expressAvailabilityZoneDelim\"},\"--\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4-s3express\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4-s3express\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},6,15,true],\"assign\":\"s3expressAvailabilityZoneId\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},15,17,true],\"assign\":\"s3expressAvailabilityZoneDelim\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"s3expressAvailabilityZoneDelim\"},\"--\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4-s3express\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4-s3express\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Unrecognized S3Express bucket name format.\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"S3Express bucket name is not a valid virtual hostable name.\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]}]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"UseS3ExpressControlEndpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseS3ExpressControlEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://s3express-control-fips.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3express-control.{Region}.amazonaws.com\",\"properties\":{\"backend\":\"S3Express\",\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3express\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},49,50,true],\"assign\":\"hardwareType\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},8,12,true],\"assign\":\"regionPrefix\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},0,7,true],\"assign\":\"bucketAliasSuffix\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},32,49,true],\"assign\":\"outpostId\"},{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"regionPartition\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"bucketAliasSuffix\"},\"--op-s3\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"outpostId\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"hardwareType\"},\"e\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"regionPrefix\"},\"beta\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]}],\"error\":\"Expected a endpoint to be specified but no endpoint was found\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"https://{Bucket}.ec2.{url#authority}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4a\",\"signingName\":\"s3-outposts\",\"signingRegionSet\":[\"*\"]},{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.ec2.s3-outposts.{Region}.{regionPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4a\",\"signingName\":\"s3-outposts\",\"signingRegionSet\":[\"*\"]},{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"hardwareType\"},\"o\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"regionPrefix\"},\"beta\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]}],\"error\":\"Expected a endpoint to be specified but no endpoint was found\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"https://{Bucket}.op-{outpostId}.{url#authority}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4a\",\"signingName\":\"s3-outposts\",\"signingRegionSet\":[\"*\"]},{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.op-{outpostId}.s3-outposts.{Region}.{regionPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4a\",\"signingName\":\"s3-outposts\",\"signingRegionSet\":[\"*\"]},{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Unrecognized hardware type: \\\"Expected hardware type o or e but got {hardwareType}\\\"\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`.\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}]}]}]}],\"error\":\"Custom endpoint `{Endpoint}` was not a valid URI\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"ForcePathStyle\"},false]},{\"fn\":\"aws.isVirtualHostableS3Bucket\",\"argv\":[{\"ref\":\"Bucket\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]},\"aws-cn\"]}],\"error\":\"S3 Accelerate cannot be used in this region\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.dualstack.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.dualstack.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.dualstack.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3.dualstack.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"isIp\"]},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"isIp\"]},false]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"isIp\"]},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"isIp\"]},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"isIp\"]},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"isIp\"]},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{Bucket}.s3.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://{Bucket}.s3.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"scheme\"]},\"http\"]},{\"fn\":\"aws.isVirtualHostableS3Bucket\",\"argv\":[{\"ref\":\"Bucket\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"ForcePathStyle\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},false]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{Bucket}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"ForcePathStyle\"},false]},{\"fn\":\"aws.parseArn\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"bucketArn\"}],\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[0]\"],\"assign\":\"arnType\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"\"]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"service\"]},\"s3-object-lambda\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"accesspoint\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[1]\"],\"assign\":\"accessPointName\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"accessPointName\"},\"\"]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 Object Lambda does not support Dual-stack\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 Object Lambda does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"\"]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"DisableAccessPoints\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"DisableAccessPoints\"},true]}],\"error\":\"Access points are not supported for this operation\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"]}]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"UseArnRegion\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseArnRegion\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"{Region}\"]}]}],\"error\":\"Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"bucketPartition\"}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},\"\"]}],\"error\":\"Invalid ARN: Missing account id\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"accessPointName\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"{url#scheme}://{accessPointName}-{bucketArn#accountId}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-object-lambda\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-object-lambda\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-object-lambda\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName}`\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: bucket ARN is missing a region\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: Expected a resource of the format `accesspoint:` but no name was provided\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: Object Lambda ARNs only support `accesspoint` arn types, but found: `{arnType}`\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"accesspoint\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[1]\"],\"assign\":\"accessPointName\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"accessPointName\"},\"\"]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"\"]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnType\"},\"accesspoint\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"\"]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"DisableAccessPoints\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"DisableAccessPoints\"},true]}],\"error\":\"Access points are not supported for this operation\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"]}]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"UseArnRegion\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseArnRegion\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"{Region}\"]}]}],\"error\":\"Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"bucketPartition\"}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},\"{partitionResult#name}\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"service\"]},\"s3\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"accessPointName\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"Access Points do not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"{url#scheme}://{accessPointName}-{bucketArn#accountId}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName}`\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The ARN was not for the S3 service, found: {bucketArn#service}\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"accessPointName\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 MRAP does not support dual-stack\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"S3 MRAP does not support FIPS\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 MRAP does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"DisableMultiRegionAccessPoints\"},true]}],\"error\":\"Invalid configuration: Multi-Region Access Point ARNs are disabled.\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"mrapPartition\"}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"mrapPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"partition\"]}]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://{accessPointName}.accesspoint.s3-global.{mrapPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4a\",\"signingName\":\"s3\",\"signingRegionSet\":[\"*\"]}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Client was configured for partition `{mrapPartition#name}` but bucket referred to partition `{bucketArn#partition}`\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid Access Point Name\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: Expected a resource of the format `accesspoint:` but no name was provided\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"service\"]},\"s3-outposts\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 Outposts does not support Dual-stack\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"S3 Outposts does not support FIPS\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 Outposts does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[4]\"]}]}],\"error\":\"Invalid Arn: Outpost Access Point ARN contains sub resources\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[1]\"],\"assign\":\"outpostId\"}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"outpostId\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"UseArnRegion\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseArnRegion\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"{Region}\"]}]}],\"error\":\"Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"bucketPartition\"}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"],\"assign\":\"outpostType\"}],\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[3]\"],\"assign\":\"accessPointName\"}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"outpostType\"},\"accesspoint\"]}],\"rules\":[{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.{outpostId}.{url#authority}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4a\",\"signingName\":\"s3-outposts\",\"signingRegionSet\":[\"*\"]},{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.{outpostId}.s3-outposts.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4a\",\"signingName\":\"s3-outposts\",\"signingRegionSet\":[\"*\"]},{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-outposts\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Expected an outpost type `accesspoint`, found {outpostType}\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: expected an access point name\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: Expected a 4-component resource\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The outpost Id may only contain a-z, A-Z, 0-9 and `-`. Found: `{outpostId}`\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: The Outpost Id was not set\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: Unrecognized format: {Bucket} (type: {arnType})\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid ARN: No ARN type specified\",\"type\":\"error\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},0,4,false],\"assign\":\"arnPrefix\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"arnPrefix\"},\"arn:\"]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"aws.parseArn\",\"argv\":[{\"ref\":\"Bucket\"}]}]}]}],\"error\":\"Invalid ARN: `{Bucket}` was not a valid ARN\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"ForcePathStyle\"},true]},{\"fn\":\"aws.parseArn\",\"argv\":[{\"ref\":\"Bucket\"}]}],\"error\":\"Path-style addressing cannot be used with ARN buckets\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"uriEncode\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"uri_encoded_bucket\"}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3-fips.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Path-style addressing cannot be used with S3 Accelerate\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"UseObjectLambdaEndpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseObjectLambdaEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 Object Lambda does not support Dual-stack\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 Object Lambda does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-object-lambda\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://s3-object-lambda-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-object-lambda\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-object-lambda.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-object-lambda\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]}]}],\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3-fips.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://s3-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-east-1\"]}],\"endpoint\":{\"url\":\"https://s3.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},false]}],\"endpoint\":{\"url\":\"https://s3.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"type\":\"error\"}],\"type\":\"tree\"}],\"type\":\"tree\"}],\"type\":\"tree\"},{\"conditions\":[],\"error\":\"A region must be set when sending requests to S3.\",\"type\":\"error\"}]}" init() throws { try self.init(partitions: AWSClientRuntime.awsPartitionJSON, ruleSet: Self.ruleSet) diff --git a/Sources/Services/AWSS3/Sources/AWSS3/Models.swift b/Sources/Services/AWSS3/Sources/AWSS3/Models.swift index 2f90e638929..82f42769041 100644 --- a/Sources/Services/AWSS3/Sources/AWSS3/Models.swift +++ b/Sources/Services/AWSS3/Sources/AWSS3/Models.swift @@ -29,6 +29,8 @@ import protocol Smithy.RequestMessageSerializer import struct AWSClientRuntime.AWSS3ErrorWith200StatusXMLMiddleware import struct AWSClientRuntime.AWSUserAgentMetadata import struct AWSClientRuntime.EndpointResolverMiddleware +import struct AWSClientRuntime.FlexibleChecksumsRequestMiddleware +import struct AWSClientRuntime.FlexibleChecksumsResponseMiddleware import struct AWSClientRuntime.RestXMLError @_spi(UnknownAWSHTTPServiceError) import struct AWSClientRuntime.UnknownAWSHTTPServiceError import struct AWSClientRuntime.UserAgentMiddleware @@ -37,8 +39,6 @@ import struct ClientRuntime.BlobStreamBodyMiddleware import struct ClientRuntime.ContentLengthMiddleware import struct ClientRuntime.ContentTypeMiddleware import struct ClientRuntime.DeserializeMiddleware -import struct ClientRuntime.FlexibleChecksumsRequestMiddleware -import struct ClientRuntime.FlexibleChecksumsResponseMiddleware import struct ClientRuntime.HeaderMiddleware import struct ClientRuntime.LoggerMiddleware import struct ClientRuntime.OperationOutput @@ -21616,7 +21616,7 @@ extension GetObjectInput { builder.applySigner(ClientRuntime.SignerMiddleware()) builder.deserialize(ClientRuntime.DeserializeMiddleware(GetObjectOutput.httpOutput(from:), GetObjectOutputError.httpError(from:))) builder.interceptors.add(ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsResponseMiddleware(validationMode: true)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsResponseMiddleware(validationMode: true)) let op = builder.attributes(context) .executeRequest(client) .build() @@ -21752,7 +21752,7 @@ extension PutObjectInput { context.attributes.set(key: Smithy.AttributeKey(name: "EndpointParams"), value: endpointParams) builder.applyEndpoint(AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) builder.selectAuthScheme(ClientRuntime.AuthSchemeMiddleware()) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.serialize(PutObjectPresignedURLMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -21843,7 +21843,7 @@ extension GetObjectInput { builder.applySigner(ClientRuntime.SignerMiddleware()) builder.deserialize(ClientRuntime.DeserializeMiddleware(GetObjectOutput.httpOutput(from:), GetObjectOutputError.httpError(from:))) builder.interceptors.add(ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsResponseMiddleware(validationMode: true)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsResponseMiddleware(validationMode: true)) let op = builder.attributes(context) .executeRequest(client) .build() @@ -21889,7 +21889,7 @@ extension PutObjectInput { builder.serialize(ClientRuntime.QueryItemMiddleware(PutObjectInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/octet-stream")) builder.serialize(ClientRuntime.BlobStreamBodyMiddleware(keyPath: \.body)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -21942,7 +21942,7 @@ extension UploadPartInput { builder.serialize(ClientRuntime.QueryItemMiddleware(UploadPartInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/octet-stream")) builder.serialize(ClientRuntime.BlobStreamBodyMiddleware(keyPath: \.body)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) diff --git a/Sources/Services/AWSS3/Sources/AWSS3/S3Client.swift b/Sources/Services/AWSS3/Sources/AWSS3/S3Client.swift index 8b3d69689d1..fa1b94fe66c 100644 --- a/Sources/Services/AWSS3/Sources/AWSS3/S3Client.swift +++ b/Sources/Services/AWSS3/Sources/AWSS3/S3Client.swift @@ -36,6 +36,8 @@ import protocol SmithyIdentity.AWSCredentialIdentityResolver import struct AWSClientRuntime.AWSS3ErrorWith200StatusXMLMiddleware import struct AWSClientRuntime.AWSUserAgentMetadata import struct AWSClientRuntime.EndpointResolverMiddleware +import struct AWSClientRuntime.FlexibleChecksumsRequestMiddleware +import struct AWSClientRuntime.FlexibleChecksumsResponseMiddleware import struct AWSClientRuntime.UserAgentMiddleware import struct AWSSDKHTTPAuth.SigV4AAuthScheme import struct AWSSDKHTTPAuth.SigV4AuthScheme @@ -46,8 +48,6 @@ import struct ClientRuntime.ContentLengthMiddleware import struct ClientRuntime.ContentMD5Middleware import struct ClientRuntime.ContentTypeMiddleware import struct ClientRuntime.DeserializeMiddleware -import struct ClientRuntime.FlexibleChecksumsRequestMiddleware -import struct ClientRuntime.FlexibleChecksumsResponseMiddleware import struct ClientRuntime.HeaderMiddleware import struct ClientRuntime.LoggerMiddleware import struct ClientRuntime.PayloadBodyMiddleware @@ -438,7 +438,7 @@ extension S3Client { let builder = ClientRuntime.OrchestratorBuilder() builder.interceptors.add(ClientRuntime.URLPathMiddleware(CopyObjectInput.urlPathProvider(_:))) builder.interceptors.add(ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.disableMultiRegionAccessPoints ?? false, disableS3ExpressSessionAuth: true, endpoint: config.endpoint, forcePathStyle: config.forcePathStyle ?? false, region: config.region, useArnRegion: config.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.accelerate ?? false, bucket: input.bucket, copySource: input.copySource, disableMultiRegionAccessPoints: config.disableMultiRegionAccessPoints ?? false, disableS3ExpressSessionAuth: true, endpoint: config.endpoint, forcePathStyle: config.forcePathStyle ?? false, key: input.key, region: config.region, useArnRegion: config.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.useGlobalEndpoint ?? false) context.attributes.set(key: Smithy.AttributeKey(name: "EndpointParams"), value: endpointParams) builder.applyEndpoint(AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) builder.interceptors.add(AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) @@ -1614,7 +1614,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(DeleteObjectsInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("Delete", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.Delete.write(value:to:), keyPath: \.delete, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -2820,7 +2820,7 @@ extension S3Client { builder.applySigner(ClientRuntime.SignerMiddleware()) builder.deserialize(ClientRuntime.DeserializeMiddleware(GetObjectOutput.httpOutput(from:), GetObjectOutputError.httpError(from:))) builder.interceptors.add(ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsResponseMiddleware(validationMode: true)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsResponseMiddleware(validationMode: true)) let op = builder.attributes(context) .executeRequest(client) .build() @@ -4137,7 +4137,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutBucketAccelerateConfigurationInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("AccelerateConfiguration", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.AccelerateConfiguration.write(value:to:), keyPath: \.accelerateConfiguration, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -4265,7 +4265,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutBucketAclInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("AccessControlPolicy", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.AccessControlPolicy.write(value:to:), keyPath: \.accessControlPolicy, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -4421,7 +4421,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutBucketCorsInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("CORSConfiguration", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.CORSConfiguration.write(value:to:), keyPath: \.corsConfiguration, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -4477,7 +4477,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutBucketEncryptionInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("ServerSideEncryptionConfiguration", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.ServerSideEncryptionConfiguration.write(value:to:), keyPath: \.serverSideEncryptionConfiguration, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -4667,7 +4667,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutBucketLifecycleConfigurationInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("LifecycleConfiguration", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.BucketLifecycleConfiguration.write(value:to:), keyPath: \.lifecycleConfiguration, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -4736,7 +4736,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutBucketLoggingInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("BucketLoggingStatus", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.BucketLoggingStatus.write(value:to:), keyPath: \.bucketLoggingStatus, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -4971,7 +4971,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutBucketPolicyInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "text/plain")) builder.serialize(ClientRuntime.StringBodyMiddleware(keyPath: \.policy)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -5027,7 +5027,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutBucketReplicationInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("ReplicationConfiguration", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.ReplicationConfiguration.write(value:to:), keyPath: \.replicationConfiguration, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -5083,7 +5083,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutBucketRequestPaymentInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("RequestPaymentConfiguration", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.RequestPaymentConfiguration.write(value:to:), keyPath: \.requestPaymentConfiguration, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -5150,7 +5150,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutBucketTaggingInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("Tagging", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.Tagging.write(value:to:), keyPath: \.tagging, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -5208,7 +5208,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutBucketVersioningInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("VersioningConfiguration", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.VersioningConfiguration.write(value:to:), keyPath: \.versioningConfiguration, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -5306,7 +5306,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutBucketWebsiteInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("WebsiteConfiguration", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.WebsiteConfiguration.write(value:to:), keyPath: \.websiteConfiguration, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -5400,7 +5400,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutObjectInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/octet-stream")) builder.serialize(ClientRuntime.BlobStreamBodyMiddleware(keyPath: \.body)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -5524,7 +5524,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutObjectAclInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("AccessControlPolicy", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.AccessControlPolicy.write(value:to:), keyPath: \.accessControlPolicy, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -5576,7 +5576,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutObjectLegalHoldInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("LegalHold", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.ObjectLockLegalHold.write(value:to:), keyPath: \.legalHold, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -5634,7 +5634,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutObjectLockConfigurationInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("ObjectLockConfiguration", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.ObjectLockConfiguration.write(value:to:), keyPath: \.objectLockConfiguration, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -5686,7 +5686,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutObjectRetentionInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("Retention", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.ObjectLockRetention.write(value:to:), keyPath: \.retention, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -5753,7 +5753,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutObjectTaggingInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("Tagging", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.Tagging.write(value:to:), keyPath: \.tagging, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -5813,7 +5813,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(PutPublicAccessBlockInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("PublicAccessBlockConfiguration", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.PublicAccessBlockConfiguration.write(value:to:), keyPath: \.publicAccessBlockConfiguration, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -5931,7 +5931,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(RestoreObjectInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/xml")) builder.serialize(ClientRuntime.PayloadBodyMiddleware(rootNodeInfo: .init("RestoreRequest", namespaceDef: .init(prefix: "", uri: "http://s3.amazonaws.com/doc/2006-03-01/")), inputWritingClosure: S3ClientTypes.RestoreRequest.write(value:to:), keyPath: \.restoreRequest, defaultBody: nil)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) @@ -6102,7 +6102,7 @@ extension S3Client { builder.serialize(ClientRuntime.QueryItemMiddleware(UploadPartInput.queryItemProvider(_:))) builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/octet-stream")) builder.serialize(ClientRuntime.BlobStreamBodyMiddleware(keyPath: \.body)) - builder.interceptors.add(ClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) + builder.interceptors.add(AWSClientRuntime.FlexibleChecksumsRequestMiddleware(checksumAlgorithm: input.checksumAlgorithm?.rawValue)) builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) diff --git a/Sources/Services/AWSS3/Tests/AWSS3Tests/EndpointResolverTest.swift b/Sources/Services/AWSS3/Tests/AWSS3Tests/EndpointResolverTest.swift index 3471a7fc437..db30068cbe4 100644 --- a/Sources/Services/AWSS3/Tests/AWSS3Tests/EndpointResolverTest.swift +++ b/Sources/Services/AWSS3/Tests/AWSS3Tests/EndpointResolverTest.swift @@ -1581,8 +1581,41 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// virtual addressing, aws-global region with fips uses the regional fips endpoint + /// virtual addressing, aws-global region with Copy Source, and Key uses the global endpoint. Copy Source and Key parameters should not be used in endpoint evaluation. func testResolve58() throws { + let endpointParams = EndpointParams( + accelerate: false, + bucket: "bucket-name", + copySource: "/copy/source", + key: "key", + region: "aws-global", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [ + "authSchemes": [ + [ + "name": "sigv4", + "signingName": "s3", + "signingRegion": "us-east-1", + "disableDoubleEncoding": true + ] as [String: AnyHashable] + ] as [AnyHashable] + ] + + let headers = SmithyHTTPAPI.Headers() + let expected = try SmithyHTTPAPI.Endpoint(urlString: "https://bucket-name.s3.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// virtual addressing, aws-global region with fips uses the regional fips endpoint + func testResolve59() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -1613,7 +1646,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing, aws-global region with dualstack uses the regional dualstack endpoint - func testResolve59() throws { + func testResolve60() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -1644,7 +1677,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing, aws-global region with fips/dualstack uses the regional fips/dualstack endpoint - func testResolve60() throws { + func testResolve61() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -1675,7 +1708,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing, aws-global region with accelerate uses the global accelerate endpoint - func testResolve61() throws { + func testResolve62() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket-name", @@ -1706,7 +1739,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing, aws-global region with custom endpoint - func testResolve62() throws { + func testResolve63() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -1738,7 +1771,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing, UseGlobalEndpoint and us-east-1 region uses the global endpoint - func testResolve63() throws { + func testResolve64() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -1770,7 +1803,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing, UseGlobalEndpoint and us-west-2 region uses the regional endpoint - func testResolve64() throws { + func testResolve65() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -1802,7 +1835,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing, UseGlobalEndpoint and us-east-1 region and fips uses the regional fips endpoint - func testResolve65() throws { + func testResolve66() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -1834,7 +1867,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing, UseGlobalEndpoint and us-east-1 region and dualstack uses the regional dualstack endpoint - func testResolve66() throws { + func testResolve67() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -1866,7 +1899,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing, UseGlobalEndpoint and us-east-1 region and accelerate uses the global accelerate endpoint - func testResolve67() throws { + func testResolve68() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket-name", @@ -1898,7 +1931,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing, UseGlobalEndpoint and us-east-1 region with custom endpoint - func testResolve68() throws { + func testResolve69() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -1931,7 +1964,7 @@ class EndpointResolverTest: XCTestCase { } /// ForcePathStyle, aws-global region uses the global endpoint - func testResolve69() throws { + func testResolve70() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -1963,7 +1996,7 @@ class EndpointResolverTest: XCTestCase { } /// ForcePathStyle, aws-global region with fips is invalid - func testResolve70() throws { + func testResolve71() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -1995,7 +2028,7 @@ class EndpointResolverTest: XCTestCase { } /// ForcePathStyle, aws-global region with dualstack uses regional dualstack endpoint - func testResolve71() throws { + func testResolve72() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -2027,7 +2060,7 @@ class EndpointResolverTest: XCTestCase { } /// ForcePathStyle, aws-global region custom endpoint uses the custom endpoint - func testResolve72() throws { + func testResolve73() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -2060,7 +2093,7 @@ class EndpointResolverTest: XCTestCase { } /// ForcePathStyle, UseGlobalEndpoint us-east-1 region uses the global endpoint - func testResolve73() throws { + func testResolve74() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -2093,7 +2126,7 @@ class EndpointResolverTest: XCTestCase { } /// ForcePathStyle, UseGlobalEndpoint us-west-2 region uses the regional endpoint - func testResolve74() throws { + func testResolve75() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -2126,7 +2159,7 @@ class EndpointResolverTest: XCTestCase { } /// ForcePathStyle, UseGlobalEndpoint us-east-1 region, dualstack uses the regional dualstack endpoint - func testResolve75() throws { + func testResolve76() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -2159,7 +2192,7 @@ class EndpointResolverTest: XCTestCase { } /// ForcePathStyle, UseGlobalEndpoint us-east-1 region custom endpoint uses the custom endpoint - func testResolve76() throws { + func testResolve77() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -2193,7 +2226,7 @@ class EndpointResolverTest: XCTestCase { } /// ARN with aws-global region and UseArnRegion uses the regional endpoint - func testResolve77() throws { + func testResolve78() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-outposts:us-east-1:123456789012:outpost/op-01234567890123456/accesspoint/reports", @@ -2233,7 +2266,7 @@ class EndpointResolverTest: XCTestCase { } /// cross partition MRAP ARN is an error - func testResolve78() throws { + func testResolve79() throws { let endpointParams = EndpointParams( bucket: "arn:aws-cn:s3::123456789012:accesspoint:mfzwi23gnjvgw.mrap", region: "us-west-1" @@ -2251,7 +2284,7 @@ class EndpointResolverTest: XCTestCase { } /// Endpoint override, accesspoint with HTTP, port - func testResolve79() throws { + func testResolve80() throws { let endpointParams = EndpointParams( bucket: "arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint", endpoint: "http://beta.example.com:1234", @@ -2280,7 +2313,7 @@ class EndpointResolverTest: XCTestCase { } /// Endpoint override, accesspoint with http, path, query, and port - func testResolve80() throws { + func testResolve81() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint", @@ -2312,7 +2345,7 @@ class EndpointResolverTest: XCTestCase { } /// non-bucket endpoint override with FIPS = error - func testResolve81() throws { + func testResolve82() throws { let endpointParams = EndpointParams( endpoint: "http://beta.example.com:1234/path", region: "us-west-2", @@ -2332,7 +2365,7 @@ class EndpointResolverTest: XCTestCase { } /// FIPS + dualstack + custom endpoint - func testResolve82() throws { + func testResolve83() throws { let endpointParams = EndpointParams( endpoint: "http://beta.example.com:1234/path", region: "us-west-2", @@ -2352,7 +2385,7 @@ class EndpointResolverTest: XCTestCase { } /// dualstack + custom endpoint - func testResolve83() throws { + func testResolve84() throws { let endpointParams = EndpointParams( endpoint: "http://beta.example.com:1234/path", region: "us-west-2", @@ -2372,7 +2405,7 @@ class EndpointResolverTest: XCTestCase { } /// custom endpoint without FIPS/dualstack - func testResolve84() throws { + func testResolve85() throws { let endpointParams = EndpointParams( endpoint: "http://beta.example.com:1234/path", region: "us-west-2", @@ -2402,7 +2435,7 @@ class EndpointResolverTest: XCTestCase { } /// s3 object lambda with access points disabled - func testResolve85() throws { + func testResolve86() throws { let endpointParams = EndpointParams( bucket: "arn:aws:s3-object-lambda:us-west-2:123456789012:accesspoint:myendpoint", disableAccessPoints: true, @@ -2421,7 +2454,7 @@ class EndpointResolverTest: XCTestCase { } /// non bucket + FIPS - func testResolve86() throws { + func testResolve87() throws { let endpointParams = EndpointParams( region: "us-west-2", useDualStack: false, @@ -2450,7 +2483,7 @@ class EndpointResolverTest: XCTestCase { } /// standard non bucket endpoint - func testResolve87() throws { + func testResolve88() throws { let endpointParams = EndpointParams( region: "us-west-2", useDualStack: false, @@ -2479,7 +2512,7 @@ class EndpointResolverTest: XCTestCase { } /// non bucket endpoint with FIPS + Dualstack - func testResolve88() throws { + func testResolve89() throws { let endpointParams = EndpointParams( region: "us-west-2", useDualStack: true, @@ -2508,7 +2541,7 @@ class EndpointResolverTest: XCTestCase { } /// non bucket endpoint with dualstack - func testResolve89() throws { + func testResolve90() throws { let endpointParams = EndpointParams( region: "us-west-2", useDualStack: true, @@ -2537,7 +2570,7 @@ class EndpointResolverTest: XCTestCase { } /// use global endpoint + IP address endpoint override - func testResolve90() throws { + func testResolve91() throws { let endpointParams = EndpointParams( bucket: "bucket", endpoint: "http://127.0.0.1", @@ -2569,7 +2602,7 @@ class EndpointResolverTest: XCTestCase { } /// non-dns endpoint + global endpoint - func testResolve91() throws { + func testResolve92() throws { let endpointParams = EndpointParams( bucket: "bucket!", region: "us-east-1", @@ -2600,7 +2633,7 @@ class EndpointResolverTest: XCTestCase { } /// endpoint override + use global endpoint - func testResolve92() throws { + func testResolve93() throws { let endpointParams = EndpointParams( bucket: "bucket!", endpoint: "http://foo.com", @@ -2632,7 +2665,7 @@ class EndpointResolverTest: XCTestCase { } /// FIPS + dualstack + non-bucket endpoint - func testResolve93() throws { + func testResolve94() throws { let endpointParams = EndpointParams( bucket: "bucket!", region: "us-east-1", @@ -2662,7 +2695,7 @@ class EndpointResolverTest: XCTestCase { } /// FIPS + dualstack + non-DNS endpoint - func testResolve94() throws { + func testResolve95() throws { let endpointParams = EndpointParams( bucket: "bucket!", forcePathStyle: true, @@ -2693,7 +2726,7 @@ class EndpointResolverTest: XCTestCase { } /// endpoint override + FIPS + dualstack (BUG) - func testResolve95() throws { + func testResolve96() throws { let endpointParams = EndpointParams( bucket: "bucket!", endpoint: "http://foo.com", @@ -2715,7 +2748,7 @@ class EndpointResolverTest: XCTestCase { } /// endpoint override + non-dns bucket + FIPS (BUG) - func testResolve96() throws { + func testResolve97() throws { let endpointParams = EndpointParams( bucket: "bucket!", endpoint: "http://foo.com", @@ -2736,7 +2769,7 @@ class EndpointResolverTest: XCTestCase { } /// FIPS + bucket endpoint + force path style - func testResolve97() throws { + func testResolve98() throws { let endpointParams = EndpointParams( bucket: "bucket!", forcePathStyle: true, @@ -2768,7 +2801,7 @@ class EndpointResolverTest: XCTestCase { } /// bucket + FIPS + force path style - func testResolve98() throws { + func testResolve99() throws { let endpointParams = EndpointParams( bucket: "bucket", forcePathStyle: true, @@ -2800,7 +2833,7 @@ class EndpointResolverTest: XCTestCase { } /// FIPS + dualstack + use global endpoint - func testResolve99() throws { + func testResolve100() throws { let endpointParams = EndpointParams( bucket: "bucket", region: "us-east-1", @@ -2831,7 +2864,7 @@ class EndpointResolverTest: XCTestCase { } /// URI encoded bucket + use global endpoint - func testResolve100() throws { + func testResolve101() throws { let endpointParams = EndpointParams( bucket: "bucket!", endpoint: "https://foo.com", @@ -2853,7 +2886,7 @@ class EndpointResolverTest: XCTestCase { } /// FIPS + path based endpoint - func testResolve101() throws { + func testResolve102() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket!", @@ -2885,7 +2918,7 @@ class EndpointResolverTest: XCTestCase { } /// accelerate + dualstack + global endpoint - func testResolve102() throws { + func testResolve103() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket", @@ -2917,7 +2950,7 @@ class EndpointResolverTest: XCTestCase { } /// dualstack + global endpoint + non URI safe bucket - func testResolve103() throws { + func testResolve104() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket!", @@ -2949,7 +2982,7 @@ class EndpointResolverTest: XCTestCase { } /// FIPS + uri encoded bucket - func testResolve104() throws { + func testResolve105() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket!", @@ -2982,7 +3015,7 @@ class EndpointResolverTest: XCTestCase { } /// endpoint override + non-uri safe endpoint + force path style - func testResolve105() throws { + func testResolve106() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket!", @@ -3006,7 +3039,7 @@ class EndpointResolverTest: XCTestCase { } /// FIPS + Dualstack + global endpoint + non-dns bucket - func testResolve106() throws { + func testResolve107() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket!", @@ -3038,7 +3071,7 @@ class EndpointResolverTest: XCTestCase { } /// endpoint override + FIPS + dualstack - func testResolve107() throws { + func testResolve108() throws { let endpointParams = EndpointParams( endpoint: "http://foo.com", region: "us-east-1", @@ -3059,7 +3092,7 @@ class EndpointResolverTest: XCTestCase { } /// non-bucket endpoint override + dualstack + global endpoint - func testResolve108() throws { + func testResolve109() throws { let endpointParams = EndpointParams( endpoint: "http://foo.com", region: "us-east-1", @@ -3080,7 +3113,7 @@ class EndpointResolverTest: XCTestCase { } /// Endpoint override + UseGlobalEndpoint + us-east-1 - func testResolve109() throws { + func testResolve110() throws { let endpointParams = EndpointParams( endpoint: "http://foo.com", region: "us-east-1", @@ -3101,7 +3134,7 @@ class EndpointResolverTest: XCTestCase { } /// non-FIPS partition with FIPS set + custom endpoint - func testResolve110() throws { + func testResolve111() throws { let endpointParams = EndpointParams( region: "cn-north-1", useDualStack: false, @@ -3121,7 +3154,7 @@ class EndpointResolverTest: XCTestCase { } /// aws-global signs as us-east-1 - func testResolve111() throws { + func testResolve112() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket!", @@ -3152,7 +3185,7 @@ class EndpointResolverTest: XCTestCase { } /// aws-global signs as us-east-1 - func testResolve112() throws { + func testResolve113() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket", @@ -3184,7 +3217,7 @@ class EndpointResolverTest: XCTestCase { } /// aws-global + dualstack + path-only bucket - func testResolve113() throws { + func testResolve114() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket!", @@ -3215,7 +3248,7 @@ class EndpointResolverTest: XCTestCase { } /// aws-global + path-only bucket - func testResolve114() throws { + func testResolve115() throws { let endpointParams = EndpointParams( bucket: "bucket!", region: "aws-global" @@ -3243,7 +3276,7 @@ class EndpointResolverTest: XCTestCase { } /// aws-global + fips + custom endpoint - func testResolve115() throws { + func testResolve116() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket!", @@ -3265,7 +3298,7 @@ class EndpointResolverTest: XCTestCase { } /// aws-global, endpoint override & path only-bucket - func testResolve116() throws { + func testResolve117() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket!", @@ -3297,7 +3330,7 @@ class EndpointResolverTest: XCTestCase { } /// aws-global + dualstack + custom endpoint - func testResolve117() throws { + func testResolve118() throws { let endpointParams = EndpointParams( accelerate: false, endpoint: "http://foo.com", @@ -3318,7 +3351,7 @@ class EndpointResolverTest: XCTestCase { } /// accelerate, dualstack + aws-global - func testResolve118() throws { + func testResolve119() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket", @@ -3349,7 +3382,7 @@ class EndpointResolverTest: XCTestCase { } /// FIPS + aws-global + path only bucket. This is not supported by S3 but we allow garbage in garbage out - func testResolve119() throws { + func testResolve120() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket!", @@ -3381,7 +3414,7 @@ class EndpointResolverTest: XCTestCase { } /// aws-global + FIPS + endpoint override. - func testResolve120() throws { + func testResolve121() throws { let endpointParams = EndpointParams( endpoint: "http://foo.com", region: "aws-global", @@ -3400,7 +3433,7 @@ class EndpointResolverTest: XCTestCase { } /// force path style, FIPS, aws-global & endpoint override - func testResolve121() throws { + func testResolve122() throws { let endpointParams = EndpointParams( bucket: "bucket!", endpoint: "http://foo.com", @@ -3421,7 +3454,7 @@ class EndpointResolverTest: XCTestCase { } /// ip address causes path style to be forced - func testResolve122() throws { + func testResolve123() throws { let endpointParams = EndpointParams( bucket: "bucket", endpoint: "http://192.168.1.1", @@ -3450,7 +3483,7 @@ class EndpointResolverTest: XCTestCase { } /// endpoint override with aws-global region - func testResolve123() throws { + func testResolve124() throws { let endpointParams = EndpointParams( endpoint: "http://foo.com", region: "aws-global", @@ -3470,7 +3503,7 @@ class EndpointResolverTest: XCTestCase { } /// FIPS + path-only (TODO: consider making this an error) - func testResolve124() throws { + func testResolve125() throws { let endpointParams = EndpointParams( bucket: "bucket!", region: "aws-global", @@ -3499,7 +3532,7 @@ class EndpointResolverTest: XCTestCase { } /// empty arn type - func testResolve125() throws { + func testResolve126() throws { let endpointParams = EndpointParams( bucket: "arn:aws:not-s3:us-west-2:123456789012::myendpoint", region: "us-east-2" @@ -3517,7 +3550,7 @@ class EndpointResolverTest: XCTestCase { } /// path style can't be used with accelerate - func testResolve126() throws { + func testResolve127() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket!", @@ -3536,7 +3569,7 @@ class EndpointResolverTest: XCTestCase { } /// invalid region - func testResolve127() throws { + func testResolve128() throws { let endpointParams = EndpointParams( bucket: "bucket.subdomain", endpoint: "http://foo.com", @@ -3555,7 +3588,7 @@ class EndpointResolverTest: XCTestCase { } /// invalid region - func testResolve128() throws { + func testResolve129() throws { let endpointParams = EndpointParams( bucket: "bucket", endpoint: "http://foo.com", @@ -3574,7 +3607,7 @@ class EndpointResolverTest: XCTestCase { } /// empty arn type - func testResolve129() throws { + func testResolve130() throws { let endpointParams = EndpointParams( bucket: "arn:aws:s3::123456789012:accesspoint:my_endpoint", region: "us-east-2" @@ -3592,7 +3625,7 @@ class EndpointResolverTest: XCTestCase { } /// empty arn type - func testResolve130() throws { + func testResolve131() throws { let endpointParams = EndpointParams( bucket: "arn:aws:s3:cn-north-1:123456789012:accesspoint:my-endpoint", region: "us-east-2", @@ -3611,7 +3644,7 @@ class EndpointResolverTest: XCTestCase { } /// invalid arn region - func testResolve131() throws { + func testResolve132() throws { let endpointParams = EndpointParams( bucket: "arn:aws:s3-object-lambda:us-east_2:123456789012:accesspoint:my-endpoint", region: "us-east-2", @@ -3630,7 +3663,7 @@ class EndpointResolverTest: XCTestCase { } /// invalid ARN outpost - func testResolve132() throws { + func testResolve133() throws { let endpointParams = EndpointParams( bucket: "arn:aws:s3-outposts:us-east-1:123456789012:outpost/op_01234567890123456/accesspoint/reports", region: "us-east-2", @@ -3649,7 +3682,7 @@ class EndpointResolverTest: XCTestCase { } /// invalid ARN - func testResolve133() throws { + func testResolve134() throws { let endpointParams = EndpointParams( bucket: "arn:aws:s3-outposts:us-east-1:123456789012:outpost/op-01234567890123456/reports", region: "us-east-2" @@ -3667,7 +3700,7 @@ class EndpointResolverTest: XCTestCase { } /// invalid ARN - func testResolve134() throws { + func testResolve135() throws { let endpointParams = EndpointParams( bucket: "arn:aws:s3-outposts:us-east-1:123456789012:outpost/op-01234567890123456", region: "us-east-2" @@ -3685,7 +3718,7 @@ class EndpointResolverTest: XCTestCase { } /// invalid outpost type - func testResolve135() throws { + func testResolve136() throws { let endpointParams = EndpointParams( bucket: "arn:aws:s3-outposts:us-east-1:123456789012:outpost/op-01234567890123456/not-accesspoint/reports", region: "us-east-2" @@ -3703,7 +3736,7 @@ class EndpointResolverTest: XCTestCase { } /// invalid outpost type - func testResolve136() throws { + func testResolve137() throws { let endpointParams = EndpointParams( bucket: "arn:aws:s3-outposts:us-east_1:123456789012:outpost/op-01234567890123456/not-accesspoint/reports", region: "us-east-2" @@ -3721,7 +3754,7 @@ class EndpointResolverTest: XCTestCase { } /// invalid outpost type - func testResolve137() throws { + func testResolve138() throws { let endpointParams = EndpointParams( bucket: "arn:aws:s3-outposts:us-east-1:12345_789012:outpost/op-01234567890123456/not-accesspoint/reports", region: "us-east-2" @@ -3739,7 +3772,7 @@ class EndpointResolverTest: XCTestCase { } /// invalid outpost type - func testResolve138() throws { + func testResolve139() throws { let endpointParams = EndpointParams( bucket: "arn:aws:s3-outposts:us-east-1:12345789012:outpost", region: "us-east-2" @@ -3757,7 +3790,7 @@ class EndpointResolverTest: XCTestCase { } /// use global endpoint virtual addressing - func testResolve139() throws { + func testResolve140() throws { let endpointParams = EndpointParams( bucket: "bucket", endpoint: "http://example.com", @@ -3787,7 +3820,7 @@ class EndpointResolverTest: XCTestCase { } /// global endpoint + ip address - func testResolve140() throws { + func testResolve141() throws { let endpointParams = EndpointParams( bucket: "bucket", endpoint: "http://192.168.0.1", @@ -3817,7 +3850,7 @@ class EndpointResolverTest: XCTestCase { } /// invalid outpost type - func testResolve141() throws { + func testResolve142() throws { let endpointParams = EndpointParams( bucket: "bucket!", region: "us-east-2", @@ -3846,7 +3879,7 @@ class EndpointResolverTest: XCTestCase { } /// invalid outpost type - func testResolve142() throws { + func testResolve143() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket", @@ -3876,7 +3909,7 @@ class EndpointResolverTest: XCTestCase { } /// use global endpoint + custom endpoint - func testResolve143() throws { + func testResolve144() throws { let endpointParams = EndpointParams( bucket: "bucket!", endpoint: "http://foo.com", @@ -3906,7 +3939,7 @@ class EndpointResolverTest: XCTestCase { } /// use global endpoint, not us-east-1, force path style - func testResolve144() throws { + func testResolve145() throws { let endpointParams = EndpointParams( bucket: "bucket!", endpoint: "http://foo.com", @@ -3937,7 +3970,7 @@ class EndpointResolverTest: XCTestCase { } /// vanilla virtual addressing@us-west-2 - func testResolve145() throws { + func testResolve146() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -3969,7 +4002,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing + dualstack@us-west-2 - func testResolve146() throws { + func testResolve147() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4001,7 +4034,7 @@ class EndpointResolverTest: XCTestCase { } /// accelerate + dualstack@us-west-2 - func testResolve147() throws { + func testResolve148() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket-name", @@ -4033,7 +4066,7 @@ class EndpointResolverTest: XCTestCase { } /// accelerate (dualstack=false)@us-west-2 - func testResolve148() throws { + func testResolve149() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket-name", @@ -4065,7 +4098,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing + fips@us-west-2 - func testResolve149() throws { + func testResolve150() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4097,7 +4130,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing + dualstack + fips@us-west-2 - func testResolve150() throws { + func testResolve151() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4129,7 +4162,7 @@ class EndpointResolverTest: XCTestCase { } /// accelerate + fips = error@us-west-2 - func testResolve151() throws { + func testResolve152() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket-name", @@ -4151,7 +4184,7 @@ class EndpointResolverTest: XCTestCase { } /// vanilla virtual addressing@cn-north-1 - func testResolve152() throws { + func testResolve153() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4183,7 +4216,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing + dualstack@cn-north-1 - func testResolve153() throws { + func testResolve154() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4215,7 +4248,7 @@ class EndpointResolverTest: XCTestCase { } /// accelerate (dualstack=false)@cn-north-1 - func testResolve154() throws { + func testResolve155() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket-name", @@ -4237,7 +4270,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing + fips@cn-north-1 - func testResolve155() throws { + func testResolve156() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4259,7 +4292,7 @@ class EndpointResolverTest: XCTestCase { } /// vanilla virtual addressing@af-south-1 - func testResolve156() throws { + func testResolve157() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4291,7 +4324,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing + dualstack@af-south-1 - func testResolve157() throws { + func testResolve158() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4323,7 +4356,7 @@ class EndpointResolverTest: XCTestCase { } /// accelerate + dualstack@af-south-1 - func testResolve158() throws { + func testResolve159() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket-name", @@ -4355,7 +4388,7 @@ class EndpointResolverTest: XCTestCase { } /// accelerate (dualstack=false)@af-south-1 - func testResolve159() throws { + func testResolve160() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket-name", @@ -4387,7 +4420,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing + fips@af-south-1 - func testResolve160() throws { + func testResolve161() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4419,7 +4452,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing + dualstack + fips@af-south-1 - func testResolve161() throws { + func testResolve162() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4451,7 +4484,7 @@ class EndpointResolverTest: XCTestCase { } /// accelerate + fips = error@af-south-1 - func testResolve162() throws { + func testResolve163() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket-name", @@ -4473,7 +4506,7 @@ class EndpointResolverTest: XCTestCase { } /// vanilla path style@us-west-2 - func testResolve163() throws { + func testResolve164() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4505,7 +4538,7 @@ class EndpointResolverTest: XCTestCase { } /// fips@us-gov-west-2, bucket is not S3-dns-compatible (subdomains) - func testResolve164() throws { + func testResolve165() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket.with.dots", @@ -4536,7 +4569,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + accelerate = error@us-west-2 - func testResolve165() throws { + func testResolve166() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket-name", @@ -4558,7 +4591,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + dualstack@us-west-2 - func testResolve166() throws { + func testResolve167() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4590,7 +4623,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + arn is error@us-west-2 - func testResolve167() throws { + func testResolve168() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:PARTITION:s3-outposts:REGION:123456789012:outpost:op-01234567890123456:bucket:mybucket", @@ -4612,7 +4645,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + invalid DNS name@us-west-2 - func testResolve168() throws { + func testResolve169() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "99a_b", @@ -4644,7 +4677,7 @@ class EndpointResolverTest: XCTestCase { } /// no path style + invalid DNS name@us-west-2 - func testResolve169() throws { + func testResolve170() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "99a_b", @@ -4675,7 +4708,7 @@ class EndpointResolverTest: XCTestCase { } /// vanilla path style@cn-north-1 - func testResolve170() throws { + func testResolve171() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4707,7 +4740,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + fips@cn-north-1 - func testResolve171() throws { + func testResolve172() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4729,7 +4762,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + accelerate = error@cn-north-1 - func testResolve172() throws { + func testResolve173() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket-name", @@ -4751,7 +4784,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + dualstack@cn-north-1 - func testResolve173() throws { + func testResolve174() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4783,7 +4816,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + arn is error@cn-north-1 - func testResolve174() throws { + func testResolve175() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:PARTITION:s3-outposts:REGION:123456789012:outpost:op-01234567890123456:bucket:mybucket", @@ -4805,7 +4838,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + invalid DNS name@cn-north-1 - func testResolve175() throws { + func testResolve176() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "99a_b", @@ -4837,7 +4870,7 @@ class EndpointResolverTest: XCTestCase { } /// no path style + invalid DNS name@cn-north-1 - func testResolve176() throws { + func testResolve177() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "99a_b", @@ -4868,7 +4901,7 @@ class EndpointResolverTest: XCTestCase { } /// vanilla path style@af-south-1 - func testResolve177() throws { + func testResolve178() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4900,7 +4933,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + fips@af-south-1 - func testResolve178() throws { + func testResolve179() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4932,7 +4965,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + accelerate = error@af-south-1 - func testResolve179() throws { + func testResolve180() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket-name", @@ -4954,7 +4987,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + dualstack@af-south-1 - func testResolve180() throws { + func testResolve181() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -4986,7 +5019,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + arn is error@af-south-1 - func testResolve181() throws { + func testResolve182() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:PARTITION:s3-outposts:REGION:123456789012:outpost:op-01234567890123456:bucket:mybucket", @@ -5008,7 +5041,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + invalid DNS name@af-south-1 - func testResolve182() throws { + func testResolve183() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "99a_b", @@ -5040,7 +5073,7 @@ class EndpointResolverTest: XCTestCase { } /// no path style + invalid DNS name@af-south-1 - func testResolve183() throws { + func testResolve184() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "99a_b", @@ -5071,7 +5104,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing + private link@us-west-2 - func testResolve184() throws { + func testResolve185() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -5104,7 +5137,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + private link@us-west-2 - func testResolve185() throws { + func testResolve186() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -5137,7 +5170,7 @@ class EndpointResolverTest: XCTestCase { } /// SDK::Host + FIPS@us-west-2 - func testResolve186() throws { + func testResolve187() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -5160,7 +5193,7 @@ class EndpointResolverTest: XCTestCase { } /// SDK::Host + DualStack@us-west-2 - func testResolve187() throws { + func testResolve188() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -5183,7 +5216,7 @@ class EndpointResolverTest: XCTestCase { } /// SDK::HOST + accelerate@us-west-2 - func testResolve188() throws { + func testResolve189() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket-name", @@ -5206,7 +5239,7 @@ class EndpointResolverTest: XCTestCase { } /// SDK::Host + access point ARN@us-west-2 - func testResolve189() throws { + func testResolve190() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint", @@ -5239,7 +5272,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing + private link@cn-north-1 - func testResolve190() throws { + func testResolve191() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -5272,7 +5305,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + private link@cn-north-1 - func testResolve191() throws { + func testResolve192() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -5305,7 +5338,7 @@ class EndpointResolverTest: XCTestCase { } /// FIPS@cn-north-1 - func testResolve192() throws { + func testResolve193() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -5327,7 +5360,7 @@ class EndpointResolverTest: XCTestCase { } /// SDK::Host + DualStack@cn-north-1 - func testResolve193() throws { + func testResolve194() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -5350,7 +5383,7 @@ class EndpointResolverTest: XCTestCase { } /// SDK::HOST + accelerate@cn-north-1 - func testResolve194() throws { + func testResolve195() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket-name", @@ -5373,7 +5406,7 @@ class EndpointResolverTest: XCTestCase { } /// SDK::Host + access point ARN@cn-north-1 - func testResolve195() throws { + func testResolve196() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws-cn:s3:cn-north-1:123456789012:accesspoint:myendpoint", @@ -5406,7 +5439,7 @@ class EndpointResolverTest: XCTestCase { } /// virtual addressing + private link@af-south-1 - func testResolve196() throws { + func testResolve197() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -5439,7 +5472,7 @@ class EndpointResolverTest: XCTestCase { } /// path style + private link@af-south-1 - func testResolve197() throws { + func testResolve198() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -5472,7 +5505,7 @@ class EndpointResolverTest: XCTestCase { } /// SDK::Host + FIPS@af-south-1 - func testResolve198() throws { + func testResolve199() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -5495,7 +5528,7 @@ class EndpointResolverTest: XCTestCase { } /// SDK::Host + DualStack@af-south-1 - func testResolve199() throws { + func testResolve200() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", @@ -5518,7 +5551,7 @@ class EndpointResolverTest: XCTestCase { } /// SDK::HOST + accelerate@af-south-1 - func testResolve200() throws { + func testResolve201() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "bucket-name", @@ -5541,7 +5574,7 @@ class EndpointResolverTest: XCTestCase { } /// SDK::Host + access point ARN@af-south-1 - func testResolve201() throws { + func testResolve202() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3:af-south-1:123456789012:accesspoint:myendpoint", @@ -5574,7 +5607,7 @@ class EndpointResolverTest: XCTestCase { } /// vanilla access point arn@us-west-2 - func testResolve202() throws { + func testResolve203() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint", @@ -5606,7 +5639,7 @@ class EndpointResolverTest: XCTestCase { } /// access point arn + FIPS@us-west-2 - func testResolve203() throws { + func testResolve204() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint", @@ -5638,7 +5671,7 @@ class EndpointResolverTest: XCTestCase { } /// access point arn + accelerate = error@us-west-2 - func testResolve204() throws { + func testResolve205() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint", @@ -5660,7 +5693,7 @@ class EndpointResolverTest: XCTestCase { } /// access point arn + FIPS + DualStack@us-west-2 - func testResolve205() throws { + func testResolve206() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint", @@ -5692,7 +5725,7 @@ class EndpointResolverTest: XCTestCase { } /// vanilla access point arn@cn-north-1 - func testResolve206() throws { + func testResolve207() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws-cn:s3:cn-north-1:123456789012:accesspoint:myendpoint", @@ -5724,7 +5757,7 @@ class EndpointResolverTest: XCTestCase { } /// access point arn + FIPS@cn-north-1 - func testResolve207() throws { + func testResolve208() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws-cn:s3:cn-north-1:123456789012:accesspoint:myendpoint", @@ -5746,7 +5779,7 @@ class EndpointResolverTest: XCTestCase { } /// access point arn + accelerate = error@cn-north-1 - func testResolve208() throws { + func testResolve209() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "arn:aws-cn:s3:cn-north-1:123456789012:accesspoint:myendpoint", @@ -5768,7 +5801,7 @@ class EndpointResolverTest: XCTestCase { } /// access point arn + FIPS + DualStack@cn-north-1 - func testResolve209() throws { + func testResolve210() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws-cn:s3:cn-north-1:123456789012:accesspoint:myendpoint", @@ -5790,7 +5823,7 @@ class EndpointResolverTest: XCTestCase { } /// vanilla access point arn@af-south-1 - func testResolve210() throws { + func testResolve211() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3:af-south-1:123456789012:accesspoint:myendpoint", @@ -5822,7 +5855,7 @@ class EndpointResolverTest: XCTestCase { } /// access point arn + FIPS@af-south-1 - func testResolve211() throws { + func testResolve212() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3:af-south-1:123456789012:accesspoint:myendpoint", @@ -5854,7 +5887,7 @@ class EndpointResolverTest: XCTestCase { } /// access point arn + accelerate = error@af-south-1 - func testResolve212() throws { + func testResolve213() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "arn:aws:s3:af-south-1:123456789012:accesspoint:myendpoint", @@ -5876,7 +5909,7 @@ class EndpointResolverTest: XCTestCase { } /// access point arn + FIPS + DualStack@af-south-1 - func testResolve213() throws { + func testResolve214() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3:af-south-1:123456789012:accesspoint:myendpoint", @@ -5908,7 +5941,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 outposts vanilla test - func testResolve214() throws { + func testResolve215() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-outposts:us-west-2:123456789012:outpost/op-01234567890123456/accesspoint/reports", @@ -5947,7 +5980,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 outposts custom endpoint - func testResolve215() throws { + func testResolve216() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-outposts:us-west-2:123456789012:outpost/op-01234567890123456/accesspoint/reports", @@ -5987,7 +6020,7 @@ class EndpointResolverTest: XCTestCase { } /// outposts arn with region mismatch and UseArnRegion=false - func testResolve216() throws { + func testResolve217() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-outposts:us-east-1:123456789012:outpost:op-01234567890123456:accesspoint:myaccesspoint", @@ -6010,7 +6043,7 @@ class EndpointResolverTest: XCTestCase { } /// outposts arn with region mismatch, custom region and UseArnRegion=false - func testResolve217() throws { + func testResolve218() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-outposts:us-east-1:123456789012:outpost:op-01234567890123456:accesspoint:myaccesspoint", @@ -6034,7 +6067,7 @@ class EndpointResolverTest: XCTestCase { } /// outposts arn with region mismatch and UseArnRegion=true - func testResolve218() throws { + func testResolve219() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-outposts:us-east-1:123456789012:outpost:op-01234567890123456:accesspoint:myaccesspoint", @@ -6075,7 +6108,7 @@ class EndpointResolverTest: XCTestCase { } /// outposts arn with region mismatch and UseArnRegion unset - func testResolve219() throws { + func testResolve220() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-outposts:us-east-1:123456789012:outpost:op-01234567890123456:accesspoint:myaccesspoint", @@ -6115,7 +6148,7 @@ class EndpointResolverTest: XCTestCase { } /// outposts arn with partition mismatch and UseArnRegion=true - func testResolve220() throws { + func testResolve221() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-outposts:cn-north-1:123456789012:outpost:op-01234567890123456:accesspoint:myaccesspoint", @@ -6138,7 +6171,7 @@ class EndpointResolverTest: XCTestCase { } /// ARN with UseGlobalEndpoint and use-east-1 region uses the regional endpoint - func testResolve221() throws { + func testResolve222() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-outposts:us-east-1:123456789012:outpost/op-01234567890123456/accesspoint/reports", @@ -6178,7 +6211,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 outposts does not support dualstack - func testResolve222() throws { + func testResolve223() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-outposts:us-west-2:123456789012:outpost/op-01234567890123456/accesspoint/reports", @@ -6199,7 +6232,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 outposts does not support fips - func testResolve223() throws { + func testResolve224() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-outposts:us-west-2:123456789012:outpost/op-01234567890123456/accesspoint/reports", @@ -6220,7 +6253,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 outposts does not support accelerate - func testResolve224() throws { + func testResolve225() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "arn:aws:s3-outposts:us-west-2:123456789012:outpost/op-01234567890123456/accesspoint/reports", @@ -6241,7 +6274,7 @@ class EndpointResolverTest: XCTestCase { } /// validates against subresource - func testResolve225() throws { + func testResolve226() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-outposts:us-west-2:123456789012:outpost:op-01234567890123456:accesspoint:mybucket:object:foo", @@ -6262,7 +6295,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda @us-east-1 - func testResolve226() throws { + func testResolve227() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-east-1:123456789012:accesspoint/mybanner", @@ -6294,7 +6327,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda @us-west-2 - func testResolve227() throws { + func testResolve228() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-west-2:123456789012:accesspoint/mybanner", @@ -6326,7 +6359,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda, colon resource deliminator @us-west-2 - func testResolve228() throws { + func testResolve229() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-west-2:123456789012:accesspoint:mybanner", @@ -6358,7 +6391,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda @us-east-1, client region us-west-2, useArnRegion=true - func testResolve229() throws { + func testResolve230() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-east-1:123456789012:accesspoint/mybanner", @@ -6390,7 +6423,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda @us-east-1, client region s3-external-1, useArnRegion=true - func testResolve230() throws { + func testResolve231() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-east-1:123456789012:accesspoint/mybanner", @@ -6422,7 +6455,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda @us-east-1, client region s3-external-1, useArnRegion=false - func testResolve231() throws { + func testResolve232() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-east-1:123456789012:accesspoint/mybanner", @@ -6444,7 +6477,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda @us-east-1, client region aws-global, useArnRegion=true - func testResolve232() throws { + func testResolve233() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-east-1:123456789012:accesspoint/mybanner", @@ -6476,7 +6509,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda @us-east-1, client region aws-global, useArnRegion=false - func testResolve233() throws { + func testResolve234() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-east-1:123456789012:accesspoint/mybanner", @@ -6498,7 +6531,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda @cn-north-1, client region us-west-2 (cross partition), useArnRegion=true - func testResolve234() throws { + func testResolve235() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws-cn:s3-object-lambda:cn-north-1:123456789012:accesspoint/mybanner", @@ -6520,7 +6553,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda with dualstack - func testResolve235() throws { + func testResolve236() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-west-2:123456789012:accesspoint/mybanner", @@ -6542,7 +6575,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda @us-gov-east-1 - func testResolve236() throws { + func testResolve237() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws-us-gov:s3-object-lambda:us-gov-east-1:123456789012:accesspoint/mybanner", @@ -6574,7 +6607,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda @us-gov-east-1, with fips - func testResolve237() throws { + func testResolve238() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws-us-gov:s3-object-lambda:us-gov-east-1:123456789012:accesspoint/mybanner", @@ -6606,7 +6639,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda @cn-north-1, with fips - func testResolve238() throws { + func testResolve239() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws-cn:s3-object-lambda:cn-north-1:123456789012:accesspoint/mybanner", @@ -6628,7 +6661,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda with accelerate - func testResolve239() throws { + func testResolve240() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "arn:aws:s3-object-lambda:us-west-2:123456789012:accesspoint/mybanner", @@ -6650,7 +6683,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda with invalid arn - bad service and someresource - func testResolve240() throws { + func testResolve241() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:sqs:us-west-2:123456789012:someresource", @@ -6672,7 +6705,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda with invalid arn - invalid resource - func testResolve241() throws { + func testResolve242() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-west-2:123456789012:bucket_name:mybucket", @@ -6694,7 +6727,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda with invalid arn - missing region - func testResolve242() throws { + func testResolve243() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda::123456789012:accesspoint/mybanner", @@ -6716,7 +6749,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda with invalid arn - missing account-id - func testResolve243() throws { + func testResolve244() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-west-2::accesspoint/mybanner", @@ -6738,7 +6771,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda with invalid arn - account id contains invalid characters - func testResolve244() throws { + func testResolve245() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-west-2:123.45678.9012:accesspoint:mybucket", @@ -6760,7 +6793,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda with invalid arn - missing access point name - func testResolve245() throws { + func testResolve246() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-west-2:123456789012:accesspoint", @@ -6782,7 +6815,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda with invalid arn - access point name contains invalid character: * - func testResolve246() throws { + func testResolve247() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-west-2:123456789012:accesspoint:*", @@ -6804,7 +6837,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda with invalid arn - access point name contains invalid character: . - func testResolve247() throws { + func testResolve248() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-west-2:123456789012:accesspoint:my.bucket", @@ -6826,7 +6859,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda with invalid arn - access point name contains sub resources - func testResolve248() throws { + func testResolve249() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-west-2:123456789012:accesspoint:mybucket:object:foo", @@ -6848,7 +6881,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda with custom endpoint - func testResolve249() throws { + func testResolve250() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-west-2:123456789012:accesspoint/mybanner", @@ -6881,7 +6914,7 @@ class EndpointResolverTest: XCTestCase { } /// object lambda arn with region mismatch and UseArnRegion=false - func testResolve250() throws { + func testResolve251() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "arn:aws:s3-object-lambda:us-east-1:123456789012:accesspoint/mybanner", @@ -6904,7 +6937,7 @@ class EndpointResolverTest: XCTestCase { } /// WriteGetObjectResponse @ us-west-2 - func testResolve251() throws { + func testResolve252() throws { let endpointParams = EndpointParams( accelerate: false, region: "us-west-2", @@ -6935,7 +6968,7 @@ class EndpointResolverTest: XCTestCase { } /// WriteGetObjectResponse with custom endpoint - func testResolve252() throws { + func testResolve253() throws { let endpointParams = EndpointParams( accelerate: false, endpoint: "https://my-endpoint.com", @@ -6967,7 +7000,7 @@ class EndpointResolverTest: XCTestCase { } /// WriteGetObjectResponse @ us-east-1 - func testResolve253() throws { + func testResolve254() throws { let endpointParams = EndpointParams( accelerate: false, region: "us-east-1", @@ -6998,7 +7031,7 @@ class EndpointResolverTest: XCTestCase { } /// WriteGetObjectResponse with fips - func testResolve254() throws { + func testResolve255() throws { let endpointParams = EndpointParams( accelerate: false, region: "us-east-1", @@ -7029,7 +7062,7 @@ class EndpointResolverTest: XCTestCase { } /// WriteGetObjectResponse with dualstack - func testResolve255() throws { + func testResolve256() throws { let endpointParams = EndpointParams( accelerate: false, region: "us-east-1", @@ -7050,7 +7083,7 @@ class EndpointResolverTest: XCTestCase { } /// WriteGetObjectResponse with accelerate - func testResolve256() throws { + func testResolve257() throws { let endpointParams = EndpointParams( accelerate: true, region: "us-east-1", @@ -7071,7 +7104,7 @@ class EndpointResolverTest: XCTestCase { } /// WriteGetObjectResponse with fips in CN - func testResolve257() throws { + func testResolve258() throws { let endpointParams = EndpointParams( accelerate: false, region: "cn-north-1", @@ -7092,7 +7125,7 @@ class EndpointResolverTest: XCTestCase { } /// WriteGetObjectResponse with invalid partition - func testResolve258() throws { + func testResolve259() throws { let endpointParams = EndpointParams( accelerate: false, region: "not a valid DNS name", @@ -7113,7 +7146,7 @@ class EndpointResolverTest: XCTestCase { } /// WriteGetObjectResponse with an unknown partition - func testResolve259() throws { + func testResolve260() throws { let endpointParams = EndpointParams( accelerate: false, region: "us-east.special", @@ -7144,7 +7177,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 Outposts bucketAlias Real Outpost Prod us-west-1 - func testResolve260() throws { + func testResolve261() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "test-accessp-o0b1d075431d83bebde8xz5w8ijx1qzlbp3i3kuse10--op-s3", @@ -7183,7 +7216,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 Outposts bucketAlias Real Outpost Prod ap-east-1 - func testResolve261() throws { + func testResolve262() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "test-accessp-o0b1d075431d83bebde8xz5w8ijx1qzlbp3i3kuse10--op-s3", @@ -7222,7 +7255,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 Outposts bucketAlias Ec2 Outpost Prod us-east-1 - func testResolve262() throws { + func testResolve263() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "test-accessp-e0000075431d83bebde8xz5w8ijx1qzlbp3i3kuse10--op-s3", @@ -7261,7 +7294,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 Outposts bucketAlias Ec2 Outpost Prod me-south-1 - func testResolve263() throws { + func testResolve264() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "test-accessp-e0000075431d83bebde8xz5w8ijx1qzlbp3i3kuse10--op-s3", @@ -7300,7 +7333,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 Outposts bucketAlias Real Outpost Beta - func testResolve264() throws { + func testResolve265() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "test-accessp-o0b1d075431d83bebde8xz5w8ijx1qzlbp3i3kbeta0--op-s3", @@ -7340,7 +7373,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 Outposts bucketAlias Ec2 Outpost Beta - func testResolve265() throws { + func testResolve266() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "161743052723-e00000136899934034jeahy1t8gpzpbwjj8kb7beta0--op-s3", @@ -7380,7 +7413,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 Outposts bucketAlias - No endpoint set for beta - func testResolve266() throws { + func testResolve267() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "test-accessp-o0b1d075431d83bebde8xz5w8ijx1qzlbp3i3kbeta0--op-s3", @@ -7401,7 +7434,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 Outposts bucketAlias Invalid hardware type - func testResolve267() throws { + func testResolve268() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "test-accessp-h0000075431d83bebde8xz5w8ijx1qzlbp3i3kuse10--op-s3", @@ -7422,7 +7455,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 Outposts bucketAlias Special character in Outpost Arn - func testResolve268() throws { + func testResolve269() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "test-accessp-o00000754%1d83bebde8xz5w8ijx1qzlbp3i3kuse10--op-s3", @@ -7443,7 +7476,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 Outposts bucketAlias - No endpoint set for beta - func testResolve269() throws { + func testResolve270() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "test-accessp-e0b1d075431d83bebde8xz5w8ijx1qzlbp3i3ebeta0--op-s3", @@ -7464,7 +7497,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 Snow with bucket - func testResolve270() throws { + func testResolve271() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucketName", @@ -7496,7 +7529,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 Snow without bucket - func testResolve271() throws { + func testResolve272() throws { let endpointParams = EndpointParams( accelerate: false, endpoint: "https://10.0.1.12:433", @@ -7527,7 +7560,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 Snow no port - func testResolve272() throws { + func testResolve273() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucketName", @@ -7559,7 +7592,7 @@ class EndpointResolverTest: XCTestCase { } /// S3 Snow dns endpoint - func testResolve273() throws { + func testResolve274() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucketName", @@ -7591,7 +7624,7 @@ class EndpointResolverTest: XCTestCase { } /// Data Plane with short AZ - func testResolve274() throws { + func testResolve275() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--use1-az1--x-s3", @@ -7624,7 +7657,7 @@ class EndpointResolverTest: XCTestCase { } /// Data Plane with short AZ fips - func testResolve275() throws { + func testResolve276() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--use1-az1--x-s3", @@ -7657,7 +7690,7 @@ class EndpointResolverTest: XCTestCase { } /// Data Plane with long AZ - func testResolve276() throws { + func testResolve277() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--apne1-az1--x-s3", @@ -7690,7 +7723,7 @@ class EndpointResolverTest: XCTestCase { } /// Data Plane with long AZ fips - func testResolve277() throws { + func testResolve278() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--apne1-az1--x-s3", @@ -7723,7 +7756,7 @@ class EndpointResolverTest: XCTestCase { } /// Control plane with short AZ bucket - func testResolve278() throws { + func testResolve279() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--use1-az1--x-s3", @@ -7757,7 +7790,7 @@ class EndpointResolverTest: XCTestCase { } /// Control plane with short AZ bucket and fips - func testResolve279() throws { + func testResolve280() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--use1-az1--x-s3", @@ -7791,7 +7824,7 @@ class EndpointResolverTest: XCTestCase { } /// Control plane without bucket - func testResolve280() throws { + func testResolve281() throws { let endpointParams = EndpointParams( accelerate: false, disableS3ExpressSessionAuth: false, @@ -7824,7 +7857,7 @@ class EndpointResolverTest: XCTestCase { } /// Control plane without bucket and fips - func testResolve281() throws { + func testResolve282() throws { let endpointParams = EndpointParams( accelerate: false, disableS3ExpressSessionAuth: false, @@ -7857,7 +7890,7 @@ class EndpointResolverTest: XCTestCase { } /// Data Plane sigv4 auth with short AZ - func testResolve282() throws { + func testResolve283() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--usw2-az1--x-s3", @@ -7890,7 +7923,7 @@ class EndpointResolverTest: XCTestCase { } /// Data Plane sigv4 auth with short AZ fips - func testResolve283() throws { + func testResolve284() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--usw2-az1--x-s3", @@ -7923,7 +7956,7 @@ class EndpointResolverTest: XCTestCase { } /// Data Plane sigv4 auth with long AZ - func testResolve284() throws { + func testResolve285() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--apne1-az1--x-s3", @@ -7957,7 +7990,7 @@ class EndpointResolverTest: XCTestCase { } /// Data Plane sigv4 auth with long AZ fips - func testResolve285() throws { + func testResolve286() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--apne1-az1--x-s3", @@ -7991,7 +8024,7 @@ class EndpointResolverTest: XCTestCase { } /// Control Plane host override - func testResolve286() throws { + func testResolve287() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--usw2-az1--x-s3", @@ -8026,7 +8059,7 @@ class EndpointResolverTest: XCTestCase { } /// Control Plane host override no bucket - func testResolve287() throws { + func testResolve288() throws { let endpointParams = EndpointParams( accelerate: false, disableS3ExpressSessionAuth: true, @@ -8060,7 +8093,7 @@ class EndpointResolverTest: XCTestCase { } /// Data plane host override non virtual session auth - func testResolve288() throws { + func testResolve289() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--usw2-az1--x-s3", @@ -8093,7 +8126,7 @@ class EndpointResolverTest: XCTestCase { } /// Control Plane host override ip - func testResolve289() throws { + func testResolve290() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--usw2-az1--x-s3", @@ -8128,7 +8161,7 @@ class EndpointResolverTest: XCTestCase { } /// Data plane host override - func testResolve290() throws { + func testResolve291() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--usw2-az1--x-s3", @@ -8161,7 +8194,7 @@ class EndpointResolverTest: XCTestCase { } /// bad format error - func testResolve291() throws { + func testResolve292() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--usaz1--x-s3", @@ -8183,7 +8216,7 @@ class EndpointResolverTest: XCTestCase { } /// bad format error no session auth - func testResolve292() throws { + func testResolve293() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--usaz1--x-s3", @@ -8206,7 +8239,7 @@ class EndpointResolverTest: XCTestCase { } /// dual-stack error - func testResolve293() throws { + func testResolve294() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "mybucket--use1-az1--x-s3", @@ -8228,7 +8261,7 @@ class EndpointResolverTest: XCTestCase { } /// accelerate error - func testResolve294() throws { + func testResolve295() throws { let endpointParams = EndpointParams( accelerate: true, bucket: "mybucket--use1-az1--x-s3", @@ -8250,7 +8283,7 @@ class EndpointResolverTest: XCTestCase { } /// Data plane bucket format error - func testResolve295() throws { + func testResolve296() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "my.bucket--use1-az1--x-s3", @@ -8272,7 +8305,7 @@ class EndpointResolverTest: XCTestCase { } /// host override data plane bucket error session auth - func testResolve296() throws { + func testResolve297() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "my.bucket--usw2-az1--x-s3", @@ -8294,7 +8327,7 @@ class EndpointResolverTest: XCTestCase { } /// host override data plane bucket error - func testResolve297() throws { + func testResolve298() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "my.bucket--usw2-az1--x-s3", diff --git a/Sources/Services/AWSSESv2/Sources/AWSSESv2/Models.swift b/Sources/Services/AWSSESv2/Sources/AWSSESv2/Models.swift index 994bdfb024b..38bab12fa27 100644 --- a/Sources/Services/AWSSESv2/Sources/AWSSESv2/Models.swift +++ b/Sources/Services/AWSSESv2/Sources/AWSSESv2/Models.swift @@ -1787,6 +1787,23 @@ public struct CreateConfigurationSetOutput { public init() { } } +extension SESv2ClientTypes { + /// An object that defines an Amazon EventBridge destination for email events. You can use Amazon EventBridge to send notifications when certain email events occur. + public struct EventBridgeDestination { + /// The Amazon Resource Name (ARN) of the Amazon EventBridge bus to publish email events to. Only the default bus is supported. + /// This member is required. + public var eventBusArn: Swift.String? + + public init( + eventBusArn: Swift.String? = nil + ) + { + self.eventBusArn = eventBusArn + } + } + +} + extension SESv2ClientTypes { /// An object that defines an Amazon Kinesis Data Firehose destination for email events. You can use Amazon Kinesis Data Firehose to stream data to other services, such as Amazon S3 and Amazon Redshift. public struct KinesisFirehoseDestination { @@ -1880,7 +1897,7 @@ extension SESv2ClientTypes { } extension SESv2ClientTypes { - /// An object that defines an Amazon SNS destination for email events. You can use Amazon SNS to send notification when certain email events occur. + /// An object that defines an Amazon SNS destination for email events. You can use Amazon SNS to send notifications when certain email events occur. public struct SnsDestination { /// The Amazon Resource Name (ARN) of the Amazon SNS topic to publish email events to. For more information about Amazon SNS topics, see the [Amazon SNS Developer Guide](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html). /// This member is required. @@ -1903,18 +1920,21 @@ extension SESv2ClientTypes { public var cloudWatchDestination: SESv2ClientTypes.CloudWatchDestination? /// If true, the event destination is enabled. When the event destination is enabled, the specified event types are sent to the destinations in this EventDestinationDefinition. If false, the event destination is disabled. When the event destination is disabled, events aren't sent to the specified destinations. public var enabled: Swift.Bool + /// An object that defines an Amazon EventBridge destination for email events. You can use Amazon EventBridge to send notifications when certain email events occur. + public var eventBridgeDestination: SESv2ClientTypes.EventBridgeDestination? /// An object that defines an Amazon Kinesis Data Firehose destination for email events. You can use Amazon Kinesis Data Firehose to stream data to other services, such as Amazon S3 and Amazon Redshift. public var kinesisFirehoseDestination: SESv2ClientTypes.KinesisFirehoseDestination? /// An array that specifies which events the Amazon SES API v2 should send to the destinations in this EventDestinationDefinition. public var matchingEventTypes: [SESv2ClientTypes.EventType]? /// An object that defines an Amazon Pinpoint project destination for email events. You can send email event data to a Amazon Pinpoint project to view metrics using the Transactional Messaging dashboards that are built in to Amazon Pinpoint. For more information, see [Transactional Messaging Charts](https://docs.aws.amazon.com/pinpoint/latest/userguide/analytics-transactional-messages.html) in the Amazon Pinpoint User Guide. public var pinpointDestination: SESv2ClientTypes.PinpointDestination? - /// An object that defines an Amazon SNS destination for email events. You can use Amazon SNS to send notification when certain email events occur. + /// An object that defines an Amazon SNS destination for email events. You can use Amazon SNS to send notifications when certain email events occur. public var snsDestination: SESv2ClientTypes.SnsDestination? public init( cloudWatchDestination: SESv2ClientTypes.CloudWatchDestination? = nil, enabled: Swift.Bool = false, + eventBridgeDestination: SESv2ClientTypes.EventBridgeDestination? = nil, kinesisFirehoseDestination: SESv2ClientTypes.KinesisFirehoseDestination? = nil, matchingEventTypes: [SESv2ClientTypes.EventType]? = nil, pinpointDestination: SESv2ClientTypes.PinpointDestination? = nil, @@ -1923,6 +1943,7 @@ extension SESv2ClientTypes { { self.cloudWatchDestination = cloudWatchDestination self.enabled = enabled + self.eventBridgeDestination = eventBridgeDestination self.kinesisFirehoseDestination = kinesisFirehoseDestination self.matchingEventTypes = matchingEventTypes self.pinpointDestination = pinpointDestination @@ -3995,6 +4016,8 @@ extension SESv2ClientTypes { public var cloudWatchDestination: SESv2ClientTypes.CloudWatchDestination? /// If true, the event destination is enabled. When the event destination is enabled, the specified event types are sent to the destinations in this EventDestinationDefinition. If false, the event destination is disabled. When the event destination is disabled, events aren't sent to the specified destinations. public var enabled: Swift.Bool + /// An object that defines an Amazon EventBridge destination for email events. You can use Amazon EventBridge to send notifications when certain email events occur. + public var eventBridgeDestination: SESv2ClientTypes.EventBridgeDestination? /// An object that defines an Amazon Kinesis Data Firehose destination for email events. You can use Amazon Kinesis Data Firehose to stream data to other services, such as Amazon S3 and Amazon Redshift. public var kinesisFirehoseDestination: SESv2ClientTypes.KinesisFirehoseDestination? /// The types of events that Amazon SES sends to the specified event destinations. @@ -4025,12 +4048,13 @@ extension SESv2ClientTypes { public var name: Swift.String? /// An object that defines an Amazon Pinpoint project destination for email events. You can send email event data to a Amazon Pinpoint project to view metrics using the Transactional Messaging dashboards that are built in to Amazon Pinpoint. For more information, see [Transactional Messaging Charts](https://docs.aws.amazon.com/pinpoint/latest/userguide/analytics-transactional-messages.html) in the Amazon Pinpoint User Guide. public var pinpointDestination: SESv2ClientTypes.PinpointDestination? - /// An object that defines an Amazon SNS destination for email events. You can use Amazon SNS to send notification when certain email events occur. + /// An object that defines an Amazon SNS destination for email events. You can use Amazon SNS to send notifications when certain email events occur. public var snsDestination: SESv2ClientTypes.SnsDestination? public init( cloudWatchDestination: SESv2ClientTypes.CloudWatchDestination? = nil, enabled: Swift.Bool = false, + eventBridgeDestination: SESv2ClientTypes.EventBridgeDestination? = nil, kinesisFirehoseDestination: SESv2ClientTypes.KinesisFirehoseDestination? = nil, matchingEventTypes: [SESv2ClientTypes.EventType]? = nil, name: Swift.String? = nil, @@ -4040,6 +4064,7 @@ extension SESv2ClientTypes { { self.cloudWatchDestination = cloudWatchDestination self.enabled = enabled + self.eventBridgeDestination = eventBridgeDestination self.kinesisFirehoseDestination = kinesisFirehoseDestination self.matchingEventTypes = matchingEventTypes self.name = name @@ -11935,6 +11960,7 @@ extension SESv2ClientTypes.EventDestination { value.kinesisFirehoseDestination = try reader["KinesisFirehoseDestination"].readIfPresent(with: SESv2ClientTypes.KinesisFirehoseDestination.read(from:)) value.cloudWatchDestination = try reader["CloudWatchDestination"].readIfPresent(with: SESv2ClientTypes.CloudWatchDestination.read(from:)) value.snsDestination = try reader["SnsDestination"].readIfPresent(with: SESv2ClientTypes.SnsDestination.read(from:)) + value.eventBridgeDestination = try reader["EventBridgeDestination"].readIfPresent(with: SESv2ClientTypes.EventBridgeDestination.read(from:)) value.pinpointDestination = try reader["PinpointDestination"].readIfPresent(with: SESv2ClientTypes.PinpointDestination.read(from:)) return value } @@ -11955,6 +11981,21 @@ extension SESv2ClientTypes.PinpointDestination { } } +extension SESv2ClientTypes.EventBridgeDestination { + + static func write(value: SESv2ClientTypes.EventBridgeDestination?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["EventBusArn"].write(value.eventBusArn) + } + + static func read(from reader: SmithyJSON.Reader) throws -> SESv2ClientTypes.EventBridgeDestination { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = SESv2ClientTypes.EventBridgeDestination() + value.eventBusArn = try reader["EventBusArn"].readIfPresent() + return value + } +} + extension SESv2ClientTypes.SnsDestination { static func write(value: SESv2ClientTypes.SnsDestination?, to writer: SmithyJSON.Writer) throws { @@ -12749,6 +12790,7 @@ extension SESv2ClientTypes.EventDestinationDefinition { guard let value else { return } try writer["CloudWatchDestination"].write(value.cloudWatchDestination, with: SESv2ClientTypes.CloudWatchDestination.write(value:to:)) try writer["Enabled"].write(value.enabled) + try writer["EventBridgeDestination"].write(value.eventBridgeDestination, with: SESv2ClientTypes.EventBridgeDestination.write(value:to:)) try writer["KinesisFirehoseDestination"].write(value.kinesisFirehoseDestination, with: SESv2ClientTypes.KinesisFirehoseDestination.write(value:to:)) try writer["MatchingEventTypes"].writeList(value.matchingEventTypes, memberWritingClosure: SmithyReadWrite.WritingClosureBox().write(value:to:), memberNodeInfo: "member", isFlattened: false) try writer["PinpointDestination"].write(value.pinpointDestination, with: SESv2ClientTypes.PinpointDestination.write(value:to:)) diff --git a/Sources/Services/AWSSESv2/Sources/AWSSESv2/SESv2Client.swift b/Sources/Services/AWSSESv2/Sources/AWSSESv2/SESv2Client.swift index a11875113a6..5095b7c76ab 100644 --- a/Sources/Services/AWSSESv2/Sources/AWSSESv2/SESv2Client.swift +++ b/Sources/Services/AWSSESv2/Sources/AWSSESv2/SESv2Client.swift @@ -309,7 +309,7 @@ extension SESv2Client { /// Performs the `CreateConfigurationSetEventDestination` operation on the `SimpleEmailService_v2` service. /// - /// Create an event destination. Events include message sends, deliveries, opens, clicks, bounces, and complaints. Event destinations are places that you can send information about these events to. For example, you can send event data to Amazon SNS to receive notifications when you receive bounces or complaints, or you can use Amazon Kinesis Data Firehose to stream data to Amazon S3 for long-term storage. A single configuration set can include more than one event destination. + /// Create an event destination. Events include message sends, deliveries, opens, clicks, bounces, and complaints. Event destinations are places that you can send information about these events to. For example, you can send event data to Amazon EventBridge and associate a rule to send the event to the specified target. A single configuration set can include more than one event destination. /// /// - Parameter CreateConfigurationSetEventDestinationInput : A request to add an event destination to a configuration set. /// @@ -928,7 +928,7 @@ extension SESv2Client { /// Performs the `DeleteConfigurationSetEventDestination` operation on the `SimpleEmailService_v2` service. /// - /// Delete an event destination. Events include message sends, deliveries, opens, clicks, bounces, and complaints. Event destinations are places that you can send information about these events to. For example, you can send event data to Amazon SNS to receive notifications when you receive bounces or complaints, or you can use Amazon Kinesis Data Firehose to stream data to Amazon S3 for long-term storage. + /// Delete an event destination. Events include message sends, deliveries, opens, clicks, bounces, and complaints. Event destinations are places that you can send information about these events to. For example, you can send event data to Amazon EventBridge and associate a rule to send the event to the specified target. /// /// - Parameter DeleteConfigurationSetEventDestinationInput : A request to delete an event destination from a configuration set. /// @@ -1495,7 +1495,7 @@ extension SESv2Client { /// Performs the `GetConfigurationSetEventDestinations` operation on the `SimpleEmailService_v2` service. /// - /// Retrieve a list of event destinations that are associated with a configuration set. Events include message sends, deliveries, opens, clicks, bounces, and complaints. Event destinations are places that you can send information about these events to. For example, you can send event data to Amazon SNS to receive notifications when you receive bounces or complaints, or you can use Amazon Kinesis Data Firehose to stream data to Amazon S3 for long-term storage. + /// Retrieve a list of event destinations that are associated with a configuration set. Events include message sends, deliveries, opens, clicks, bounces, and complaints. Event destinations are places that you can send information about these events to. For example, you can send event data to Amazon EventBridge and associate a rule to send the event to the specified target. /// /// - Parameter GetConfigurationSetEventDestinationsInput : A request to obtain information about the event destinations for a configuration set. /// @@ -4395,7 +4395,7 @@ extension SESv2Client { /// Performs the `UpdateConfigurationSetEventDestination` operation on the `SimpleEmailService_v2` service. /// - /// Update the configuration of an event destination for a configuration set. Events include message sends, deliveries, opens, clicks, bounces, and complaints. Event destinations are places that you can send information about these events to. For example, you can send event data to Amazon SNS to receive notifications when you receive bounces or complaints, or you can use Amazon Kinesis Data Firehose to stream data to Amazon S3 for long-term storage. + /// Update the configuration of an event destination for a configuration set. Events include message sends, deliveries, opens, clicks, bounces, and complaints. Event destinations are places that you can send information about these events to. For example, you can send event data to Amazon EventBridge and associate a rule to send the event to the specified target. /// /// - Parameter UpdateConfigurationSetEventDestinationInput : A request to change the settings for an event destination for a configuration set. /// diff --git a/Sources/Services/AWSSNS/Sources/AWSSNS/Models.swift b/Sources/Services/AWSSNS/Sources/AWSSNS/Models.swift index d81ef82ca23..c54d0c42c4f 100644 --- a/Sources/Services/AWSSNS/Sources/AWSSNS/Models.swift +++ b/Sources/Services/AWSSNS/Sources/AWSSNS/Models.swift @@ -746,7 +746,7 @@ extension SNSClientTypes { /// Input for CreateTopic action. public struct CreateTopicInput { - /// A map of attributes with their corresponding values. The following lists the names, descriptions, and values of the special request parameters that the CreateTopic action uses: + /// A map of attributes with their corresponding values. The following lists names, descriptions, and values of the special request parameters that the CreateTopic action uses: /// /// * DeliveryPolicy – The policy that defines how Amazon SNS retries failed deliveries to HTTP/S endpoints. /// @@ -1125,16 +1125,16 @@ public struct GetSubscriptionAttributesOutput { /// * TopicArn – The topic ARN that the subscription is associated with. /// /// - /// The following attribute applies only to Amazon Kinesis Data Firehose delivery stream subscriptions: + /// The following attribute applies only to Amazon Data Firehose delivery stream subscriptions: /// /// * SubscriptionRoleArn – The ARN of the IAM role that has the following: /// - /// * Permission to write to the Kinesis Data Firehose delivery stream + /// * Permission to write to the Firehose delivery stream /// /// * Amazon SNS listed as a trusted entity /// /// - /// Specifying a valid ARN for this attribute is required for Kinesis Data Firehose delivery stream subscriptions. For more information, see [Fanout to Kinesis Data Firehose delivery streams](https://docs.aws.amazon.com/sns/latest/dg/sns-firehose-as-subscriber.html) in the Amazon SNS Developer Guide. + /// Specifying a valid ARN for this attribute is required for Firehose delivery stream subscriptions. For more information, see [Fanout to Firehose delivery streams](https://docs.aws.amazon.com/sns/latest/dg/sns-firehose-as-subscriber.html) in the Amazon SNS Developer Guide. public var attributes: [Swift.String: Swift.String]? public init( @@ -2087,7 +2087,7 @@ public struct PublishInput { public var messageStructure: Swift.String? /// The phone number to which you want to deliver an SMS message. Use E.164 format. If you don't specify a value for the PhoneNumber parameter, you must specify a value for the TargetArn or TopicArn parameters. public var phoneNumber: Swift.String? - /// Optional parameter to be used as the "Subject" line when the message is delivered to email endpoints. This field will also be included, if present, in the standard JSON messages delivered to other endpoints. Constraints: Subjects must be ASCII text that begins with a letter, number, or punctuation mark; must not include line breaks or control characters; and must be less than 100 characters long. + /// Optional parameter to be used as the "Subject" line when the message is delivered to email endpoints. This field will also be included, if present, in the standard JSON messages delivered to other endpoints. Constraints: Subjects must be UTF-8 text with no line breaks or control characters, and less than 100 characters long. public var subject: Swift.String? /// If you don't specify a value for the TargetArn parameter, you must specify a value for the PhoneNumber or TopicArn parameters. public var targetArn: Swift.String? @@ -2622,16 +2622,16 @@ public struct SetSubscriptionAttributesInput { /// * RedrivePolicy – When specified, sends undeliverable messages to the specified Amazon SQS dead-letter queue. Messages that can't be delivered due to client errors (for example, when the subscribed endpoint is unreachable) or server errors (for example, when the service that powers the subscribed endpoint becomes unavailable) are held in the dead-letter queue for further analysis or reprocessing. /// /// - /// The following attribute applies only to Amazon Kinesis Data Firehose delivery stream subscriptions: + /// The following attribute applies only to Amazon Data Firehose delivery stream subscriptions: /// /// * SubscriptionRoleArn – The ARN of the IAM role that has the following: /// - /// * Permission to write to the Kinesis Data Firehose delivery stream + /// * Permission to write to the Firehose delivery stream /// /// * Amazon SNS listed as a trusted entity /// /// - /// Specifying a valid ARN for this attribute is required for Kinesis Data Firehose delivery stream subscriptions. For more information, see [Fanout to Kinesis Data Firehose delivery streams](https://docs.aws.amazon.com/sns/latest/dg/sns-firehose-as-subscriber.html) in the Amazon SNS Developer Guide. + /// Specifying a valid ARN for this attribute is required for Firehose delivery stream subscriptions. For more information, see [Fanout to Firehose delivery streams](https://docs.aws.amazon.com/sns/latest/dg/sns-firehose-as-subscriber.html) in the Amazon SNS Developer Guide. /// This member is required. public var attributeName: Swift.String? /// The new value for the attribute in JSON format. @@ -2778,16 +2778,16 @@ public struct SubscribeInput { /// * RedrivePolicy – When specified, sends undeliverable messages to the specified Amazon SQS dead-letter queue. Messages that can't be delivered due to client errors (for example, when the subscribed endpoint is unreachable) or server errors (for example, when the service that powers the subscribed endpoint becomes unavailable) are held in the dead-letter queue for further analysis or reprocessing. /// /// - /// The following attribute applies only to Amazon Kinesis Data Firehose delivery stream subscriptions: + /// The following attribute applies only to Amazon Data Firehose delivery stream subscriptions: /// /// * SubscriptionRoleArn – The ARN of the IAM role that has the following: /// - /// * Permission to write to the Kinesis Data Firehose delivery stream + /// * Permission to write to the Firehose delivery stream /// /// * Amazon SNS listed as a trusted entity /// /// - /// Specifying a valid ARN for this attribute is required for Kinesis Data Firehose delivery stream subscriptions. For more information, see [Fanout to Kinesis Data Firehose delivery streams](https://docs.aws.amazon.com/sns/latest/dg/sns-firehose-as-subscriber.html) in the Amazon SNS Developer Guide. + /// Specifying a valid ARN for this attribute is required for Firehose delivery stream subscriptions. For more information, see [Fanout to Firehose delivery streams](https://docs.aws.amazon.com/sns/latest/dg/sns-firehose-as-subscriber.html) in the Amazon SNS Developer Guide. /// /// /// The following attributes apply only to [FIFO topics](https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html): diff --git a/Sources/Services/AWSSNS/Sources/AWSSNS/SNSClient.swift b/Sources/Services/AWSSNS/Sources/AWSSNS/SNSClient.swift index 19fda2057ec..c1a918a7c57 100644 --- a/Sources/Services/AWSSNS/Sources/AWSSNS/SNSClient.swift +++ b/Sources/Services/AWSSNS/Sources/AWSSNS/SNSClient.swift @@ -316,12 +316,12 @@ extension SNSClient { /// /// * For ADM, PlatformPrincipal is client id and PlatformCredential is client secret. /// - /// * For Baidu, PlatformPrincipal is API key and PlatformCredential is secret key. - /// /// * For APNS and APNS_SANDBOX using certificate credentials, PlatformPrincipal is SSL certificate and PlatformCredential is private key. /// /// * For APNS and APNS_SANDBOX using token credentials, PlatformPrincipal is signing key ID and PlatformCredential is signing key. /// + /// * For Baidu, PlatformPrincipal is API key and PlatformCredential is secret key. + /// /// * For GCM (Firebase Cloud Messaging) using key credentials, there is no PlatformPrincipal. The PlatformCredential is API key. /// /// * For GCM (Firebase Cloud Messaging) using token credentials, there is no PlatformPrincipal. The PlatformCredential is a JSON formatted private key file. When using the Amazon Web Services CLI, the file must be in string format and special characters must be ignored. To format the file correctly, Amazon SNS recommends using the following command: SERVICE_JSON=`jq @json <<< cat service.json`. diff --git a/Sources/Services/AWSSQS/Sources/AWSSQS/Models.swift b/Sources/Services/AWSSQS/Sources/AWSSQS/Models.swift index 0afd72065b4..949f7714ea0 100644 --- a/Sources/Services/AWSSQS/Sources/AWSSQS/Models.swift +++ b/Sources/Services/AWSSQS/Sources/AWSSQS/Models.swift @@ -1945,7 +1945,7 @@ public struct SendMessageInput { public var delaySeconds: Swift.Int? /// Each message attribute consists of a Name, Type, and Value. For more information, see [Amazon SQS message attributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-metadata.html#sqs-message-attributes) in the Amazon SQS Developer Guide. public var messageAttributes: [Swift.String: SQSClientTypes.MessageAttributeValue]? - /// The message to send. The minimum size is one character. The maximum size is 256 KiB. A message can include only XML, JSON, and unformatted text. The following Unicode characters are allowed: #x9 | #xA | #xD | #x20 to #xD7FF | #xE000 to #xFFFD | #x10000 to #x10FFFF Any characters not included in this list will be rejected. For more information, see the [W3C specification for characters](http://www.w3.org/TR/REC-xml/#charsets). + /// The message to send. The minimum size is one character. The maximum size is 256 KiB. A message can include only XML, JSON, and unformatted text. The following Unicode characters are allowed. For more information, see the [W3C specification for characters](http://www.w3.org/TR/REC-xml/#charsets). #x9 | #xA | #xD | #x20 to #xD7FF | #xE000 to #xFFFD | #x10000 to #x10FFFF Amazon SQS does not throw an exception or completely reject the message if it contains invalid characters. Instead, it replaces those invalid characters with U+FFFD before storing the message in the queue, as long as the message body contains at least one valid character. /// This member is required. public var messageBody: Swift.String? /// This parameter applies only to FIFO (first-in-first-out) queues. The token used for deduplication of sent messages. If a message with a particular MessageDeduplicationId is sent successfully, any messages sent with the same MessageDeduplicationId are accepted successfully but aren't delivered during the 5-minute deduplication interval. For more information, see [ Exactly-once processing](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-exactly-once-processing.html) in the Amazon SQS Developer Guide. diff --git a/Sources/Services/AWSSQS/Sources/AWSSQS/SQSClient.swift b/Sources/Services/AWSSQS/Sources/AWSSQS/SQSClient.swift index 66580f5f780..be32de609da 100644 --- a/Sources/Services/AWSSQS/Sources/AWSSQS/SQSClient.swift +++ b/Sources/Services/AWSSQS/Sources/AWSSQS/SQSClient.swift @@ -1306,7 +1306,7 @@ extension SQSClient { /// Performs the `SendMessage` operation on the `AmazonSQS` service. /// - /// Delivers a message to the specified queue. A message can include only XML, JSON, and unformatted text. The following Unicode characters are allowed: #x9 | #xA | #xD | #x20 to #xD7FF | #xE000 to #xFFFD | #x10000 to #x10FFFF Any characters not included in this list will be rejected. For more information, see the [W3C specification for characters](http://www.w3.org/TR/REC-xml/#charsets). + /// Delivers a message to the specified queue. A message can include only XML, JSON, and unformatted text. The following Unicode characters are allowed. For more information, see the [W3C specification for characters](http://www.w3.org/TR/REC-xml/#charsets). #x9 | #xA | #xD | #x20 to #xD7FF | #xE000 to #xFFFD | #x10000 to #x10FFFF Amazon SQS does not throw an exception or completely reject the message if it contains invalid characters. Instead, it replaces those invalid characters with U+FFFD before storing the message in the queue, as long as the message body contains at least one valid character. /// /// - Parameter SendMessageInput : /// @@ -1380,7 +1380,7 @@ extension SQSClient { /// Performs the `SendMessageBatch` operation on the `AmazonSQS` service. /// - /// You can use SendMessageBatch to send up to 10 messages to the specified queue by assigning either identical or different values to each message (or by not assigning values at all). This is a batch version of [SendMessage]. For a FIFO queue, multiple messages within a single batch are enqueued in the order they are sent. The result of sending each message is reported individually in the response. Because the batch request can result in a combination of successful and unsuccessful actions, you should check for batch errors even when the call returns an HTTP status code of 200. The maximum allowed individual message size and the maximum total payload size (the sum of the individual lengths of all of the batched messages) are both 256 KiB (262,144 bytes). A message can include only XML, JSON, and unformatted text. The following Unicode characters are allowed: #x9 | #xA | #xD | #x20 to #xD7FF | #xE000 to #xFFFD | #x10000 to #x10FFFF Any characters not included in this list will be rejected. For more information, see the [W3C specification for characters](http://www.w3.org/TR/REC-xml/#charsets). If you don't specify the DelaySeconds parameter for an entry, Amazon SQS uses the default value for the queue. + /// You can use SendMessageBatch to send up to 10 messages to the specified queue by assigning either identical or different values to each message (or by not assigning values at all). This is a batch version of [SendMessage]. For a FIFO queue, multiple messages within a single batch are enqueued in the order they are sent. The result of sending each message is reported individually in the response. Because the batch request can result in a combination of successful and unsuccessful actions, you should check for batch errors even when the call returns an HTTP status code of 200. The maximum allowed individual message size and the maximum total payload size (the sum of the individual lengths of all of the batched messages) are both 256 KiB (262,144 bytes). A message can include only XML, JSON, and unformatted text. The following Unicode characters are allowed. For more information, see the [W3C specification for characters](http://www.w3.org/TR/REC-xml/#charsets). #x9 | #xA | #xD | #x20 to #xD7FF | #xE000 to #xFFFD | #x10000 to #x10FFFF Amazon SQS does not throw an exception or completely reject the message if it contains invalid characters. Instead, it replaces those invalid characters with U+FFFD before storing the message in the queue, as long as the message body contains at least one valid character. If you don't specify the DelaySeconds parameter for an entry, Amazon SQS uses the default value for the queue. /// /// - Parameter SendMessageBatchInput : /// diff --git a/Sources/Services/AWSSageMaker/Sources/AWSSageMaker/Models.swift b/Sources/Services/AWSSageMaker/Sources/AWSSageMaker/Models.swift index 48c4bbcbb0c..461615eb058 100644 --- a/Sources/Services/AWSSageMaker/Sources/AWSSageMaker/Models.swift +++ b/Sources/Services/AWSSageMaker/Sources/AWSSageMaker/Models.swift @@ -14019,6 +14019,32 @@ extension SageMakerClientTypes { } +extension SageMakerClientTypes { + + public enum ProductionVariantInferenceAmiVersion: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case al2Gpu2 + case sdkUnknown(Swift.String) + + public static var allCases: [ProductionVariantInferenceAmiVersion] { + return [ + .al2Gpu2 + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .al2Gpu2: return "al2-ami-sagemaker-inference-gpu-2" + case let .sdkUnknown(s): return s + } + } + } +} + extension SageMakerClientTypes { public enum ManagedInstanceScalingStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { @@ -14159,6 +14185,8 @@ extension SageMakerClientTypes { public var coreDumpConfig: SageMakerClientTypes.ProductionVariantCoreDumpConfig? /// You can use this parameter to turn on native Amazon Web Services Systems Manager (SSM) access for a production variant behind an endpoint. By default, SSM access is disabled for all production variants behind an endpoint. You can turn on or turn off SSM access for a production variant behind an existing endpoint by creating a new endpoint configuration and calling UpdateEndpoint. public var enableSSMAccess: Swift.Bool? + /// Specifies an option from a collection of preconfigured Amazon Machine Image (AMI) images. Each image is configured by Amazon Web Services with a set of software and driver versions. Amazon Web Services optimizes these configurations for different machine learning workloads. By selecting an AMI version, you can ensure that your inference environment is compatible with specific software requirements, such as CUDA driver versions, Linux kernel versions, or Amazon Web Services Neuron driver versions. + public var inferenceAmiVersion: SageMakerClientTypes.ProductionVariantInferenceAmiVersion? /// Number of instances to launch initially. public var initialInstanceCount: Swift.Int? /// Determines initial traffic distribution among all of the models that you specify in the endpoint configuration. The traffic to a production variant is determined by the ratio of the VariantWeight to the sum of all VariantWeight values across all ProductionVariants. If unspecified, it defaults to 1.0. @@ -14186,6 +14214,7 @@ extension SageMakerClientTypes { containerStartupHealthCheckTimeoutInSeconds: Swift.Int? = nil, coreDumpConfig: SageMakerClientTypes.ProductionVariantCoreDumpConfig? = nil, enableSSMAccess: Swift.Bool? = nil, + inferenceAmiVersion: SageMakerClientTypes.ProductionVariantInferenceAmiVersion? = nil, initialInstanceCount: Swift.Int? = nil, initialVariantWeight: Swift.Float? = nil, instanceType: SageMakerClientTypes.ProductionVariantInstanceType? = nil, @@ -14202,6 +14231,7 @@ extension SageMakerClientTypes { self.containerStartupHealthCheckTimeoutInSeconds = containerStartupHealthCheckTimeoutInSeconds self.coreDumpConfig = coreDumpConfig self.enableSSMAccess = enableSSMAccess + self.inferenceAmiVersion = inferenceAmiVersion self.initialInstanceCount = initialInstanceCount self.initialVariantWeight = initialVariantWeight self.instanceType = instanceType @@ -19670,9 +19700,9 @@ extension SageMakerClientTypes { } extension SageMakerClientTypes { - /// The model card associated with the model package. Since ModelPackageModelCard is tied to a model package, it is a specific usage of a model card and its schema is simplified compared to the schema of ModelCard. The ModelPackageModelCard schema does not include model_package_details, and model_overview is composed of the model_creator and model_artifact properties. For more information about the model card associated with the model package, see [View the Details of a Model Version](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-details.html). + /// The model card associated with the model package. Since ModelPackageModelCard is tied to a model package, it is a specific usage of a model card and its schema is simplified compared to the schema of ModelCard. The ModelPackageModelCard schema does not include model_package_details, and model_overview is composed of the model_creator and model_artifact properties. For more information about the model package model card schema, see [Model package model card schema](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-details.html#model-card-schema). For more information about the model card associated with the model package, see [View the Details of a Model Version](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-details.html). public struct ModelPackageModelCard { - /// The content of the model card. + /// The content of the model card. The content must follow the schema described in [Model Package Model Card Schema](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-details.html#model-card-schema). public var modelCardContent: Swift.String? /// The approval status of the model card within your organization. Different organizations might have different criteria for model card review and approval. /// @@ -19943,7 +19973,7 @@ public struct CreateModelPackageInput { public var metadataProperties: SageMakerClientTypes.MetadataProperties? /// Whether the model is approved for deployment. This parameter is optional for versioned models, and does not apply to unversioned models. For versioned models, the value of this parameter must be set to Approved to deploy the model. public var modelApprovalStatus: SageMakerClientTypes.ModelApprovalStatus? - /// The model card associated with the model package. Since ModelPackageModelCard is tied to a model package, it is a specific usage of a model card and its schema is simplified compared to the schema of ModelCard. The ModelPackageModelCard schema does not include model_package_details, and model_overview is composed of the model_creator and model_artifact properties. For more information about the model card associated with the model package, see [View the Details of a Model Version](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-details.html). + /// The model card associated with the model package. Since ModelPackageModelCard is tied to a model package, it is a specific usage of a model card and its schema is simplified compared to the schema of ModelCard. The ModelPackageModelCard schema does not include model_package_details, and model_overview is composed of the model_creator and model_artifact properties. For more information about the model package model card schema, see [Model package model card schema](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-details.html#model-card-schema). For more information about the model card associated with the model package, see [View the Details of a Model Version](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-details.html). public var modelCard: SageMakerClientTypes.ModelPackageModelCard? /// A structure that contains model metrics reports. public var modelMetrics: SageMakerClientTypes.ModelMetrics? @@ -22776,6 +22806,8 @@ public struct CreateUserProfileOutput { extension SageMakerClientTypes { /// Use this parameter to configure your OIDC Identity Provider (IdP). public struct OidcConfig { + /// A string to string map of identifiers specific to the custom identity provider (IdP) being used. + public var authenticationRequestExtraParams: [Swift.String: Swift.String]? /// The OIDC IdP authorization endpoint used to configure your private workforce. /// This member is required. public var authorizationEndpoint: Swift.String? @@ -22794,6 +22826,8 @@ extension SageMakerClientTypes { /// The OIDC IdP logout endpoint used to configure your private workforce. /// This member is required. public var logoutEndpoint: Swift.String? + /// An array of string identifiers used to refer to the specific pieces of user data or claims that the client application wants to access. + public var scope: Swift.String? /// The OIDC IdP token endpoint used to configure your private workforce. /// This member is required. public var tokenEndpoint: Swift.String? @@ -22802,22 +22836,26 @@ extension SageMakerClientTypes { public var userInfoEndpoint: Swift.String? public init( + authenticationRequestExtraParams: [Swift.String: Swift.String]? = nil, authorizationEndpoint: Swift.String? = nil, clientId: Swift.String? = nil, clientSecret: Swift.String? = nil, issuer: Swift.String? = nil, jwksUri: Swift.String? = nil, logoutEndpoint: Swift.String? = nil, + scope: Swift.String? = nil, tokenEndpoint: Swift.String? = nil, userInfoEndpoint: Swift.String? = nil ) { + self.authenticationRequestExtraParams = authenticationRequestExtraParams self.authorizationEndpoint = authorizationEndpoint self.clientId = clientId self.clientSecret = clientSecret self.issuer = issuer self.jwksUri = jwksUri self.logoutEndpoint = logoutEndpoint + self.scope = scope self.tokenEndpoint = tokenEndpoint self.userInfoEndpoint = userInfoEndpoint } @@ -22827,7 +22865,7 @@ extension SageMakerClientTypes { extension SageMakerClientTypes.OidcConfig: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "OidcConfig(authorizationEndpoint: \(Swift.String(describing: authorizationEndpoint)), clientId: \(Swift.String(describing: clientId)), issuer: \(Swift.String(describing: issuer)), jwksUri: \(Swift.String(describing: jwksUri)), logoutEndpoint: \(Swift.String(describing: logoutEndpoint)), tokenEndpoint: \(Swift.String(describing: tokenEndpoint)), userInfoEndpoint: \(Swift.String(describing: userInfoEndpoint)), clientSecret: \"CONTENT_REDACTED\")"} + "OidcConfig(authenticationRequestExtraParams: \(Swift.String(describing: authenticationRequestExtraParams)), authorizationEndpoint: \(Swift.String(describing: authorizationEndpoint)), clientId: \(Swift.String(describing: clientId)), issuer: \(Swift.String(describing: issuer)), jwksUri: \(Swift.String(describing: jwksUri)), logoutEndpoint: \(Swift.String(describing: logoutEndpoint)), scope: \(Swift.String(describing: scope)), tokenEndpoint: \(Swift.String(describing: tokenEndpoint)), userInfoEndpoint: \(Swift.String(describing: userInfoEndpoint)), clientSecret: \"CONTENT_REDACTED\")"} } extension SageMakerClientTypes { @@ -29804,7 +29842,7 @@ public struct DescribeModelPackageOutput { public var metadataProperties: SageMakerClientTypes.MetadataProperties? /// The approval status of the model package. public var modelApprovalStatus: SageMakerClientTypes.ModelApprovalStatus? - /// The model card associated with the model package. Since ModelPackageModelCard is tied to a model package, it is a specific usage of a model card and its schema is simplified compared to the schema of ModelCard. The ModelPackageModelCard schema does not include model_package_details, and model_overview is composed of the model_creator and model_artifact properties. For more information about the model card associated with the model package, see [View the Details of a Model Version](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-details.html). + /// The model card associated with the model package. Since ModelPackageModelCard is tied to a model package, it is a specific usage of a model card and its schema is simplified compared to the schema of ModelCard. The ModelPackageModelCard schema does not include model_package_details, and model_overview is composed of the model_creator and model_artifact properties. For more information about the model package model card schema, see [Model package model card schema](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-details.html#model-card-schema). For more information about the model card associated with the model package, see [View the Details of a Model Version](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-details.html). public var modelCard: SageMakerClientTypes.ModelPackageModelCard? /// Metrics for the model. public var modelMetrics: SageMakerClientTypes.ModelMetrics? @@ -32433,6 +32471,8 @@ public struct DescribeWorkforceInput { extension SageMakerClientTypes { /// Your OIDC IdP workforce configuration. public struct OidcConfigForResponse { + /// A string to string map of identifiers specific to the custom identity provider (IdP) being used. + public var authenticationRequestExtraParams: [Swift.String: Swift.String]? /// The OIDC IdP authorization endpoint used to configure your private workforce. public var authorizationEndpoint: Swift.String? /// The OIDC IdP client ID used to configure your private workforce. @@ -32443,26 +32483,32 @@ extension SageMakerClientTypes { public var jwksUri: Swift.String? /// The OIDC IdP logout endpoint used to configure your private workforce. public var logoutEndpoint: Swift.String? + /// An array of string identifiers used to refer to the specific pieces of user data or claims that the client application wants to access. + public var scope: Swift.String? /// The OIDC IdP token endpoint used to configure your private workforce. public var tokenEndpoint: Swift.String? /// The OIDC IdP user information endpoint used to configure your private workforce. public var userInfoEndpoint: Swift.String? public init( + authenticationRequestExtraParams: [Swift.String: Swift.String]? = nil, authorizationEndpoint: Swift.String? = nil, clientId: Swift.String? = nil, issuer: Swift.String? = nil, jwksUri: Swift.String? = nil, logoutEndpoint: Swift.String? = nil, + scope: Swift.String? = nil, tokenEndpoint: Swift.String? = nil, userInfoEndpoint: Swift.String? = nil ) { + self.authenticationRequestExtraParams = authenticationRequestExtraParams self.authorizationEndpoint = authorizationEndpoint self.clientId = clientId self.issuer = issuer self.jwksUri = jwksUri self.logoutEndpoint = logoutEndpoint + self.scope = scope self.tokenEndpoint = tokenEndpoint self.userInfoEndpoint = userInfoEndpoint } @@ -39486,6 +39532,8 @@ public struct ListModelPackageGroupsInput { public var creationTimeAfter: Foundation.Date? /// A filter that returns only model groups created before the specified time. public var creationTimeBefore: Foundation.Date? + /// A filter that returns either model groups shared with you or model groups in your own account. When the value is CrossAccount, the results show the resources made discoverable to you from other accounts. When the value is SameAccount or null, the results show resources from your account. The default is SameAccount. + public var crossAccountFilterOption: SageMakerClientTypes.CrossAccountFilterOption? /// The maximum number of results to return in the response. public var maxResults: Swift.Int? /// A string in the model group name. This filter returns only model groups whose name contains the specified string. @@ -39500,6 +39548,7 @@ public struct ListModelPackageGroupsInput { public init( creationTimeAfter: Foundation.Date? = nil, creationTimeBefore: Foundation.Date? = nil, + crossAccountFilterOption: SageMakerClientTypes.CrossAccountFilterOption? = nil, maxResults: Swift.Int? = nil, nameContains: Swift.String? = nil, nextToken: Swift.String? = nil, @@ -39509,6 +39558,7 @@ public struct ListModelPackageGroupsInput { { self.creationTimeAfter = creationTimeAfter self.creationTimeBefore = creationTimeBefore + self.crossAccountFilterOption = crossAccountFilterOption self.maxResults = maxResults self.nameContains = nameContains self.nextToken = nextToken @@ -43650,7 +43700,7 @@ extension SageMakerClientTypes { /// /// * PENDING_MANUAL_APPROVAL - The model is waiting for manual approval. public var modelApprovalStatus: SageMakerClientTypes.ModelApprovalStatus? - /// The model card associated with the model package. Since ModelPackageModelCard is tied to a model package, it is a specific usage of a model card and its schema is simplified compared to the schema of ModelCard. The ModelPackageModelCard schema does not include model_package_details, and model_overview is composed of the model_creator and model_artifact properties. For more information about the model card associated with the model package, see [View the Details of a Model Version](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-details.html). + /// The model card associated with the model package. Since ModelPackageModelCard is tied to a model package, it is a specific usage of a model card and its schema is simplified compared to the schema of ModelCard. The ModelPackageModelCard schema does not include model_package_details, and model_overview is composed of the model_creator and model_artifact properties. For more information about the model package model card schema, see [Model package model card schema](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-details.html#model-card-schema). For more information about the model card associated with the model package, see [View the Details of a Model Version](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-details.html). public var modelCard: SageMakerClientTypes.ModelPackageModelCard? /// Metrics for the model. public var modelMetrics: SageMakerClientTypes.ModelMetrics? @@ -46517,7 +46567,7 @@ public struct UpdateModelPackageInput { public var inferenceSpecification: SageMakerClientTypes.InferenceSpecification? /// The approval status of the model. public var modelApprovalStatus: SageMakerClientTypes.ModelApprovalStatus? - /// The model card associated with the model package. Since ModelPackageModelCard is tied to a model package, it is a specific usage of a model card and its schema is simplified compared to the schema of ModelCard. The ModelPackageModelCard schema does not include model_package_details, and model_overview is composed of the model_creator and model_artifact properties. For more information about the model card associated with the model package, see [View the Details of a Model Version](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-details.html). + /// The model card associated with the model package. Since ModelPackageModelCard is tied to a model package, it is a specific usage of a model card and its schema is simplified compared to the schema of ModelCard. The ModelPackageModelCard schema does not include model_package_details, and model_overview is composed of the model_creator and model_artifact properties. For more information about the model package model card schema, see [Model package model card schema](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-details.html#model-card-schema). For more information about the model card associated with the model package, see [View the Details of a Model Version](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-details.html). public var modelCard: SageMakerClientTypes.ModelPackageModelCard? /// The Amazon Resource Name (ARN) of the model package. /// This member is required. @@ -52051,6 +52101,7 @@ extension ListModelPackageGroupsInput { guard let value else { return } try writer["CreationTimeAfter"].writeTimestamp(value.creationTimeAfter, format: .epochSeconds) try writer["CreationTimeBefore"].writeTimestamp(value.creationTimeBefore, format: .epochSeconds) + try writer["CrossAccountFilterOption"].write(value.crossAccountFilterOption) try writer["MaxResults"].write(value.maxResults) try writer["NameContains"].write(value.nameContains) try writer["NextToken"].write(value.nextToken) @@ -65377,6 +65428,7 @@ extension SageMakerClientTypes.ProductionVariant { try writer["ContainerStartupHealthCheckTimeoutInSeconds"].write(value.containerStartupHealthCheckTimeoutInSeconds) try writer["CoreDumpConfig"].write(value.coreDumpConfig, with: SageMakerClientTypes.ProductionVariantCoreDumpConfig.write(value:to:)) try writer["EnableSSMAccess"].write(value.enableSSMAccess) + try writer["InferenceAmiVersion"].write(value.inferenceAmiVersion) try writer["InitialInstanceCount"].write(value.initialInstanceCount) try writer["InitialVariantWeight"].write(value.initialVariantWeight) try writer["InstanceType"].write(value.instanceType) @@ -65406,6 +65458,7 @@ extension SageMakerClientTypes.ProductionVariant { value.enableSSMAccess = try reader["EnableSSMAccess"].readIfPresent() value.managedInstanceScaling = try reader["ManagedInstanceScaling"].readIfPresent(with: SageMakerClientTypes.ProductionVariantManagedInstanceScaling.read(from:)) value.routingConfig = try reader["RoutingConfig"].readIfPresent(with: SageMakerClientTypes.ProductionVariantRoutingConfig.read(from:)) + value.inferenceAmiVersion = try reader["InferenceAmiVersion"].readIfPresent() return value } } @@ -69168,6 +69221,8 @@ extension SageMakerClientTypes.OidcConfigForResponse { value.userInfoEndpoint = try reader["UserInfoEndpoint"].readIfPresent() value.logoutEndpoint = try reader["LogoutEndpoint"].readIfPresent() value.jwksUri = try reader["JwksUri"].readIfPresent() + value.scope = try reader["Scope"].readIfPresent() + value.authenticationRequestExtraParams = try reader["AuthenticationRequestExtraParams"].readMapIfPresent(valueReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) return value } } @@ -71541,12 +71596,14 @@ extension SageMakerClientTypes.OidcConfig { static func write(value: SageMakerClientTypes.OidcConfig?, to writer: SmithyJSON.Writer) throws { guard let value else { return } + try writer["AuthenticationRequestExtraParams"].writeMap(value.authenticationRequestExtraParams, valueWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), keyNodeInfo: "key", valueNodeInfo: "value", isFlattened: false) try writer["AuthorizationEndpoint"].write(value.authorizationEndpoint) try writer["ClientId"].write(value.clientId) try writer["ClientSecret"].write(value.clientSecret) try writer["Issuer"].write(value.issuer) try writer["JwksUri"].write(value.jwksUri) try writer["LogoutEndpoint"].write(value.logoutEndpoint) + try writer["Scope"].write(value.scope) try writer["TokenEndpoint"].write(value.tokenEndpoint) try writer["UserInfoEndpoint"].write(value.userInfoEndpoint) } diff --git a/Sources/Services/AWSSageMaker/Sources/AWSSageMaker/Paginators.swift b/Sources/Services/AWSSageMaker/Sources/AWSSageMaker/Paginators.swift index d61ecba6454..483be83bce1 100644 --- a/Sources/Services/AWSSageMaker/Sources/AWSSageMaker/Paginators.swift +++ b/Sources/Services/AWSSageMaker/Sources/AWSSageMaker/Paginators.swift @@ -1466,6 +1466,7 @@ extension ListModelPackageGroupsInput: ClientRuntime.PaginateToken { return ListModelPackageGroupsInput( creationTimeAfter: self.creationTimeAfter, creationTimeBefore: self.creationTimeBefore, + crossAccountFilterOption: self.crossAccountFilterOption, maxResults: self.maxResults, nameContains: self.nameContains, nextToken: token, diff --git a/Sources/Services/AWSSecretsManager/Sources/AWSSecretsManager/Models.swift b/Sources/Services/AWSSecretsManager/Sources/AWSSecretsManager/Models.swift index 14bf56e23ed..499f8775910 100644 --- a/Sources/Services/AWSSecretsManager/Sources/AWSSecretsManager/Models.swift +++ b/Sources/Services/AWSSecretsManager/Sources/AWSSecretsManager/Models.swift @@ -582,9 +582,9 @@ public struct CreateSecretInput { /// The name of the new secret. The secret name can contain ASCII letters, numbers, and the following characters: /_+=.@- Do not end your secret name with a hyphen followed by six characters. If you do so, you risk confusion and unexpected results when searching for a secret by partial ARN. Secrets Manager automatically adds a hyphen and six random characters after the secret name at the end of the ARN. /// This member is required. public var name: Swift.String? - /// The binary data to encrypt and store in the new version of the secret. We recommend that you store your binary data in a file and then pass the contents of the file as a parameter. Either SecretString or SecretBinary must have a value, but not both. This parameter is not available in the Secrets Manager console. + /// The binary data to encrypt and store in the new version of the secret. We recommend that you store your binary data in a file and then pass the contents of the file as a parameter. Either SecretString or SecretBinary must have a value, but not both. This parameter is not available in the Secrets Manager console. Sensitive: This field contains sensitive information, so the service does not include it in CloudTrail log entries. If you create your own log entries, you must also avoid logging the information in this field. public var secretBinary: Foundation.Data? - /// The text data to encrypt and store in this new version of the secret. We recommend you use a JSON structure of key/value pairs for your secret value. Either SecretString or SecretBinary must have a value, but not both. If you create a secret by using the Secrets Manager console then Secrets Manager puts the protected secret text in only the SecretString parameter. The Secrets Manager console stores the information as a JSON structure of key/value pairs that a Lambda rotation function can parse. + /// The text data to encrypt and store in this new version of the secret. We recommend you use a JSON structure of key/value pairs for your secret value. Either SecretString or SecretBinary must have a value, but not both. If you create a secret by using the Secrets Manager console then Secrets Manager puts the protected secret text in only the SecretString parameter. The Secrets Manager console stores the information as a JSON structure of key/value pairs that a Lambda rotation function can parse. Sensitive: This field contains sensitive information, so the service does not include it in CloudTrail log entries. If you create your own log entries, you must also avoid logging the information in this field. public var secretString: Swift.String? /// A list of tags to attach to the secret. Each tag is a key and value pair of strings in a JSON text string, for example: [{"Key":"CostCenter","Value":"12345"},{"Key":"environment","Value":"production"}] Secrets Manager tag key names are case sensitive. A tag with the key "ABC" is a different tag from one with key "abc". If you check tags in permissions policies as part of your security strategy, then adding or removing a tag can change permissions. If the completion of this operation would result in you losing your permissions for this secret, then Secrets Manager blocks the operation and returns an Access Denied error. For more information, see [Control access to secrets using tags](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples.html#tag-secrets-abac) and [Limit access to identities with tags that match secrets' tags](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples.html#auth-and-access_tags2). For information about how to format a JSON parameter for the various command line tool environments, see [Using JSON for Parameters](https://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html#cli-using-param-json). If your command-line tool or SDK requires quotation marks around the parameter, you should use single quotes to avoid confusion with the double quotes required in the JSON text. For tag quotas and naming restrictions, see [Service quotas for Tagging](https://docs.aws.amazon.com/general/latest/gr/arg.html#taged-reference-quotas) in the Amazon Web Services General Reference guide. public var tags: [SecretsManagerClientTypes.Tag]? @@ -852,7 +852,7 @@ public struct DescribeSecretOutput { /// /// * InSync, which indicates that the replica was created. public var replicationStatus: [SecretsManagerClientTypes.ReplicationStatusType]? - /// Specifies whether automatic rotation is turned on for this secret. To turn on rotation, use [RotateSecret]. To turn off rotation, use [CancelRotateSecret]. + /// Specifies whether automatic rotation is turned on for this secret. If the secret has never been configured for rotation, Secrets Manager returns null. To turn on rotation, use [RotateSecret]. To turn off rotation, use [CancelRotateSecret]. public var rotationEnabled: Swift.Bool? /// The ARN of the Lambda function that Secrets Manager invokes to rotate the secret. public var rotationLambdaARN: Swift.String? @@ -1005,7 +1005,7 @@ public struct GetResourcePolicyOutput { } public struct GetSecretValueInput { - /// The ARN or name of the secret to retrieve. For an ARN, we recommend that you specify a complete ARN rather than a partial ARN. See [Finding a secret from a partial ARN](https://docs.aws.amazon.com/secretsmanager/latest/userguide/troubleshoot.html#ARN_secretnamehyphen). + /// The ARN or name of the secret to retrieve. To retrieve a secret from another account, you must use an ARN. For an ARN, we recommend that you specify a complete ARN rather than a partial ARN. See [Finding a secret from a partial ARN](https://docs.aws.amazon.com/secretsmanager/latest/userguide/troubleshoot.html#ARN_secretnamehyphen). /// This member is required. public var secretId: Swift.String? /// The unique identifier of the version of the secret to retrieve. If you include both this parameter and VersionStage, the two parameters must refer to the same secret version. If you don't specify either a VersionStage or VersionId, then Secrets Manager returns the AWSCURRENT version. This value is typically a [UUID-type](https://wikipedia.org/wiki/Universally_unique_identifier) value with 32 hexadecimal digits. @@ -1032,9 +1032,9 @@ public struct GetSecretValueOutput { public var createdDate: Foundation.Date? /// The friendly name of the secret. public var name: Swift.String? - /// The decrypted secret value, if the secret value was originally provided as binary data in the form of a byte array. When you retrieve a SecretBinary using the HTTP API, the Python SDK, or the Amazon Web Services CLI, the value is Base64-encoded. Otherwise, it is not encoded. If the secret was created by using the Secrets Manager console, or if the secret value was originally provided as a string, then this field is omitted. The secret value appears in SecretString instead. + /// The decrypted secret value, if the secret value was originally provided as binary data in the form of a byte array. When you retrieve a SecretBinary using the HTTP API, the Python SDK, or the Amazon Web Services CLI, the value is Base64-encoded. Otherwise, it is not encoded. If the secret was created by using the Secrets Manager console, or if the secret value was originally provided as a string, then this field is omitted. The secret value appears in SecretString instead. Sensitive: This field contains sensitive information, so the service does not include it in CloudTrail log entries. If you create your own log entries, you must also avoid logging the information in this field. public var secretBinary: Foundation.Data? - /// The decrypted secret value, if the secret value was originally provided as a string or through the Secrets Manager console. If this secret was created by using the console, then Secrets Manager stores the information as a JSON structure of key/value pairs. + /// The decrypted secret value, if the secret value was originally provided as a string or through the Secrets Manager console. If this secret was created by using the console, then Secrets Manager stores the information as a JSON structure of key/value pairs. Sensitive: This field contains sensitive information, so the service does not include it in CloudTrail log entries. If you create your own log entries, you must also avoid logging the information in this field. public var secretString: Swift.String? /// The unique identifier of this version of the secret. public var versionId: Swift.String? @@ -1381,18 +1381,21 @@ public struct PutSecretValueInput { /// /// This value becomes the VersionId of the new version. public var clientRequestToken: Swift.String? - /// The binary data to encrypt and store in the new version of the secret. To use this parameter in the command-line tools, we recommend that you store your binary data in a file and then pass the contents of the file as a parameter. You must include SecretBinary or SecretString, but not both. You can't access this value from the Secrets Manager console. + /// A unique identifier that indicates the source of the request. For cross-account rotation (when you rotate a secret in one account by using a Lambda rotation function in another account) and the Lambda rotation function assumes an IAM role to call Secrets Manager, Secrets Manager validates the identity with the rotation token. For more information, see [How rotation works](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html). Sensitive: This field contains sensitive information, so the service does not include it in CloudTrail log entries. If you create your own log entries, you must also avoid logging the information in this field. + public var rotationToken: Swift.String? + /// The binary data to encrypt and store in the new version of the secret. To use this parameter in the command-line tools, we recommend that you store your binary data in a file and then pass the contents of the file as a parameter. You must include SecretBinary or SecretString, but not both. You can't access this value from the Secrets Manager console. Sensitive: This field contains sensitive information, so the service does not include it in CloudTrail log entries. If you create your own log entries, you must also avoid logging the information in this field. public var secretBinary: Foundation.Data? /// The ARN or name of the secret to add a new version to. For an ARN, we recommend that you specify a complete ARN rather than a partial ARN. See [Finding a secret from a partial ARN](https://docs.aws.amazon.com/secretsmanager/latest/userguide/troubleshoot.html#ARN_secretnamehyphen). If the secret doesn't already exist, use CreateSecret instead. /// This member is required. public var secretId: Swift.String? - /// The text to encrypt and store in the new version of the secret. You must include SecretBinary or SecretString, but not both. We recommend you create the secret string as JSON key/value pairs, as shown in the example. + /// The text to encrypt and store in the new version of the secret. You must include SecretBinary or SecretString, but not both. We recommend you create the secret string as JSON key/value pairs, as shown in the example. Sensitive: This field contains sensitive information, so the service does not include it in CloudTrail log entries. If you create your own log entries, you must also avoid logging the information in this field. public var secretString: Swift.String? /// A list of staging labels to attach to this version of the secret. Secrets Manager uses staging labels to track versions of a secret through the rotation process. If you specify a staging label that's already associated with a different version of the same secret, then Secrets Manager removes the label from the other version and attaches it to this version. If you specify AWSCURRENT, and it is already attached to another version, then Secrets Manager also moves the staging label AWSPREVIOUS to the version that AWSCURRENT was removed from. If you don't include VersionStages, then Secrets Manager automatically moves the staging label AWSCURRENT to this version. public var versionStages: [Swift.String]? public init( clientRequestToken: Swift.String? = nil, + rotationToken: Swift.String? = nil, secretBinary: Foundation.Data? = nil, secretId: Swift.String? = nil, secretString: Swift.String? = nil, @@ -1400,6 +1403,7 @@ public struct PutSecretValueInput { ) { self.clientRequestToken = clientRequestToken + self.rotationToken = rotationToken self.secretBinary = secretBinary self.secretId = secretId self.secretString = secretString @@ -1409,7 +1413,7 @@ public struct PutSecretValueInput { extension PutSecretValueInput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "PutSecretValueInput(clientRequestToken: \(Swift.String(describing: clientRequestToken)), secretId: \(Swift.String(describing: secretId)), versionStages: \(Swift.String(describing: versionStages)), secretBinary: \"CONTENT_REDACTED\", secretString: \"CONTENT_REDACTED\")"} + "PutSecretValueInput(clientRequestToken: \(Swift.String(describing: clientRequestToken)), secretId: \(Swift.String(describing: secretId)), versionStages: \(Swift.String(describing: versionStages)), rotationToken: \"CONTENT_REDACTED\", secretBinary: \"CONTENT_REDACTED\", secretString: \"CONTENT_REDACTED\")"} } public struct PutSecretValueOutput { @@ -1540,7 +1544,7 @@ public struct RestoreSecretOutput { public struct RotateSecretInput { /// A unique identifier for the new version of the secret. You only need to specify this value if you implement your own retry logic and you want to ensure that Secrets Manager doesn't attempt to create a secret version twice. If you use the Amazon Web Services CLI or one of the Amazon Web Services SDKs to call this operation, then you can leave this parameter empty. The CLI or SDK generates a random UUID for you and includes it as the value for this parameter in the request. If you generate a raw HTTP request to the Secrets Manager service endpoint, then you must generate a ClientRequestToken and include it in the request. This value helps ensure idempotency. Secrets Manager uses this value to prevent the accidental creation of duplicate versions if there are failures and retries during a rotation. We recommend that you generate a [UUID-type](https://wikipedia.org/wiki/Universally_unique_identifier) value to ensure uniqueness of your versions within the specified secret. public var clientRequestToken: Swift.String? - /// Specifies whether to rotate the secret immediately or wait until the next scheduled rotation window. The rotation schedule is defined in [RotateSecretRequest$RotationRules]. For secrets that use a Lambda rotation function to rotate, if you don't immediately rotate the secret, Secrets Manager tests the rotation configuration by running the [testSecret] step(https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotate-secrets_how.html) of the Lambda rotation function. The test creates an AWSPENDING version of the secret and then removes it. By default, Secrets Manager rotates the secret immediately. + /// Specifies whether to rotate the secret immediately or wait until the next scheduled rotation window. The rotation schedule is defined in [RotateSecretRequest$RotationRules]. For secrets that use a Lambda rotation function to rotate, if you don't immediately rotate the secret, Secrets Manager tests the rotation configuration by running the [testSecret] step(https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotate-secrets_lambda-functions.html#rotate-secrets_lambda-functions-code) of the Lambda rotation function. The test creates an AWSPENDING version of the secret and then removes it. By default, Secrets Manager rotates the secret immediately. public var rotateImmediately: Swift.Bool? /// For secrets that use a Lambda rotation function to rotate, the ARN of the Lambda rotation function. For secrets that use managed rotation, omit this field. For more information, see [Managed rotation](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotate-secrets_managed.html) in the Secrets Manager User Guide. public var rotationLambdaARN: Swift.String? @@ -1654,12 +1658,12 @@ public struct UpdateSecretInput { public var description: Swift.String? /// The ARN, key ID, or alias of the KMS key that Secrets Manager uses to encrypt new secret versions as well as any existing versions with the staging labels AWSCURRENT, AWSPENDING, or AWSPREVIOUS. If you don't have kms:Encrypt permission to the new key, Secrets Manager does not re-ecrypt existing secret versions with the new key. For more information about versions and staging labels, see [Concepts: Version](https://docs.aws.amazon.com/secretsmanager/latest/userguide/getting-started.html#term_version). A key alias is always prefixed by alias/, for example alias/aws/secretsmanager. For more information, see [About aliases](https://docs.aws.amazon.com/kms/latest/developerguide/alias-about.html). If you set this to an empty string, Secrets Manager uses the Amazon Web Services managed key aws/secretsmanager. If this key doesn't already exist in your account, then Secrets Manager creates it for you automatically. All users and roles in the Amazon Web Services account automatically have access to use aws/secretsmanager. Creating aws/secretsmanager can result in a one-time significant delay in returning the result. You can only use the Amazon Web Services managed key aws/secretsmanager if you call this operation using credentials from the same Amazon Web Services account that owns the secret. If the secret is in a different account, then you must use a customer managed key and provide the ARN of that KMS key in this field. The user making the call must have permissions to both the secret and the KMS key in their respective accounts. public var kmsKeyId: Swift.String? - /// The binary data to encrypt and store in the new version of the secret. We recommend that you store your binary data in a file and then pass the contents of the file as a parameter. Either SecretBinary or SecretString must have a value, but not both. You can't access this parameter in the Secrets Manager console. + /// The binary data to encrypt and store in the new version of the secret. We recommend that you store your binary data in a file and then pass the contents of the file as a parameter. Either SecretBinary or SecretString must have a value, but not both. You can't access this parameter in the Secrets Manager console. Sensitive: This field contains sensitive information, so the service does not include it in CloudTrail log entries. If you create your own log entries, you must also avoid logging the information in this field. public var secretBinary: Foundation.Data? /// The ARN or name of the secret. For an ARN, we recommend that you specify a complete ARN rather than a partial ARN. See [Finding a secret from a partial ARN](https://docs.aws.amazon.com/secretsmanager/latest/userguide/troubleshoot.html#ARN_secretnamehyphen). /// This member is required. public var secretId: Swift.String? - /// The text data to encrypt and store in the new version of the secret. We recommend you use a JSON structure of key/value pairs for your secret value. Either SecretBinary or SecretString must have a value, but not both. + /// The text data to encrypt and store in the new version of the secret. We recommend you use a JSON structure of key/value pairs for your secret value. Either SecretBinary or SecretString must have a value, but not both. Sensitive: This field contains sensitive information, so the service does not include it in CloudTrail log entries. If you create your own log entries, you must also avoid logging the information in this field. public var secretString: Swift.String? public init( @@ -1751,7 +1755,7 @@ public struct ValidateResourcePolicyInput { /// A JSON-formatted string that contains an Amazon Web Services resource-based policy. The policy in the string identifies who can access or manage this secret and its versions. For example policies, see [Permissions policy examples](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples.html). /// This member is required. public var resourcePolicy: Swift.String? - /// This field is reserved for internal use. + /// The ARN or name of the secret with the resource-based policy you want to validate. public var secretId: Swift.String? public init( @@ -2093,6 +2097,7 @@ extension PutSecretValueInput { static func write(value: PutSecretValueInput?, to writer: SmithyJSON.Writer) throws { guard let value else { return } try writer["ClientRequestToken"].write(value.clientRequestToken) + try writer["RotationToken"].write(value.rotationToken) try writer["SecretBinary"].write(value.secretBinary) try writer["SecretId"].write(value.secretId) try writer["SecretString"].write(value.secretString) diff --git a/Sources/Services/AWSSecretsManager/Sources/AWSSecretsManager/SecretsManagerClient.swift b/Sources/Services/AWSSecretsManager/Sources/AWSSecretsManager/SecretsManagerClient.swift index cf67753f64d..ff84c84985d 100644 --- a/Sources/Services/AWSSecretsManager/Sources/AWSSecretsManager/SecretsManagerClient.swift +++ b/Sources/Services/AWSSecretsManager/Sources/AWSSecretsManager/SecretsManagerClient.swift @@ -277,7 +277,7 @@ extension SecretsManagerClient { /// Performs the `CreateSecret` operation on the `secretsmanager` service. /// - /// Creates a new secret. A secret can be a password, a set of credentials such as a user name and password, an OAuth token, or other secret information that you store in an encrypted form in Secrets Manager. The secret also includes the connection information to access a database or other service, which Secrets Manager doesn't encrypt. A secret in Secrets Manager consists of both the protected secret data and the important information needed to manage the secret. For secrets that use managed rotation, you need to create the secret through the managing service. For more information, see [Secrets Manager secrets managed by other Amazon Web Services services](https://docs.aws.amazon.com/secretsmanager/latest/userguide/service-linked-secrets.html). For information about creating a secret in the console, see [Create a secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html). To create a secret, you can provide the secret value to be encrypted in either the SecretString parameter or the SecretBinary parameter, but not both. If you include SecretString or SecretBinary then Secrets Manager creates an initial secret version and automatically attaches the staging label AWSCURRENT to it. For database credentials you want to rotate, for Secrets Manager to be able to rotate the secret, you must make sure the JSON you store in the SecretString matches the [JSON structure of a database secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_secret_json_structure.html). If you don't specify an KMS encryption key, Secrets Manager uses the Amazon Web Services managed key aws/secretsmanager. If this key doesn't already exist in your account, then Secrets Manager creates it for you automatically. All users and roles in the Amazon Web Services account automatically have access to use aws/secretsmanager. Creating aws/secretsmanager can result in a one-time significant delay in returning the result. If the secret is in a different Amazon Web Services account from the credentials calling the API, then you can't use aws/secretsmanager to encrypt the secret, and you must create and use a customer managed KMS key. Secrets Manager generates a CloudTrail log entry when you call this action. Do not include sensitive information in request parameters except SecretBinary or SecretString because it might be logged. For more information, see [Logging Secrets Manager events with CloudTrail](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieve-ct-entries.html). Required permissions: secretsmanager:CreateSecret. If you include tags in the secret, you also need secretsmanager:TagResource. For more information, see [ IAM policy actions for Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_iam-permissions.html#reference_iam-permissions_actions) and [Authentication and access control in Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html). To encrypt the secret with a KMS key other than aws/secretsmanager, you need kms:GenerateDataKey and kms:Decrypt permission to the key. + /// Creates a new secret. A secret can be a password, a set of credentials such as a user name and password, an OAuth token, or other secret information that you store in an encrypted form in Secrets Manager. The secret also includes the connection information to access a database or other service, which Secrets Manager doesn't encrypt. A secret in Secrets Manager consists of both the protected secret data and the important information needed to manage the secret. For secrets that use managed rotation, you need to create the secret through the managing service. For more information, see [Secrets Manager secrets managed by other Amazon Web Services services](https://docs.aws.amazon.com/secretsmanager/latest/userguide/service-linked-secrets.html). For information about creating a secret in the console, see [Create a secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html). To create a secret, you can provide the secret value to be encrypted in either the SecretString parameter or the SecretBinary parameter, but not both. If you include SecretString or SecretBinary then Secrets Manager creates an initial secret version and automatically attaches the staging label AWSCURRENT to it. For database credentials you want to rotate, for Secrets Manager to be able to rotate the secret, you must make sure the JSON you store in the SecretString matches the [JSON structure of a database secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_secret_json_structure.html). If you don't specify an KMS encryption key, Secrets Manager uses the Amazon Web Services managed key aws/secretsmanager. If this key doesn't already exist in your account, then Secrets Manager creates it for you automatically. All users and roles in the Amazon Web Services account automatically have access to use aws/secretsmanager. Creating aws/secretsmanager can result in a one-time significant delay in returning the result. If the secret is in a different Amazon Web Services account from the credentials calling the API, then you can't use aws/secretsmanager to encrypt the secret, and you must create and use a customer managed KMS key. Secrets Manager generates a CloudTrail log entry when you call this action. Do not include sensitive information in request parameters except SecretBinary or SecretString because it might be logged. For more information, see [Logging Secrets Manager events with CloudTrail](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieve-ct-entries.html). Required permissions: secretsmanager:CreateSecret. If you include tags in the secret, you also need secretsmanager:TagResource. To add replica Regions, you must also have secretsmanager:ReplicateSecretToRegions. For more information, see [ IAM policy actions for Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_iam-permissions.html#reference_iam-permissions_actions) and [Authentication and access control in Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html). To encrypt the secret with a KMS key other than aws/secretsmanager, you need kms:GenerateDataKey and kms:Decrypt permission to the key. /// /// - Parameter CreateSecretInput : [no documentation found] /// @@ -853,7 +853,7 @@ extension SecretsManagerClient { /// Performs the `PutSecretValue` operation on the `secretsmanager` service. /// - /// Creates a new version with a new encrypted secret value and attaches it to the secret. The version can contain a new SecretString value or a new SecretBinary value. We recommend you avoid calling PutSecretValue at a sustained rate of more than once every 10 minutes. When you update the secret value, Secrets Manager creates a new version of the secret. Secrets Manager removes outdated versions when there are more than 100, but it does not remove versions created less than 24 hours ago. If you call PutSecretValue more than once every 10 minutes, you create more versions than Secrets Manager removes, and you will reach the quota for secret versions. You can specify the staging labels to attach to the new version in VersionStages. If you don't include VersionStages, then Secrets Manager automatically moves the staging label AWSCURRENT to this version. If this operation creates the first version for the secret, then Secrets Manager automatically attaches the staging label AWSCURRENT to it. If this operation moves the staging label AWSCURRENT from another version to this version, then Secrets Manager also automatically moves the staging label AWSPREVIOUS to the version that AWSCURRENT was removed from. This operation is idempotent. If you call this operation with a ClientRequestToken that matches an existing version's VersionId, and you specify the same secret data, the operation succeeds but does nothing. However, if the secret data is different, then the operation fails because you can't modify an existing version; you can only create new ones. Secrets Manager generates a CloudTrail log entry when you call this action. Do not include sensitive information in request parameters except SecretBinary or SecretString because it might be logged. For more information, see [Logging Secrets Manager events with CloudTrail](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieve-ct-entries.html). Required permissions: secretsmanager:PutSecretValue. For more information, see [ IAM policy actions for Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_iam-permissions.html#reference_iam-permissions_actions) and [Authentication and access control in Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html). + /// Creates a new version with a new encrypted secret value and attaches it to the secret. The version can contain a new SecretString value or a new SecretBinary value. We recommend you avoid calling PutSecretValue at a sustained rate of more than once every 10 minutes. When you update the secret value, Secrets Manager creates a new version of the secret. Secrets Manager removes outdated versions when there are more than 100, but it does not remove versions created less than 24 hours ago. If you call PutSecretValue more than once every 10 minutes, you create more versions than Secrets Manager removes, and you will reach the quota for secret versions. You can specify the staging labels to attach to the new version in VersionStages. If you don't include VersionStages, then Secrets Manager automatically moves the staging label AWSCURRENT to this version. If this operation creates the first version for the secret, then Secrets Manager automatically attaches the staging label AWSCURRENT to it. If this operation moves the staging label AWSCURRENT from another version to this version, then Secrets Manager also automatically moves the staging label AWSPREVIOUS to the version that AWSCURRENT was removed from. This operation is idempotent. If you call this operation with a ClientRequestToken that matches an existing version's VersionId, and you specify the same secret data, the operation succeeds but does nothing. However, if the secret data is different, then the operation fails because you can't modify an existing version; you can only create new ones. Secrets Manager generates a CloudTrail log entry when you call this action. Do not include sensitive information in request parameters except SecretBinary, SecretString, or RotationToken because it might be logged. For more information, see [Logging Secrets Manager events with CloudTrail](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieve-ct-entries.html). Required permissions: secretsmanager:PutSecretValue. For more information, see [ IAM policy actions for Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_iam-permissions.html#reference_iam-permissions_actions) and [Authentication and access control in Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html). /// /// - Parameter PutSecretValueInput : [no documentation found] /// diff --git a/Sources/Services/AWSSecurityHub/Sources/AWSSecurityHub/Models.swift b/Sources/Services/AWSSecurityHub/Sources/AWSSecurityHub/Models.swift index 7d08c7f2da2..1aaae21da4d 100644 --- a/Sources/Services/AWSSecurityHub/Sources/AWSSecurityHub/Models.swift +++ b/Sources/Services/AWSSecurityHub/Sources/AWSSecurityHub/Models.swift @@ -30705,9 +30705,9 @@ extension SecurityHubClientTypes.NumberFilter { var value = SecurityHubClientTypes.NumberFilter() value.gte = try reader["Gte"].readIfPresent() value.lte = try reader["Lte"].readIfPresent() - value.eq = try reader["Eq"].readIfPresent() value.gt = try reader["Gt"].readIfPresent() value.lt = try reader["Lt"].readIfPresent() + value.eq = try reader["Eq"].readIfPresent() return value } } diff --git a/Sources/Services/AWSSecurityLake/Sources/AWSSecurityLake/Models.swift b/Sources/Services/AWSSecurityLake/Sources/AWSSecurityLake/Models.swift index 4ad47bffe23..a3da507a998 100644 --- a/Sources/Services/AWSSecurityLake/Sources/AWSSecurityLake/Models.swift +++ b/Sources/Services/AWSSecurityLake/Sources/AWSSecurityLake/Models.swift @@ -966,7 +966,7 @@ public struct CreateSubscriberInput { public var sources: [SecurityLakeClientTypes.LogSourceResource]? /// The description for your subscriber account in Security Lake. public var subscriberDescription: Swift.String? - /// The AWS identity used to access your data. + /// The Amazon Web Services identity used to access your data. /// This member is required. public var subscriberIdentity: SecurityLakeClientTypes.AwsIdentity? /// The name of your Security Lake subscriber account. @@ -1035,7 +1035,7 @@ extension SecurityLakeClientTypes { public var accessTypes: [SecurityLakeClientTypes.AccessType]? /// The date and time when the subscriber was created. public var createdAt: Foundation.Date? - /// The Amazon Resource Name (ARN) which uniquely defines the AWS RAM resource share. Before accepting the RAM resource share invitation, you can view details related to the RAM resource share. This field is available only for Lake Formation subscribers created after March 8, 2023. + /// The Amazon Resource Name (ARN) which uniquely defines the Amazon Web Services RAM resource share. Before accepting the RAM resource share invitation, you can view details related to the RAM resource share. This field is available only for Lake Formation subscribers created after March 8, 2023. public var resourceShareArn: Swift.String? /// The name of the resource share. public var resourceShareName: Swift.String? @@ -1056,7 +1056,7 @@ extension SecurityLakeClientTypes { /// The subscriber ID of the Amazon Security Lake subscriber account. /// This member is required. public var subscriberId: Swift.String? - /// The AWS identity used to access your data. + /// The Amazon Web Services identity used to access your data. /// This member is required. public var subscriberIdentity: SecurityLakeClientTypes.AwsIdentity? /// The name of your Amazon Security Lake subscriber account. diff --git a/Sources/Services/AWSStorageGateway/Sources/AWSStorageGateway/Models.swift b/Sources/Services/AWSStorageGateway/Sources/AWSStorageGateway/Models.swift index 4e62cfe4318..d52ccb833e6 100644 --- a/Sources/Services/AWSStorageGateway/Sources/AWSStorageGateway/Models.swift +++ b/Sources/Services/AWSStorageGateway/Sources/AWSStorageGateway/Models.swift @@ -803,6 +803,35 @@ extension StorageGatewayClientTypes { } +extension StorageGatewayClientTypes { + + public enum AutomaticUpdatePolicy: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case allVersions + case emergencyVersionsOnly + case sdkUnknown(Swift.String) + + public static var allCases: [AutomaticUpdatePolicy] { + return [ + .allVersions, + .emergencyVersionsOnly + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .allVersions: return "ALL_VERSIONS" + case .emergencyVersionsOnly: return "EMERGENCY_VERSIONS_ONLY" + case let .sdkUnknown(s): return s + } + } + } +} + extension StorageGatewayClientTypes { public enum AvailabilityMonitorTestStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { @@ -2738,8 +2767,26 @@ public struct DescribeMaintenanceStartTimeInput { } } +extension StorageGatewayClientTypes { + /// A set of variables indicating the software update preferences for the gateway. + public struct SoftwareUpdatePreferences { + /// Indicates the automatic update policy for a gateway. ALL_VERSIONS - Enables regular gateway maintenance updates. EMERGENCY_VERSIONS_ONLY - Disables regular gateway maintenance updates. + public var automaticUpdatePolicy: StorageGatewayClientTypes.AutomaticUpdatePolicy? + + public init( + automaticUpdatePolicy: StorageGatewayClientTypes.AutomaticUpdatePolicy? = nil + ) + { + self.automaticUpdatePolicy = automaticUpdatePolicy + } + } + +} + /// A JSON object containing the following fields: /// +/// * [DescribeMaintenanceStartTimeOutput$SoftwareUpdatePreferences] +/// /// * [DescribeMaintenanceStartTimeOutput$DayOfMonth] /// /// * [DescribeMaintenanceStartTimeOutput$DayOfWeek] @@ -2750,7 +2797,7 @@ public struct DescribeMaintenanceStartTimeInput { /// /// * [DescribeMaintenanceStartTimeOutput$Timezone] public struct DescribeMaintenanceStartTimeOutput { - /// The day of the month component of the maintenance start time represented as an ordinal number from 1 to 28, where 1 represents the first day of the month and 28 represents the last day of the month. + /// The day of the month component of the maintenance start time represented as an ordinal number from 1 to 28, where 1 represents the first day of the month. It is not possible to set the maintenance schedule to start on days 29 through 31. public var dayOfMonth: Swift.Int? /// An ordinal number between 0 and 6 that represents the day of the week, where 0 represents Sunday and 6 represents Saturday. The day of week is in the time zone of the gateway. public var dayOfWeek: Swift.Int? @@ -2760,6 +2807,8 @@ public struct DescribeMaintenanceStartTimeOutput { public var hourOfDay: Swift.Int? /// The minute component of the maintenance start time represented as mm, where mm is the minute (0 to 59). The minute of the hour is in the time zone of the gateway. public var minuteOfHour: Swift.Int? + /// A set of variables indicating the software update preferences for the gateway. Includes AutomaticUpdatePolicy field with the following inputs: ALL_VERSIONS - Enables regular gateway maintenance updates. EMERGENCY_VERSIONS_ONLY - Disables regular gateway maintenance updates. + public var softwareUpdatePreferences: StorageGatewayClientTypes.SoftwareUpdatePreferences? /// A value that indicates the time zone that is set for the gateway. The start time and day of week specified should be in the time zone of the gateway. public var timezone: Swift.String? @@ -2769,6 +2818,7 @@ public struct DescribeMaintenanceStartTimeOutput { gatewayARN: Swift.String? = nil, hourOfDay: Swift.Int? = nil, minuteOfHour: Swift.Int? = nil, + softwareUpdatePreferences: StorageGatewayClientTypes.SoftwareUpdatePreferences? = nil, timezone: Swift.String? = nil ) { @@ -2777,6 +2827,7 @@ public struct DescribeMaintenanceStartTimeOutput { self.gatewayARN = gatewayARN self.hourOfDay = hourOfDay self.minuteOfHour = minuteOfHour + self.softwareUpdatePreferences = softwareUpdatePreferences self.timezone = timezone } } @@ -3172,11 +3223,11 @@ public struct DescribeSMBSettingsOutput { /// /// * ClientSpecified: If you choose this option, requests are established based on what is negotiated by the client. This option is recommended when you want to maximize compatibility across different clients in your environment. Supported only for S3 File Gateway. /// - /// * MandatorySigning: If you use this option, File Gateway only allows connections from SMBv2 or SMBv3 clients that have signing turned on. This option works with SMB clients on Microsoft Windows Vista, Windows Server 2008, or later. + /// * MandatorySigning: If you choose this option, File Gateway only allows connections from SMBv2 or SMBv3 clients that have signing turned on. This option works with SMB clients on Microsoft Windows Vista, Windows Server 2008, or later. /// - /// * MandatoryEncryption: If you use this option, File Gateway only allows connections from SMBv3 clients that have encryption turned on. Both 256-bit and 128-bit algorithms are allowed. This option is recommended for environments that handle sensitive data. It works with SMB clients on Microsoft Windows 8, Windows Server 2012, or later. + /// * MandatoryEncryption: If you choose this option, File Gateway only allows connections from SMBv3 clients that have encryption turned on. Both 256-bit and 128-bit algorithms are allowed. This option is recommended for environments that handle sensitive data. It works with SMB clients on Microsoft Windows 8, Windows Server 2012, or later. /// - /// * EnforceEncryption: If you use this option, File Gateway only allows connections from SMBv3 clients that use 256-bit AES encryption algorithms. 128-bit algorithms are not allowed. This option is recommended for environments that handle sensitive data. It works with SMB clients on Microsoft Windows 8, Windows Server 2012, or later. + /// * MandatoryEncryptionNoAes128: If you choose this option, File Gateway only allows connections from SMBv3 clients that use 256-bit AES encryption algorithms. 128-bit algorithms are not allowed. This option is recommended for environments that handle sensitive data. It works with SMB clients on Microsoft Windows 8, Windows Server 2012, or later. public var smbSecurityStrategy: StorageGatewayClientTypes.SMBSecurityStrategy? public init( @@ -5326,7 +5377,7 @@ public struct UpdateGatewayInformationInput { /// The Amazon Resource Name (ARN) of the gateway. Use the [ListGateways] operation to return a list of gateways for your account and Amazon Web Services Region. /// This member is required. public var gatewayARN: Swift.String? - /// Specifies the size of the gateway's metadata cache. + /// Specifies the size of the gateway's metadata cache. This setting impacts gateway performance and hardware recommendations. For more information, see [Performance guidance for gateways with multiple file shares](https://docs.aws.amazon.com/filegateway/latest/files3/performance-multiple-file-shares.html) in the Amazon S3 File Gateway User Guide. public var gatewayCapacity: StorageGatewayClientTypes.GatewayCapacity? /// The name you configured for your gateway. public var gatewayName: Swift.String? @@ -5395,6 +5446,8 @@ public struct UpdateGatewaySoftwareNowOutput { /// A JSON object containing the following fields: /// +/// * [UpdateMaintenanceStartTimeInput$SoftwareUpdatePreferences] +/// /// * [UpdateMaintenanceStartTimeInput$DayOfMonth] /// /// * [UpdateMaintenanceStartTimeInput$DayOfWeek] @@ -5403,26 +5456,27 @@ public struct UpdateGatewaySoftwareNowOutput { /// /// * [UpdateMaintenanceStartTimeInput$MinuteOfHour] public struct UpdateMaintenanceStartTimeInput { - /// The day of the month component of the maintenance start time represented as an ordinal number from 1 to 28, where 1 represents the first day of the month and 28 represents the last day of the month. + /// The day of the month component of the maintenance start time represented as an ordinal number from 1 to 28, where 1 represents the first day of the month. It is not possible to set the maintenance schedule to start on days 29 through 31. public var dayOfMonth: Swift.Int? - /// The day of the week component of the maintenance start time week represented as an ordinal number from 0 to 6, where 0 represents Sunday and 6 Saturday. + /// The day of the week component of the maintenance start time week represented as an ordinal number from 0 to 6, where 0 represents Sunday and 6 represents Saturday. public var dayOfWeek: Swift.Int? /// The Amazon Resource Name (ARN) of the gateway. Use the [ListGateways] operation to return a list of gateways for your account and Amazon Web Services Region. /// This member is required. public var gatewayARN: Swift.String? /// The hour component of the maintenance start time represented as hh, where hh is the hour (00 to 23). The hour of the day is in the time zone of the gateway. - /// This member is required. public var hourOfDay: Swift.Int? /// The minute component of the maintenance start time represented as mm, where mm is the minute (00 to 59). The minute of the hour is in the time zone of the gateway. - /// This member is required. public var minuteOfHour: Swift.Int? + /// A set of variables indicating the software update preferences for the gateway. Includes AutomaticUpdatePolicy field with the following inputs: ALL_VERSIONS - Enables regular gateway maintenance updates. EMERGENCY_VERSIONS_ONLY - Disables regular gateway maintenance updates. + public var softwareUpdatePreferences: StorageGatewayClientTypes.SoftwareUpdatePreferences? public init( dayOfMonth: Swift.Int? = nil, dayOfWeek: Swift.Int? = nil, gatewayARN: Swift.String? = nil, hourOfDay: Swift.Int? = nil, - minuteOfHour: Swift.Int? = nil + minuteOfHour: Swift.Int? = nil, + softwareUpdatePreferences: StorageGatewayClientTypes.SoftwareUpdatePreferences? = nil ) { self.dayOfMonth = dayOfMonth @@ -5430,6 +5484,7 @@ public struct UpdateMaintenanceStartTimeInput { self.gatewayARN = gatewayARN self.hourOfDay = hourOfDay self.minuteOfHour = minuteOfHour + self.softwareUpdatePreferences = softwareUpdatePreferences } } @@ -5698,7 +5753,7 @@ public struct UpdateSMBSecurityStrategyInput { /// The Amazon Resource Name (ARN) of the gateway. Use the [ListGateways] operation to return a list of gateways for your account and Amazon Web Services Region. /// This member is required. public var gatewayARN: Swift.String? - /// Specifies the type of security strategy. ClientSpecified: if you use this option, requests are established based on what is negotiated by the client. This option is recommended when you want to maximize compatibility across different clients in your environment. Supported only in S3 File Gateway. MandatorySigning: if you use this option, file gateway only allows connections from SMBv2 or SMBv3 clients that have signing enabled. This option works with SMB clients on Microsoft Windows Vista, Windows Server 2008 or newer. MandatoryEncryption: if you use this option, file gateway only allows connections from SMBv3 clients that have encryption enabled. This option is highly recommended for environments that handle sensitive data. This option works with SMB clients on Microsoft Windows 8, Windows Server 2012 or newer. + /// Specifies the type of security strategy. ClientSpecified: If you choose this option, requests are established based on what is negotiated by the client. This option is recommended when you want to maximize compatibility across different clients in your environment. Supported only for S3 File Gateway. MandatorySigning: If you choose this option, File Gateway only allows connections from SMBv2 or SMBv3 clients that have signing enabled. This option works with SMB clients on Microsoft Windows Vista, Windows Server 2008 or newer. MandatoryEncryption: If you choose this option, File Gateway only allows connections from SMBv3 clients that have encryption enabled. This option is recommended for environments that handle sensitive data. This option works with SMB clients on Microsoft Windows 8, Windows Server 2012 or newer. MandatoryEncryptionNoAes128: If you choose this option, File Gateway only allows connections from SMBv3 clients that use 256-bit AES encryption algorithms. 128-bit algorithms are not allowed. This option is recommended for environments that handle sensitive data. It works with SMB clients on Microsoft Windows 8, Windows Server 2012, or later. /// This member is required. public var smbSecurityStrategy: StorageGatewayClientTypes.SMBSecurityStrategy? @@ -7275,6 +7330,7 @@ extension UpdateMaintenanceStartTimeInput { try writer["GatewayARN"].write(value.gatewayARN) try writer["HourOfDay"].write(value.hourOfDay) try writer["MinuteOfHour"].write(value.minuteOfHour) + try writer["SoftwareUpdatePreferences"].write(value.softwareUpdatePreferences, with: StorageGatewayClientTypes.SoftwareUpdatePreferences.write(value:to:)) } } @@ -7870,6 +7926,7 @@ extension DescribeMaintenanceStartTimeOutput { value.gatewayARN = try reader["GatewayARN"].readIfPresent() value.hourOfDay = try reader["HourOfDay"].readIfPresent() value.minuteOfHour = try reader["MinuteOfHour"].readIfPresent() + value.softwareUpdatePreferences = try reader["SoftwareUpdatePreferences"].readIfPresent(with: StorageGatewayClientTypes.SoftwareUpdatePreferences.read(from:)) value.timezone = try reader["Timezone"].readIfPresent() return value } @@ -10097,6 +10154,21 @@ extension StorageGatewayClientTypes.NetworkInterface { } } +extension StorageGatewayClientTypes.SoftwareUpdatePreferences { + + static func write(value: StorageGatewayClientTypes.SoftwareUpdatePreferences?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["AutomaticUpdatePolicy"].write(value.automaticUpdatePolicy) + } + + static func read(from reader: SmithyJSON.Reader) throws -> StorageGatewayClientTypes.SoftwareUpdatePreferences { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = StorageGatewayClientTypes.SoftwareUpdatePreferences() + value.automaticUpdatePolicy = try reader["AutomaticUpdatePolicy"].readIfPresent() + return value + } +} + extension StorageGatewayClientTypes.NFSFileShareInfo { static func read(from reader: SmithyJSON.Reader) throws -> StorageGatewayClientTypes.NFSFileShareInfo { diff --git a/Sources/Services/AWSStorageGateway/Sources/AWSStorageGateway/StorageGatewayClient.swift b/Sources/Services/AWSStorageGateway/Sources/AWSStorageGateway/StorageGatewayClient.swift index 95882975f54..60e0d357f74 100644 --- a/Sources/Services/AWSStorageGateway/Sources/AWSStorageGateway/StorageGatewayClient.swift +++ b/Sources/Services/AWSStorageGateway/Sources/AWSStorageGateway/StorageGatewayClient.swift @@ -2059,12 +2059,14 @@ extension StorageGatewayClient { /// Performs the `DescribeMaintenanceStartTime` operation on the `StorageGateway_20130630` service. /// - /// Returns your gateway's weekly maintenance start time including the day and time of the week. Note that values are in terms of the gateway's time zone. + /// Returns your gateway's maintenance window schedule information, with values for monthly or weekly cadence, specific day and time to begin maintenance, and which types of updates to apply. Time values returned are for the gateway's time zone. /// /// - Parameter DescribeMaintenanceStartTimeInput : A JSON object containing the Amazon Resource Name (ARN) of the gateway. /// /// - Returns: `DescribeMaintenanceStartTimeOutput` : A JSON object containing the following fields: /// + /// * [DescribeMaintenanceStartTimeOutput$SoftwareUpdatePreferences] + /// /// * [DescribeMaintenanceStartTimeOutput$DayOfMonth] /// /// * [DescribeMaintenanceStartTimeOutput$DayOfWeek] @@ -4260,7 +4262,7 @@ extension StorageGatewayClient { /// Performs the `UpdateGatewayInformation` operation on the `StorageGateway_20130630` service. /// - /// Updates a gateway's metadata, which includes the gateway's name and time zone. To specify which gateway to update, use the Amazon Resource Name (ARN) of the gateway in your request. For gateways activated after September 2, 2015, the gateway's ARN contains the gateway ID rather than the gateway name. However, changing the name of the gateway has no effect on the gateway's ARN. + /// Updates a gateway's metadata, which includes the gateway's name, time zone, and metadata cache size. To specify which gateway to update, use the Amazon Resource Name (ARN) of the gateway in your request. For gateways activated after September 2, 2015, the gateway's ARN contains the gateway ID rather than the gateway name. However, changing the name of the gateway has no effect on the gateway's ARN. /// /// - Parameter UpdateGatewayInformationInput : [no documentation found] /// @@ -4360,10 +4362,12 @@ extension StorageGatewayClient { /// Performs the `UpdateMaintenanceStartTime` operation on the `StorageGateway_20130630` service. /// - /// Updates a gateway's weekly maintenance start time information, including day and time of the week. The maintenance time is the time in your gateway's time zone. + /// Updates a gateway's maintenance window schedule, with settings for monthly or weekly cadence, specific day and time to begin maintenance, and which types of updates to apply. Time configuration uses the gateway's time zone. You can pass values for a complete maintenance schedule, or update policy, or both. Previous values will persist for whichever setting you choose not to modify. If an incomplete or invalid maintenance schedule is passed, the entire request will be rejected with an error and no changes will occur. A complete maintenance schedule must include values for both MinuteOfHour and HourOfDay, and either DayOfMonth or DayOfWeek. We recommend keeping maintenance updates turned on, except in specific use cases where the brief disruptions caused by updating the gateway could critically impact your deployment. /// /// - Parameter UpdateMaintenanceStartTimeInput : A JSON object containing the following fields: /// + /// * [UpdateMaintenanceStartTimeInput$SoftwareUpdatePreferences] + /// /// * [UpdateMaintenanceStartTimeInput$DayOfMonth] /// /// * [UpdateMaintenanceStartTimeInput$DayOfWeek] @@ -4628,7 +4632,7 @@ extension StorageGatewayClient { /// Performs the `UpdateSMBSecurityStrategy` operation on the `StorageGateway_20130630` service. /// - /// Updates the SMB security strategy on a file gateway. This action is only supported in file gateways. This API is called Security level in the User Guide. A higher security level can affect performance of the gateway. + /// Updates the SMB security strategy level for an Amazon S3 file gateway. This action is only supported for Amazon S3 file gateways. For information about configuring this setting using the Amazon Web Services console, see [Setting a security level for your gateway](https://docs.aws.amazon.com/filegateway/latest/files3/security-strategy.html) in the Amazon S3 File Gateway User Guide. A higher security strategy level can affect performance of the gateway. /// /// - Parameter UpdateSMBSecurityStrategyInput : [no documentation found] /// diff --git a/Sources/Services/AWSVerifiedPermissions/Sources/AWSVerifiedPermissions/Models.swift b/Sources/Services/AWSVerifiedPermissions/Sources/AWSVerifiedPermissions/Models.swift index 8623430df54..3fb14916394 100644 --- a/Sources/Services/AWSVerifiedPermissions/Sources/AWSVerifiedPermissions/Models.swift +++ b/Sources/Services/AWSVerifiedPermissions/Sources/AWSVerifiedPermissions/Models.swift @@ -300,7 +300,7 @@ extension VerifiedPermissionsClientTypes.CognitoGroupConfigurationItem: Swift.Cu } extension VerifiedPermissionsClientTypes { - /// The configuration for an identity source that represents a connection to an Amazon Cognito user pool used as an identity provider for Verified Permissions. This data type is used as a field that is part of an [Configuration](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_Configuration.html) structure that is used as a parameter to [CreateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreateIdentitySource.html). Example:"CognitoUserPoolConfiguration":{"UserPoolArn":"arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_1a2b3c4d5","ClientIds": ["a1b2c3d4e5f6g7h8i9j0kalbmc"],"groupConfiguration": {"groupEntityType": "MyCorp::Group"}} + /// The configuration for an identity source that represents a connection to an Amazon Cognito user pool used as an identity provider for Verified Permissions. This data type part of a [Configuration](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_Configuration.html) structure that is used as a parameter to [CreateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreateIdentitySource.html). Example:"CognitoUserPoolConfiguration":{"UserPoolArn":"arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_1a2b3c4d5","ClientIds": ["a1b2c3d4e5f6g7h8i9j0kalbmc"],"groupConfiguration": {"groupEntityType": "MyCorp::Group"}} public struct CognitoUserPoolConfiguration { /// The unique application client IDs that are associated with the specified Amazon Cognito user pool. Example: "ClientIds": ["&ExampleCogClientId;"] public var clientIds: [Swift.String]? @@ -387,30 +387,408 @@ extension VerifiedPermissionsClientTypes { } extension VerifiedPermissionsClientTypes { - /// Contains configuration information used when creating a new identity source. At this time, the only valid member of this structure is a Amazon Cognito user pool configuration. Specifies a userPoolArn, a groupConfiguration, and a ClientId. This data type is used as a request parameter for the [CreateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreateIdentitySource.html) operation. + /// The claim in OIDC identity provider tokens that indicates a user's group membership, and the entity type that you want to map it to. For example, this object can map the contents of a groups claim to MyCorp::UserGroup. This data type is part of a [OpenIdConnectConfiguration](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_OpenIdConnectConfiguration.html) structure, which is a parameter of [CreateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreateIdentitySource.html). + public struct OpenIdConnectGroupConfiguration { + /// The token claim that you want Verified Permissions to interpret as group membership. For example, groups. + /// This member is required. + public var groupClaim: Swift.String? + /// The policy store entity type that you want to map your users' group claim to. For example, MyCorp::UserGroup. A group entity type is an entity that can have a user entity type as a member. + /// This member is required. + public var groupEntityType: Swift.String? + + public init( + groupClaim: Swift.String? = nil, + groupEntityType: Swift.String? = nil + ) + { + self.groupClaim = groupClaim + self.groupEntityType = groupEntityType + } + } + +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectGroupConfiguration: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "OpenIdConnectGroupConfiguration(groupClaim: \"CONTENT_REDACTED\", groupEntityType: \"CONTENT_REDACTED\")"} +} + +extension VerifiedPermissionsClientTypes { + /// The configuration of an OpenID Connect (OIDC) identity source for handling access token claims. Contains the claim that you want to identify as the principal in an authorization request, and the values of the aud claim, or audiences, that you want to accept. This data type is part of a [OpenIdConnectTokenSelection](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_OpenIdConnectTokenSelection.html) structure, which is a parameter of [CreateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreateIdentitySource.html). + public struct OpenIdConnectAccessTokenConfiguration { + /// The access token aud claim values that you want to accept in your policy store. For example, https://myapp.example.com, https://myapp2.example.com. + public var audiences: [Swift.String]? + /// The claim that determines the principal in OIDC access tokens. For example, sub. + public var principalIdClaim: Swift.String? + + public init( + audiences: [Swift.String]? = nil, + principalIdClaim: Swift.String? = nil + ) + { + self.audiences = audiences + self.principalIdClaim = principalIdClaim + } + } + +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfiguration: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "OpenIdConnectAccessTokenConfiguration(audiences: \(Swift.String(describing: audiences)), principalIdClaim: \"CONTENT_REDACTED\")"} +} + +extension VerifiedPermissionsClientTypes { + /// The configuration of an OpenID Connect (OIDC) identity source for handling identity (ID) token claims. Contains the claim that you want to identify as the principal in an authorization request, and the values of the aud claim, or audiences, that you want to accept. This data type is part of a [OpenIdConnectTokenSelection](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_OpenIdConnectTokenSelection.html) structure, which is a parameter of [CreateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreateIdentitySource.html). + public struct OpenIdConnectIdentityTokenConfiguration { + /// The ID token audience, or client ID, claim values that you want to accept in your policy store from an OIDC identity provider. For example, 1example23456789, 2example10111213. + public var clientIds: [Swift.String]? + /// The claim that determines the principal in OIDC access tokens. For example, sub. + public var principalIdClaim: Swift.String? + + public init( + clientIds: [Swift.String]? = nil, + principalIdClaim: Swift.String? = nil + ) + { + self.clientIds = clientIds + self.principalIdClaim = principalIdClaim + } + } + +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfiguration: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "OpenIdConnectIdentityTokenConfiguration(clientIds: \(Swift.String(describing: clientIds)), principalIdClaim: \"CONTENT_REDACTED\")"} +} + +extension VerifiedPermissionsClientTypes { + /// The token type that you want to process from your OIDC identity provider. Your policy store can process either identity (ID) or access tokens from a given OIDC identity source. This data type is part of a [OpenIdConnectConfiguration](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_OpenIdConnectConfiguration.html) structure, which is a parameter of [CreateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreateIdentitySource.html). + public enum OpenIdConnectTokenSelection { + /// The OIDC configuration for processing access tokens. Contains allowed audience claims, for example https://auth.example.com, and the claim that you want to map to the principal, for example sub. + case accesstokenonly(VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfiguration) + /// The OIDC configuration for processing identity (ID) tokens. Contains allowed client ID claims, for example 1example23456789, and the claim that you want to map to the principal, for example sub. + case identitytokenonly(VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfiguration) + case sdkUnknown(Swift.String) + } + +} + +extension VerifiedPermissionsClientTypes { + /// Contains configuration details of an OpenID Connect (OIDC) identity provider, or identity source, that Verified Permissions can use to generate entities from authenticated identities. It specifies the issuer URL, token type that you want to use, and policy store entity details. This data type is part of a [Configuration](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_Configuration.html) structure, which is a parameter to [CreateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreateIdentitySource.html). + public struct OpenIdConnectConfiguration { + /// A descriptive string that you want to prefix to user entities from your OIDC identity provider. For example, if you set an entityIdPrefix of MyOIDCProvider, you can reference principals in your policies in the format MyCorp::User::MyOIDCProvider|Carlos. + public var entityIdPrefix: Swift.String? + /// The claim in OIDC identity provider tokens that indicates a user's group membership, and the entity type that you want to map it to. For example, this object can map the contents of a groups claim to MyCorp::UserGroup. + public var groupConfiguration: VerifiedPermissionsClientTypes.OpenIdConnectGroupConfiguration? + /// The issuer URL of an OIDC identity provider. This URL must have an OIDC discovery endpoint at the path .well-known/openid-configuration. + /// This member is required. + public var issuer: Swift.String? + /// The token type that you want to process from your OIDC identity provider. Your policy store can process either identity (ID) or access tokens from a given OIDC identity source. + /// This member is required. + public var tokenSelection: VerifiedPermissionsClientTypes.OpenIdConnectTokenSelection? + + public init( + entityIdPrefix: Swift.String? = nil, + groupConfiguration: VerifiedPermissionsClientTypes.OpenIdConnectGroupConfiguration? = nil, + issuer: Swift.String? = nil, + tokenSelection: VerifiedPermissionsClientTypes.OpenIdConnectTokenSelection? = nil + ) + { + self.entityIdPrefix = entityIdPrefix + self.groupConfiguration = groupConfiguration + self.issuer = issuer + self.tokenSelection = tokenSelection + } + } + +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectConfiguration: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "OpenIdConnectConfiguration(groupConfiguration: \(Swift.String(describing: groupConfiguration)), issuer: \(Swift.String(describing: issuer)), tokenSelection: \(Swift.String(describing: tokenSelection)), entityIdPrefix: \"CONTENT_REDACTED\")"} +} + +extension VerifiedPermissionsClientTypes { + /// Contains configuration information used when creating a new identity source. This data type is used as a request parameter for the [CreateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreateIdentitySource.html) operation. public enum Configuration { /// Contains configuration details of a Amazon Cognito user pool that Verified Permissions can use as a source of authenticated identities as entities. It specifies the [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) of a Amazon Cognito user pool and one or more application client IDs. Example: "configuration":{"cognitoUserPoolConfiguration":{"userPoolArn":"arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_1a2b3c4d5","clientIds": ["a1b2c3d4e5f6g7h8i9j0kalbmc"],"groupConfiguration": {"groupEntityType": "MyCorp::Group"}}} case cognitouserpoolconfiguration(VerifiedPermissionsClientTypes.CognitoUserPoolConfiguration) + /// Contains configuration details of an OpenID Connect (OIDC) identity provider, or identity source, that Verified Permissions can use to generate entities from authenticated identities. It specifies the issuer URL, token type that you want to use, and policy store entity details. Example:"configuration":{"openIdConnectConfiguration":{"issuer":"https://auth.example.com","tokenSelection":{"accessTokenOnly":{"audiences":["https://myapp.example.com","https://myapp2.example.com"],"principalIdClaim":"sub"}},"entityIdPrefix":"MyOIDCProvider","groupConfiguration":{"groupClaim":"groups","groupEntityType":"MyCorp::UserGroup"}}} + case openidconnectconfiguration(VerifiedPermissionsClientTypes.OpenIdConnectConfiguration) + case sdkUnknown(Swift.String) + } + +} + +extension VerifiedPermissionsClientTypes { + /// The claim in OIDC identity provider tokens that indicates a user's group membership, and the entity type that you want to map it to. For example, this object can map the contents of a groups claim to MyCorp::UserGroup. This data type is part of a [OpenIdConnectConfigurationDetail](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_OpenIdConnectConfigurationDetail.html) structure, which is a parameter of [GetIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_GetIdentitySource.html). + public struct OpenIdConnectGroupConfigurationDetail { + /// The token claim that you want Verified Permissions to interpret as group membership. For example, groups. + /// This member is required. + public var groupClaim: Swift.String? + /// The policy store entity type that you want to map your users' group claim to. For example, MyCorp::UserGroup. A group entity type is an entity that can have a user entity type as a member. + /// This member is required. + public var groupEntityType: Swift.String? + + public init( + groupClaim: Swift.String? = nil, + groupEntityType: Swift.String? = nil + ) + { + self.groupClaim = groupClaim + self.groupEntityType = groupEntityType + } + } + +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectGroupConfigurationDetail: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "OpenIdConnectGroupConfigurationDetail(groupClaim: \"CONTENT_REDACTED\", groupEntityType: \"CONTENT_REDACTED\")"} +} + +extension VerifiedPermissionsClientTypes { + /// The configuration of an OpenID Connect (OIDC) identity source for handling access token claims. Contains the claim that you want to identify as the principal in an authorization request, and the values of the aud claim, or audiences, that you want to accept. This data type is part of a [OpenIdConnectTokenSelectionDetail](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_OpenIdConnectTokenSelectionDetail.html) structure, which is a parameter of [GetIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_GetIdentitySource.html). + public struct OpenIdConnectAccessTokenConfigurationDetail { + /// The access token aud claim values that you want to accept in your policy store. For example, https://myapp.example.com, https://myapp2.example.com. + public var audiences: [Swift.String]? + /// The claim that determines the principal in OIDC access tokens. For example, sub. + public var principalIdClaim: Swift.String? + + public init( + audiences: [Swift.String]? = nil, + principalIdClaim: Swift.String? = nil + ) + { + self.audiences = audiences + self.principalIdClaim = principalIdClaim + } + } + +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfigurationDetail: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "OpenIdConnectAccessTokenConfigurationDetail(audiences: \(Swift.String(describing: audiences)), principalIdClaim: \"CONTENT_REDACTED\")"} +} + +extension VerifiedPermissionsClientTypes { + /// The configuration of an OpenID Connect (OIDC) identity source for handling identity (ID) token claims. Contains the claim that you want to identify as the principal in an authorization request, and the values of the aud claim, or audiences, that you want to accept. This data type is part of a [OpenIdConnectTokenSelectionDetail](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_OpenIdConnectTokenSelectionDetail.html) structure, which is a parameter of [GetIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_GetIdentitySource.html). + public struct OpenIdConnectIdentityTokenConfigurationDetail { + /// The ID token audience, or client ID, claim values that you want to accept in your policy store from an OIDC identity provider. For example, 1example23456789, 2example10111213. + public var clientIds: [Swift.String]? + /// The claim that determines the principal in OIDC access tokens. For example, sub. + public var principalIdClaim: Swift.String? + + public init( + clientIds: [Swift.String]? = nil, + principalIdClaim: Swift.String? = nil + ) + { + self.clientIds = clientIds + self.principalIdClaim = principalIdClaim + } + } + +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfigurationDetail: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "OpenIdConnectIdentityTokenConfigurationDetail(clientIds: \(Swift.String(describing: clientIds)), principalIdClaim: \"CONTENT_REDACTED\")"} +} + +extension VerifiedPermissionsClientTypes { + /// The token type that you want to process from your OIDC identity provider. Your policy store can process either identity (ID) or access tokens from a given OIDC identity source. This data type is part of a [OpenIdConnectConfigurationDetail](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_OpenIdConnectConfigurationDetail.html) structure, which is a parameter of [GetIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_GetIdentitySource.html). + public enum OpenIdConnectTokenSelectionDetail { + /// The OIDC configuration for processing access tokens. Contains allowed audience claims, for example https://auth.example.com, and the claim that you want to map to the principal, for example sub. + case accesstokenonly(VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfigurationDetail) + /// The OIDC configuration for processing identity (ID) tokens. Contains allowed client ID claims, for example 1example23456789, and the claim that you want to map to the principal, for example sub. + case identitytokenonly(VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfigurationDetail) case sdkUnknown(Swift.String) } } +extension VerifiedPermissionsClientTypes { + /// Contains configuration details of an OpenID Connect (OIDC) identity provider, or identity source, that Verified Permissions can use to generate entities from authenticated identities. It specifies the issuer URL, token type that you want to use, and policy store entity details. This data type is part of a [ConfigurationDetail](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_ConfigurationDetail.html) structure, which is a parameter to [GetIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_GetIdentitySource.html). + public struct OpenIdConnectConfigurationDetail { + /// A descriptive string that you want to prefix to user entities from your OIDC identity provider. For example, if you set an entityIdPrefix of MyOIDCProvider, you can reference principals in your policies in the format MyCorp::User::MyOIDCProvider|Carlos. + public var entityIdPrefix: Swift.String? + /// The claim in OIDC identity provider tokens that indicates a user's group membership, and the entity type that you want to map it to. For example, this object can map the contents of a groups claim to MyCorp::UserGroup. + public var groupConfiguration: VerifiedPermissionsClientTypes.OpenIdConnectGroupConfigurationDetail? + /// The issuer URL of an OIDC identity provider. This URL must have an OIDC discovery endpoint at the path .well-known/openid-configuration. + /// This member is required. + public var issuer: Swift.String? + /// The token type that you want to process from your OIDC identity provider. Your policy store can process either identity (ID) or access tokens from a given OIDC identity source. + /// This member is required. + public var tokenSelection: VerifiedPermissionsClientTypes.OpenIdConnectTokenSelectionDetail? + + public init( + entityIdPrefix: Swift.String? = nil, + groupConfiguration: VerifiedPermissionsClientTypes.OpenIdConnectGroupConfigurationDetail? = nil, + issuer: Swift.String? = nil, + tokenSelection: VerifiedPermissionsClientTypes.OpenIdConnectTokenSelectionDetail? = nil + ) + { + self.entityIdPrefix = entityIdPrefix + self.groupConfiguration = groupConfiguration + self.issuer = issuer + self.tokenSelection = tokenSelection + } + } + +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectConfigurationDetail: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "OpenIdConnectConfigurationDetail(groupConfiguration: \(Swift.String(describing: groupConfiguration)), issuer: \(Swift.String(describing: issuer)), tokenSelection: \(Swift.String(describing: tokenSelection)), entityIdPrefix: \"CONTENT_REDACTED\")"} +} + extension VerifiedPermissionsClientTypes { /// Contains configuration information about an identity source. This data type is a response parameter to the [GetIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_GetIdentitySource.html) operation. public enum ConfigurationDetail { /// Contains configuration details of a Amazon Cognito user pool that Verified Permissions can use as a source of authenticated identities as entities. It specifies the [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) of a Amazon Cognito user pool, the policy store entity that you want to assign to user groups, and one or more application client IDs. Example: "configuration":{"cognitoUserPoolConfiguration":{"userPoolArn":"arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_1a2b3c4d5","clientIds": ["a1b2c3d4e5f6g7h8i9j0kalbmc"],"groupConfiguration": {"groupEntityType": "MyCorp::Group"}}} case cognitouserpoolconfiguration(VerifiedPermissionsClientTypes.CognitoUserPoolConfigurationDetail) + /// Contains configuration details of an OpenID Connect (OIDC) identity provider, or identity source, that Verified Permissions can use to generate entities from authenticated identities. It specifies the issuer URL, token type that you want to use, and policy store entity details. Example:"configuration":{"openIdConnectConfiguration":{"issuer":"https://auth.example.com","tokenSelection":{"accessTokenOnly":{"audiences":["https://myapp.example.com","https://myapp2.example.com"],"principalIdClaim":"sub"}},"entityIdPrefix":"MyOIDCProvider","groupConfiguration":{"groupClaim":"groups","groupEntityType":"MyCorp::UserGroup"}}} + case openidconnectconfiguration(VerifiedPermissionsClientTypes.OpenIdConnectConfigurationDetail) + case sdkUnknown(Swift.String) + } + +} + +extension VerifiedPermissionsClientTypes { + /// The claim in OIDC identity provider tokens that indicates a user's group membership, and the entity type that you want to map it to. For example, this object can map the contents of a groups claim to MyCorp::UserGroup. This data type is part of a [OpenIdConnectConfigurationItem](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_OpenIdConnectConfigurationItem.html) structure, which is a parameter of [ListIdentitySourcea](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_ListIdentitySources.html). + public struct OpenIdConnectGroupConfigurationItem { + /// The token claim that you want Verified Permissions to interpret as group membership. For example, groups. + /// This member is required. + public var groupClaim: Swift.String? + /// The policy store entity type that you want to map your users' group claim to. For example, MyCorp::UserGroup. A group entity type is an entity that can have a user entity type as a member. + /// This member is required. + public var groupEntityType: Swift.String? + + public init( + groupClaim: Swift.String? = nil, + groupEntityType: Swift.String? = nil + ) + { + self.groupClaim = groupClaim + self.groupEntityType = groupEntityType + } + } + +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectGroupConfigurationItem: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "OpenIdConnectGroupConfigurationItem(groupClaim: \"CONTENT_REDACTED\", groupEntityType: \"CONTENT_REDACTED\")"} +} + +extension VerifiedPermissionsClientTypes { + /// The configuration of an OpenID Connect (OIDC) identity source for handling access token claims. Contains the claim that you want to identify as the principal in an authorization request, and the values of the aud claim, or audiences, that you want to accept. This data type is part of a [OpenIdConnectTokenSelectionItem](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_OpenIdConnectTokenSelectionItem.html) structure, which is a parameter of [ListIdentitySources](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_ListIdentitySources.html). + public struct OpenIdConnectAccessTokenConfigurationItem { + /// The access token aud claim values that you want to accept in your policy store. For example, https://myapp.example.com, https://myapp2.example.com. + public var audiences: [Swift.String]? + /// The claim that determines the principal in OIDC access tokens. For example, sub. + public var principalIdClaim: Swift.String? + + public init( + audiences: [Swift.String]? = nil, + principalIdClaim: Swift.String? = nil + ) + { + self.audiences = audiences + self.principalIdClaim = principalIdClaim + } + } + +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfigurationItem: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "OpenIdConnectAccessTokenConfigurationItem(audiences: \(Swift.String(describing: audiences)), principalIdClaim: \"CONTENT_REDACTED\")"} +} + +extension VerifiedPermissionsClientTypes { + /// The configuration of an OpenID Connect (OIDC) identity source for handling identity (ID) token claims. Contains the claim that you want to identify as the principal in an authorization request, and the values of the aud claim, or audiences, that you want to accept. This data type is part of a [OpenIdConnectTokenSelectionItem](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_OpenIdConnectTokenSelectionItem.html) structure, which is a parameter of [ListIdentitySources](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_ListIdentitySources.html). + public struct OpenIdConnectIdentityTokenConfigurationItem { + /// The ID token audience, or client ID, claim values that you want to accept in your policy store from an OIDC identity provider. For example, 1example23456789, 2example10111213. + public var clientIds: [Swift.String]? + /// The claim that determines the principal in OIDC access tokens. For example, sub. + public var principalIdClaim: Swift.String? + + public init( + clientIds: [Swift.String]? = nil, + principalIdClaim: Swift.String? = nil + ) + { + self.clientIds = clientIds + self.principalIdClaim = principalIdClaim + } + } + +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfigurationItem: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "OpenIdConnectIdentityTokenConfigurationItem(clientIds: \(Swift.String(describing: clientIds)), principalIdClaim: \"CONTENT_REDACTED\")"} +} + +extension VerifiedPermissionsClientTypes { + /// The token type that you want to process from your OIDC identity provider. Your policy store can process either identity (ID) or access tokens from a given OIDC identity source. This data type is part of a [OpenIdConnectConfigurationItem](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_OpenIdConnectConfigurationItem.html) structure, which is a parameter of [ListIdentitySources](http://amazonaws.com/verifiedpermissions/latest/apireference/API_ListIdentitySources.html). + public enum OpenIdConnectTokenSelectionItem { + /// The OIDC configuration for processing access tokens. Contains allowed audience claims, for example https://auth.example.com, and the claim that you want to map to the principal, for example sub. + case accesstokenonly(VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfigurationItem) + /// The OIDC configuration for processing identity (ID) tokens. Contains allowed client ID claims, for example 1example23456789, and the claim that you want to map to the principal, for example sub. + case identitytokenonly(VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfigurationItem) case sdkUnknown(Swift.String) } } +extension VerifiedPermissionsClientTypes { + /// Contains configuration details of an OpenID Connect (OIDC) identity provider, or identity source, that Verified Permissions can use to generate entities from authenticated identities. It specifies the issuer URL, token type that you want to use, and policy store entity details. This data type is part of a [ConfigurationItem](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_ConfigurationDetail.html) structure, which is a parameter to [ListIdentitySources](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_ListIdentitySources.html). + public struct OpenIdConnectConfigurationItem { + /// A descriptive string that you want to prefix to user entities from your OIDC identity provider. For example, if you set an entityIdPrefix of MyOIDCProvider, you can reference principals in your policies in the format MyCorp::User::MyOIDCProvider|Carlos. + public var entityIdPrefix: Swift.String? + /// The claim in OIDC identity provider tokens that indicates a user's group membership, and the entity type that you want to map it to. For example, this object can map the contents of a groups claim to MyCorp::UserGroup. + public var groupConfiguration: VerifiedPermissionsClientTypes.OpenIdConnectGroupConfigurationItem? + /// The issuer URL of an OIDC identity provider. This URL must have an OIDC discovery endpoint at the path .well-known/openid-configuration. + /// This member is required. + public var issuer: Swift.String? + /// The token type that you want to process from your OIDC identity provider. Your policy store can process either identity (ID) or access tokens from a given OIDC identity source. + /// This member is required. + public var tokenSelection: VerifiedPermissionsClientTypes.OpenIdConnectTokenSelectionItem? + + public init( + entityIdPrefix: Swift.String? = nil, + groupConfiguration: VerifiedPermissionsClientTypes.OpenIdConnectGroupConfigurationItem? = nil, + issuer: Swift.String? = nil, + tokenSelection: VerifiedPermissionsClientTypes.OpenIdConnectTokenSelectionItem? = nil + ) + { + self.entityIdPrefix = entityIdPrefix + self.groupConfiguration = groupConfiguration + self.issuer = issuer + self.tokenSelection = tokenSelection + } + } + +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectConfigurationItem: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "OpenIdConnectConfigurationItem(groupConfiguration: \(Swift.String(describing: groupConfiguration)), issuer: \(Swift.String(describing: issuer)), tokenSelection: \(Swift.String(describing: tokenSelection)), entityIdPrefix: \"CONTENT_REDACTED\")"} +} + extension VerifiedPermissionsClientTypes { /// Contains configuration information about an identity source. This data type is a response parameter to the [ListIdentitySources](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_ListIdentitySources.html) operation. public enum ConfigurationItem { /// Contains configuration details of a Amazon Cognito user pool that Verified Permissions can use as a source of authenticated identities as entities. It specifies the [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) of a Amazon Cognito user pool, the policy store entity that you want to assign to user groups, and one or more application client IDs. Example: "configuration":{"cognitoUserPoolConfiguration":{"userPoolArn":"arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_1a2b3c4d5","clientIds": ["a1b2c3d4e5f6g7h8i9j0kalbmc"],"groupConfiguration": {"groupEntityType": "MyCorp::Group"}}} case cognitouserpoolconfiguration(VerifiedPermissionsClientTypes.CognitoUserPoolConfigurationItem) + /// Contains configuration details of an OpenID Connect (OIDC) identity provider, or identity source, that Verified Permissions can use to generate entities from authenticated identities. It specifies the issuer URL, token type that you want to use, and policy store entity details. Example:"configuration":{"openIdConnectConfiguration":{"issuer":"https://auth.example.com","tokenSelection":{"accessTokenOnly":{"audiences":["https://myapp.example.com","https://myapp2.example.com"],"principalIdClaim":"sub"}},"entityIdPrefix":"MyOIDCProvider","groupConfiguration":{"groupClaim":"groups","groupEntityType":"MyCorp::UserGroup"}}} + case openidconnectconfiguration(VerifiedPermissionsClientTypes.OpenIdConnectConfigurationItem) case sdkUnknown(Swift.String) } @@ -513,7 +891,7 @@ public struct ServiceQuotaExceededException: ClientRuntime.ModeledError, AWSClie public struct CreateIdentitySourceInput { /// Specifies a unique, case-sensitive ID that you provide to ensure the idempotency of the request. This lets you safely retry the request without accidentally performing the same operation a second time. Passing the same value to a later call to an operation requires that you also pass the same value for all other parameters. We recommend that you use a [UUID type of value.](https://wikipedia.org/wiki/Universally_unique_identifier). If you don't provide this value, then Amazon Web Services generates a random one for you. If you retry the operation with the same ClientToken, but with different parameters, the retry fails with an ConflictException error. Verified Permissions recognizes a ClientToken for eight hours. After eight hours, the next request with the same parameters performs the operation again regardless of the value of ClientToken. public var clientToken: Swift.String? - /// Specifies the details required to communicate with the identity provider (IdP) associated with this identity source. At this time, the only valid member of this structure is a Amazon Cognito user pool configuration. You must specify a UserPoolArn, and optionally, a ClientId. + /// Specifies the details required to communicate with the identity provider (IdP) associated with this identity source. /// This member is required. public var configuration: VerifiedPermissionsClientTypes.Configuration? /// Specifies the ID of the policy store in which you want to store this identity source. Only policies and requests made using this policy store can reference identities from the identity provider configured in the new identity source. @@ -1645,10 +2023,136 @@ extension VerifiedPermissionsClientTypes { } extension VerifiedPermissionsClientTypes { - /// Contains an updated configuration to replace the configuration in an existing identity source. At this time, the only valid member of this structure is a Amazon Cognito user pool configuration. You must specify a userPoolArn, and optionally, a ClientId. + /// The claim in OIDC identity provider tokens that indicates a user's group membership, and the entity type that you want to map it to. For example, this object can map the contents of a groups claim to MyCorp::UserGroup. This data type is part of a [UpdateOpenIdConnectConfiguration](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_UpdateOpenIdConnectConfiguration.html) structure, which is a parameter to [UpdateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_UpdateIdentitySource.html). + public struct UpdateOpenIdConnectGroupConfiguration { + /// The token claim that you want Verified Permissions to interpret as group membership. For example, groups. + /// This member is required. + public var groupClaim: Swift.String? + /// The policy store entity type that you want to map your users' group claim to. For example, MyCorp::UserGroup. A group entity type is an entity that can have a user entity type as a member. + /// This member is required. + public var groupEntityType: Swift.String? + + public init( + groupClaim: Swift.String? = nil, + groupEntityType: Swift.String? = nil + ) + { + self.groupClaim = groupClaim + self.groupEntityType = groupEntityType + } + } + +} + +extension VerifiedPermissionsClientTypes.UpdateOpenIdConnectGroupConfiguration: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "UpdateOpenIdConnectGroupConfiguration(groupClaim: \"CONTENT_REDACTED\", groupEntityType: \"CONTENT_REDACTED\")"} +} + +extension VerifiedPermissionsClientTypes { + /// The configuration of an OpenID Connect (OIDC) identity source for handling access token claims. Contains the claim that you want to identify as the principal in an authorization request, and the values of the aud claim, or audiences, that you want to accept. This data type is part of a [UpdateOpenIdConnectTokenSelection](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_UpdateOpenIdConnectTokenSelection.html) structure, which is a parameter to [UpdateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_UpdateIdentitySource.html). + public struct UpdateOpenIdConnectAccessTokenConfiguration { + /// The access token aud claim values that you want to accept in your policy store. For example, https://myapp.example.com, https://myapp2.example.com. + public var audiences: [Swift.String]? + /// The claim that determines the principal in OIDC access tokens. For example, sub. + public var principalIdClaim: Swift.String? + + public init( + audiences: [Swift.String]? = nil, + principalIdClaim: Swift.String? = nil + ) + { + self.audiences = audiences + self.principalIdClaim = principalIdClaim + } + } + +} + +extension VerifiedPermissionsClientTypes.UpdateOpenIdConnectAccessTokenConfiguration: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "UpdateOpenIdConnectAccessTokenConfiguration(audiences: \(Swift.String(describing: audiences)), principalIdClaim: \"CONTENT_REDACTED\")"} +} + +extension VerifiedPermissionsClientTypes { + /// The configuration of an OpenID Connect (OIDC) identity source for handling identity (ID) token claims. Contains the claim that you want to identify as the principal in an authorization request, and the values of the aud claim, or audiences, that you want to accept. This data type is part of a [UpdateOpenIdConnectTokenSelection](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_UpdateOpenIdConnectTokenSelection.html) structure, which is a parameter to [UpdateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_UpdateIdentitySource.html). + public struct UpdateOpenIdConnectIdentityTokenConfiguration { + /// The ID token audience, or client ID, claim values that you want to accept in your policy store from an OIDC identity provider. For example, 1example23456789, 2example10111213. + public var clientIds: [Swift.String]? + /// The claim that determines the principal in OIDC access tokens. For example, sub. + public var principalIdClaim: Swift.String? + + public init( + clientIds: [Swift.String]? = nil, + principalIdClaim: Swift.String? = nil + ) + { + self.clientIds = clientIds + self.principalIdClaim = principalIdClaim + } + } + +} + +extension VerifiedPermissionsClientTypes.UpdateOpenIdConnectIdentityTokenConfiguration: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "UpdateOpenIdConnectIdentityTokenConfiguration(clientIds: \(Swift.String(describing: clientIds)), principalIdClaim: \"CONTENT_REDACTED\")"} +} + +extension VerifiedPermissionsClientTypes { + /// The token type that you want to process from your OIDC identity provider. Your policy store can process either identity (ID) or access tokens from a given OIDC identity source. This data type is part of a [UpdateOpenIdConnectConfiguration](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_UpdateOpenIdConnectConfiguration.html) structure, which is a parameter to [UpdateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_UpdateIdentitySource.html). + public enum UpdateOpenIdConnectTokenSelection { + /// The OIDC configuration for processing access tokens. Contains allowed audience claims, for example https://auth.example.com, and the claim that you want to map to the principal, for example sub. + case accesstokenonly(VerifiedPermissionsClientTypes.UpdateOpenIdConnectAccessTokenConfiguration) + /// The OIDC configuration for processing identity (ID) tokens. Contains allowed client ID claims, for example 1example23456789, and the claim that you want to map to the principal, for example sub. + case identitytokenonly(VerifiedPermissionsClientTypes.UpdateOpenIdConnectIdentityTokenConfiguration) + case sdkUnknown(Swift.String) + } + +} + +extension VerifiedPermissionsClientTypes { + /// Contains configuration details of an OpenID Connect (OIDC) identity provider, or identity source, that Verified Permissions can use to generate entities from authenticated identities. It specifies the issuer URL, token type that you want to use, and policy store entity details. This data type is part of a [UpdateConfiguration](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_UpdateConfiguration.html) structure, which is a parameter to [UpdateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_UpdateIdentitySource.html). + public struct UpdateOpenIdConnectConfiguration { + /// A descriptive string that you want to prefix to user entities from your OIDC identity provider. For example, if you set an entityIdPrefix of MyOIDCProvider, you can reference principals in your policies in the format MyCorp::User::MyOIDCProvider|Carlos. + public var entityIdPrefix: Swift.String? + /// The claim in OIDC identity provider tokens that indicates a user's group membership, and the entity type that you want to map it to. For example, this object can map the contents of a groups claim to MyCorp::UserGroup. + public var groupConfiguration: VerifiedPermissionsClientTypes.UpdateOpenIdConnectGroupConfiguration? + /// The issuer URL of an OIDC identity provider. This URL must have an OIDC discovery endpoint at the path .well-known/openid-configuration. + /// This member is required. + public var issuer: Swift.String? + /// The token type that you want to process from your OIDC identity provider. Your policy store can process either identity (ID) or access tokens from a given OIDC identity source. + /// This member is required. + public var tokenSelection: VerifiedPermissionsClientTypes.UpdateOpenIdConnectTokenSelection? + + public init( + entityIdPrefix: Swift.String? = nil, + groupConfiguration: VerifiedPermissionsClientTypes.UpdateOpenIdConnectGroupConfiguration? = nil, + issuer: Swift.String? = nil, + tokenSelection: VerifiedPermissionsClientTypes.UpdateOpenIdConnectTokenSelection? = nil + ) + { + self.entityIdPrefix = entityIdPrefix + self.groupConfiguration = groupConfiguration + self.issuer = issuer + self.tokenSelection = tokenSelection + } + } + +} + +extension VerifiedPermissionsClientTypes.UpdateOpenIdConnectConfiguration: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "UpdateOpenIdConnectConfiguration(groupConfiguration: \(Swift.String(describing: groupConfiguration)), issuer: \(Swift.String(describing: issuer)), tokenSelection: \(Swift.String(describing: tokenSelection)), entityIdPrefix: \"CONTENT_REDACTED\")"} +} + +extension VerifiedPermissionsClientTypes { + /// Contains an update to replace the configuration in an existing identity source. public enum UpdateConfiguration { /// Contains configuration details of a Amazon Cognito user pool. case cognitouserpoolconfiguration(VerifiedPermissionsClientTypes.UpdateCognitoUserPoolConfiguration) + /// Contains configuration details of an OpenID Connect (OIDC) identity provider, or identity source, that Verified Permissions can use to generate entities from authenticated identities. It specifies the issuer URL, token type that you want to use, and policy store entity details. + case openidconnectconfiguration(VerifiedPermissionsClientTypes.UpdateOpenIdConnectConfiguration) case sdkUnknown(Swift.String) } @@ -2595,7 +3099,7 @@ extension VerifiedPermissionsClientTypes { /// The identifier of the entity. /// This member is required. public var identifier: VerifiedPermissionsClientTypes.EntityIdentifier? - /// The parents in the hierarchy that contains the entity. + /// The parent entities in the hierarchy that contains the entity. A principal or resource entity can be defined with at most 99 transitive parents per authorization request. A transitive parent is an entity in the hierarchy of entities including all direct parents, and parents of parents. For example, a user can be a member of 91 groups if one of those groups is a member of eight groups, for a total of 100: one entity, 91 entity parents, and eight parents of parents. public var parents: [VerifiedPermissionsClientTypes.EntityIdentifier]? public init( @@ -4444,12 +4948,76 @@ extension VerifiedPermissionsClientTypes.ConfigurationDetail { switch name { case "cognitoUserPoolConfiguration": return .cognitouserpoolconfiguration(try reader["cognitoUserPoolConfiguration"].read(with: VerifiedPermissionsClientTypes.CognitoUserPoolConfigurationDetail.read(from:))) + case "openIdConnectConfiguration": + return .openidconnectconfiguration(try reader["openIdConnectConfiguration"].read(with: VerifiedPermissionsClientTypes.OpenIdConnectConfigurationDetail.read(from:))) default: return .sdkUnknown(name ?? "") } } } +extension VerifiedPermissionsClientTypes.OpenIdConnectConfigurationDetail { + + static func read(from reader: SmithyJSON.Reader) throws -> VerifiedPermissionsClientTypes.OpenIdConnectConfigurationDetail { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = VerifiedPermissionsClientTypes.OpenIdConnectConfigurationDetail() + value.issuer = try reader["issuer"].readIfPresent() + value.entityIdPrefix = try reader["entityIdPrefix"].readIfPresent() + value.groupConfiguration = try reader["groupConfiguration"].readIfPresent(with: VerifiedPermissionsClientTypes.OpenIdConnectGroupConfigurationDetail.read(from:)) + value.tokenSelection = try reader["tokenSelection"].readIfPresent(with: VerifiedPermissionsClientTypes.OpenIdConnectTokenSelectionDetail.read(from:)) + return value + } +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectTokenSelectionDetail { + + static func read(from reader: SmithyJSON.Reader) throws -> VerifiedPermissionsClientTypes.OpenIdConnectTokenSelectionDetail { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "accessTokenOnly": + return .accesstokenonly(try reader["accessTokenOnly"].read(with: VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfigurationDetail.read(from:))) + case "identityTokenOnly": + return .identitytokenonly(try reader["identityTokenOnly"].read(with: VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfigurationDetail.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfigurationDetail { + + static func read(from reader: SmithyJSON.Reader) throws -> VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfigurationDetail { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfigurationDetail() + value.principalIdClaim = try reader["principalIdClaim"].readIfPresent() ?? "sub" + value.clientIds = try reader["clientIds"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfigurationDetail { + + static func read(from reader: SmithyJSON.Reader) throws -> VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfigurationDetail { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfigurationDetail() + value.principalIdClaim = try reader["principalIdClaim"].readIfPresent() ?? "sub" + value.audiences = try reader["audiences"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectGroupConfigurationDetail { + + static func read(from reader: SmithyJSON.Reader) throws -> VerifiedPermissionsClientTypes.OpenIdConnectGroupConfigurationDetail { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = VerifiedPermissionsClientTypes.OpenIdConnectGroupConfigurationDetail() + value.groupClaim = try reader["groupClaim"].readIfPresent() + value.groupEntityType = try reader["groupEntityType"].readIfPresent() + return value + } +} + extension VerifiedPermissionsClientTypes.CognitoUserPoolConfigurationDetail { static func read(from reader: SmithyJSON.Reader) throws -> VerifiedPermissionsClientTypes.CognitoUserPoolConfigurationDetail { @@ -4551,12 +5119,76 @@ extension VerifiedPermissionsClientTypes.ConfigurationItem { switch name { case "cognitoUserPoolConfiguration": return .cognitouserpoolconfiguration(try reader["cognitoUserPoolConfiguration"].read(with: VerifiedPermissionsClientTypes.CognitoUserPoolConfigurationItem.read(from:))) + case "openIdConnectConfiguration": + return .openidconnectconfiguration(try reader["openIdConnectConfiguration"].read(with: VerifiedPermissionsClientTypes.OpenIdConnectConfigurationItem.read(from:))) default: return .sdkUnknown(name ?? "") } } } +extension VerifiedPermissionsClientTypes.OpenIdConnectConfigurationItem { + + static func read(from reader: SmithyJSON.Reader) throws -> VerifiedPermissionsClientTypes.OpenIdConnectConfigurationItem { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = VerifiedPermissionsClientTypes.OpenIdConnectConfigurationItem() + value.issuer = try reader["issuer"].readIfPresent() + value.entityIdPrefix = try reader["entityIdPrefix"].readIfPresent() + value.groupConfiguration = try reader["groupConfiguration"].readIfPresent(with: VerifiedPermissionsClientTypes.OpenIdConnectGroupConfigurationItem.read(from:)) + value.tokenSelection = try reader["tokenSelection"].readIfPresent(with: VerifiedPermissionsClientTypes.OpenIdConnectTokenSelectionItem.read(from:)) + return value + } +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectTokenSelectionItem { + + static func read(from reader: SmithyJSON.Reader) throws -> VerifiedPermissionsClientTypes.OpenIdConnectTokenSelectionItem { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + let name = reader.children.filter { $0.hasContent && $0.nodeInfo.name != "__type" }.first?.nodeInfo.name + switch name { + case "accessTokenOnly": + return .accesstokenonly(try reader["accessTokenOnly"].read(with: VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfigurationItem.read(from:))) + case "identityTokenOnly": + return .identitytokenonly(try reader["identityTokenOnly"].read(with: VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfigurationItem.read(from:))) + default: + return .sdkUnknown(name ?? "") + } + } +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfigurationItem { + + static func read(from reader: SmithyJSON.Reader) throws -> VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfigurationItem { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfigurationItem() + value.principalIdClaim = try reader["principalIdClaim"].readIfPresent() ?? "sub" + value.clientIds = try reader["clientIds"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfigurationItem { + + static func read(from reader: SmithyJSON.Reader) throws -> VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfigurationItem { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfigurationItem() + value.principalIdClaim = try reader["principalIdClaim"].readIfPresent() ?? "sub" + value.audiences = try reader["audiences"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectGroupConfigurationItem { + + static func read(from reader: SmithyJSON.Reader) throws -> VerifiedPermissionsClientTypes.OpenIdConnectGroupConfigurationItem { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = VerifiedPermissionsClientTypes.OpenIdConnectGroupConfigurationItem() + value.groupClaim = try reader["groupClaim"].readIfPresent() + value.groupEntityType = try reader["groupEntityType"].readIfPresent() + return value + } +} + extension VerifiedPermissionsClientTypes.CognitoUserPoolConfigurationItem { static func read(from reader: SmithyJSON.Reader) throws -> VerifiedPermissionsClientTypes.CognitoUserPoolConfigurationItem { @@ -4730,12 +5362,67 @@ extension VerifiedPermissionsClientTypes.Configuration { switch value { case let .cognitouserpoolconfiguration(cognitouserpoolconfiguration): try writer["cognitoUserPoolConfiguration"].write(cognitouserpoolconfiguration, with: VerifiedPermissionsClientTypes.CognitoUserPoolConfiguration.write(value:to:)) + case let .openidconnectconfiguration(openidconnectconfiguration): + try writer["openIdConnectConfiguration"].write(openidconnectconfiguration, with: VerifiedPermissionsClientTypes.OpenIdConnectConfiguration.write(value:to:)) + case let .sdkUnknown(sdkUnknown): + try writer["sdkUnknown"].write(sdkUnknown) + } + } +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectConfiguration { + + static func write(value: VerifiedPermissionsClientTypes.OpenIdConnectConfiguration?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["entityIdPrefix"].write(value.entityIdPrefix) + try writer["groupConfiguration"].write(value.groupConfiguration, with: VerifiedPermissionsClientTypes.OpenIdConnectGroupConfiguration.write(value:to:)) + try writer["issuer"].write(value.issuer) + try writer["tokenSelection"].write(value.tokenSelection, with: VerifiedPermissionsClientTypes.OpenIdConnectTokenSelection.write(value:to:)) + } +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectTokenSelection { + + static func write(value: VerifiedPermissionsClientTypes.OpenIdConnectTokenSelection?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + switch value { + case let .accesstokenonly(accesstokenonly): + try writer["accessTokenOnly"].write(accesstokenonly, with: VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfiguration.write(value:to:)) + case let .identitytokenonly(identitytokenonly): + try writer["identityTokenOnly"].write(identitytokenonly, with: VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfiguration.write(value:to:)) case let .sdkUnknown(sdkUnknown): try writer["sdkUnknown"].write(sdkUnknown) } } } +extension VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfiguration { + + static func write(value: VerifiedPermissionsClientTypes.OpenIdConnectIdentityTokenConfiguration?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["clientIds"].writeList(value.clientIds, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["principalIdClaim"].write(value.principalIdClaim) + } +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfiguration { + + static func write(value: VerifiedPermissionsClientTypes.OpenIdConnectAccessTokenConfiguration?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["audiences"].writeList(value.audiences, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["principalIdClaim"].write(value.principalIdClaim) + } +} + +extension VerifiedPermissionsClientTypes.OpenIdConnectGroupConfiguration { + + static func write(value: VerifiedPermissionsClientTypes.OpenIdConnectGroupConfiguration?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["groupClaim"].write(value.groupClaim) + try writer["groupEntityType"].write(value.groupEntityType) + } +} + extension VerifiedPermissionsClientTypes.CognitoUserPoolConfiguration { static func write(value: VerifiedPermissionsClientTypes.CognitoUserPoolConfiguration?, to writer: SmithyJSON.Writer) throws { @@ -4842,12 +5529,67 @@ extension VerifiedPermissionsClientTypes.UpdateConfiguration { switch value { case let .cognitouserpoolconfiguration(cognitouserpoolconfiguration): try writer["cognitoUserPoolConfiguration"].write(cognitouserpoolconfiguration, with: VerifiedPermissionsClientTypes.UpdateCognitoUserPoolConfiguration.write(value:to:)) + case let .openidconnectconfiguration(openidconnectconfiguration): + try writer["openIdConnectConfiguration"].write(openidconnectconfiguration, with: VerifiedPermissionsClientTypes.UpdateOpenIdConnectConfiguration.write(value:to:)) case let .sdkUnknown(sdkUnknown): try writer["sdkUnknown"].write(sdkUnknown) } } } +extension VerifiedPermissionsClientTypes.UpdateOpenIdConnectConfiguration { + + static func write(value: VerifiedPermissionsClientTypes.UpdateOpenIdConnectConfiguration?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["entityIdPrefix"].write(value.entityIdPrefix) + try writer["groupConfiguration"].write(value.groupConfiguration, with: VerifiedPermissionsClientTypes.UpdateOpenIdConnectGroupConfiguration.write(value:to:)) + try writer["issuer"].write(value.issuer) + try writer["tokenSelection"].write(value.tokenSelection, with: VerifiedPermissionsClientTypes.UpdateOpenIdConnectTokenSelection.write(value:to:)) + } +} + +extension VerifiedPermissionsClientTypes.UpdateOpenIdConnectTokenSelection { + + static func write(value: VerifiedPermissionsClientTypes.UpdateOpenIdConnectTokenSelection?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + switch value { + case let .accesstokenonly(accesstokenonly): + try writer["accessTokenOnly"].write(accesstokenonly, with: VerifiedPermissionsClientTypes.UpdateOpenIdConnectAccessTokenConfiguration.write(value:to:)) + case let .identitytokenonly(identitytokenonly): + try writer["identityTokenOnly"].write(identitytokenonly, with: VerifiedPermissionsClientTypes.UpdateOpenIdConnectIdentityTokenConfiguration.write(value:to:)) + case let .sdkUnknown(sdkUnknown): + try writer["sdkUnknown"].write(sdkUnknown) + } + } +} + +extension VerifiedPermissionsClientTypes.UpdateOpenIdConnectIdentityTokenConfiguration { + + static func write(value: VerifiedPermissionsClientTypes.UpdateOpenIdConnectIdentityTokenConfiguration?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["clientIds"].writeList(value.clientIds, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["principalIdClaim"].write(value.principalIdClaim) + } +} + +extension VerifiedPermissionsClientTypes.UpdateOpenIdConnectAccessTokenConfiguration { + + static func write(value: VerifiedPermissionsClientTypes.UpdateOpenIdConnectAccessTokenConfiguration?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["audiences"].writeList(value.audiences, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "member", isFlattened: false) + try writer["principalIdClaim"].write(value.principalIdClaim) + } +} + +extension VerifiedPermissionsClientTypes.UpdateOpenIdConnectGroupConfiguration { + + static func write(value: VerifiedPermissionsClientTypes.UpdateOpenIdConnectGroupConfiguration?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["groupClaim"].write(value.groupClaim) + try writer["groupEntityType"].write(value.groupEntityType) + } +} + extension VerifiedPermissionsClientTypes.UpdateCognitoUserPoolConfiguration { static func write(value: VerifiedPermissionsClientTypes.UpdateCognitoUserPoolConfiguration?, to writer: SmithyJSON.Writer) throws { diff --git a/Sources/Services/AWSVerifiedPermissions/Sources/AWSVerifiedPermissions/VerifiedPermissionsClient.swift b/Sources/Services/AWSVerifiedPermissions/Sources/AWSVerifiedPermissions/VerifiedPermissionsClient.swift index 9572400839d..1e6bc25f8c1 100644 --- a/Sources/Services/AWSVerifiedPermissions/Sources/AWSVerifiedPermissions/VerifiedPermissionsClient.swift +++ b/Sources/Services/AWSVerifiedPermissions/Sources/AWSVerifiedPermissions/VerifiedPermissionsClient.swift @@ -305,7 +305,14 @@ extension VerifiedPermissionsClient { /// Performs the `CreateIdentitySource` operation on the `VerifiedPermissions` service. /// - /// Creates a reference to an Amazon Cognito user pool as an external identity provider (IdP). After you create an identity source, you can use the identities provided by the IdP as proxies for the principal in authorization queries that use the [IsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html) operation. These identities take the form of tokens that contain claims about the user, such as IDs, attributes and group memberships. Amazon Cognito provides both identity tokens and access tokens, and Verified Permissions can use either or both. Any combination of identity and access tokens results in the same Cedar principal. Verified Permissions automatically translates the information about the identities into the standard Cedar attributes that can be evaluated by your policies. Because the Amazon Cognito identity and access tokens can contain different information, the tokens you choose to use determine which principal attributes are available to access when evaluating Cedar policies. If you delete a Amazon Cognito user pool or user, tokens from that deleted pool or that deleted user continue to be usable until they expire. To reference a user from this identity source in your Cedar policies, use the following syntax. IdentityType::"| Where IdentityType is the string that you provide to the PrincipalEntityType parameter for this operation. The CognitoUserPoolId and CognitoClientId are defined by the Amazon Cognito user pool. Verified Permissions is [eventually consistent](https://wikipedia.org/wiki/Eventual_consistency) . It can take a few seconds for a new or changed element to propagate through the service and be visible in the results of other Verified Permissions operations. + /// Adds an identity source to a policy store–an Amazon Cognito user pool or OpenID Connect (OIDC) identity provider (IdP). After you create an identity source, you can use the identities provided by the IdP as proxies for the principal in authorization queries that use the [IsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html) or [BatchIsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorizedWithToken.html) API operations. These identities take the form of tokens that contain claims about the user, such as IDs, attributes and group memberships. Identity sources provide identity (ID) tokens and access tokens. Verified Permissions derives information about your user and session from token claims. Access tokens provide action context to your policies, and ID tokens provide principal Attributes. Tokens from an identity source user continue to be usable until they expire. Token revocation and resource deletion have no effect on the validity of a token in your policy store To reference a user from this identity source in your Cedar policies, refer to the following syntax examples. + /// + /// * Amazon Cognito user pool: Namespace::[Entity type]::[User pool ID]|[user principal attribute], for example MyCorp::User::us-east-1_EXAMPLE|a1b2c3d4-5678-90ab-cdef-EXAMPLE11111. + /// + /// * OpenID Connect (OIDC) provider: Namespace::[Entity type]::[principalIdClaim]|[user principal attribute], for example MyCorp::User::MyOIDCProvider|a1b2c3d4-5678-90ab-cdef-EXAMPLE22222. + /// + /// + /// Verified Permissions is [eventually consistent](https://wikipedia.org/wiki/Eventual_consistency) . It can take a few seconds for a new or changed element to propagate through the service and be visible in the results of other Verified Permissions operations. /// /// - Parameter CreateIdentitySourceInput : [no documentation found] /// @@ -1347,7 +1354,7 @@ extension VerifiedPermissionsClient { /// Performs the `IsAuthorizedWithToken` operation on the `VerifiedPermissions` service. /// - /// Makes an authorization decision about a service request described in the parameters. The principal in this request comes from an external identity source in the form of an identity token formatted as a [JSON web token (JWT)](https://wikipedia.org/wiki/JSON_Web_Token). The information in the parameters can also define additional context that Verified Permissions can include in the evaluation. The request is evaluated against all matching policies in the specified policy store. The result of the decision is either Allow or Deny, along with a list of the policies that resulted in the decision. At this time, Verified Permissions accepts tokens from only Amazon Cognito. Verified Permissions validates each token that is specified in a request by checking its expiration date and its signature. If you delete a Amazon Cognito user pool or user, tokens from that deleted pool or that deleted user continue to be usable until they expire. + /// Makes an authorization decision about a service request described in the parameters. The principal in this request comes from an external identity source in the form of an identity token formatted as a [JSON web token (JWT)](https://wikipedia.org/wiki/JSON_Web_Token). The information in the parameters can also define additional context that Verified Permissions can include in the evaluation. The request is evaluated against all matching policies in the specified policy store. The result of the decision is either Allow or Deny, along with a list of the policies that resulted in the decision. At this time, Verified Permissions accepts tokens from only Amazon Cognito. Verified Permissions validates each token that is specified in a request by checking its expiration date and its signature. Tokens from an identity source user continue to be usable until they expire. Token revocation and resource deletion have no effect on the validity of a token in your policy store /// /// - Parameter IsAuthorizedWithTokenInput : [no documentation found] /// @@ -1786,7 +1793,7 @@ extension VerifiedPermissionsClient { /// Performs the `UpdateIdentitySource` operation on the `VerifiedPermissions` service. /// - /// Updates the specified identity source to use a new identity provider (IdP) source, or to change the mapping of identities from the IdP to a different principal entity type. Verified Permissions is [eventually consistent](https://wikipedia.org/wiki/Eventual_consistency) . It can take a few seconds for a new or changed element to propagate through the service and be visible in the results of other Verified Permissions operations. + /// Updates the specified identity source to use a new identity provider (IdP), or to change the mapping of identities from the IdP to a different principal entity type. Verified Permissions is [eventually consistent](https://wikipedia.org/wiki/Eventual_consistency) . It can take a few seconds for a new or changed element to propagate through the service and be visible in the results of other Verified Permissions operations. /// /// - Parameter UpdateIdentitySourceInput : [no documentation found] ///